★初心者にVisual C++を教えるスレ★ Part29at TECH
★初心者にVisual C++を教えるスレ★ Part29 - 暇つぶし2ch369:デフォルトの名無しさん
08/03/15 01:40:35
>>366
普通は
class test{
public:
int i;
test(){ init(1); }
test(int i){ init(i) }
init(int i){ this->i = i;}
};
じゃねーか?
できるとしてもこっちだろ
でもできないような気がする
class test{
public:
int i;
test() : test(1){}
test(int i){ this->i = i;}
};


370:デフォルトの名無しさん
08/03/15 01:44:31
コンストラクタというものがわかってらっしゃらない

371:デフォルトの名無しさん
08/03/15 07:30:38
>>366 をやりたいだけなら、ディフォルト引数でいいんじゃね?

class test{
public:
int i;
test(int i = 0){ this->i = i; }
}

ディフォルト引数だと難しい (例えば、違う型の引数でオーバーロードしたいとか)
なら、>>369 のように共通部分をくくりだしたメンバ関数を作ればいいだけ。




372:デフォルトの名無しさん
08/03/15 09:07:55
ディフォルトwwww

373:デフォルトの名無しさん
08/03/15 09:24:06
別に「デ」でも「ディ」でもいいんでない?
URLリンク(cougar.eb.com)

374:デフォルトの名無しさん
08/03/15 09:39:06
ディスクトップパソコン

375:デフォルトの名無しさん
08/03/15 12:00:42
ハードデスクドライブ

376:デフォルトの名無しさん
08/03/15 13:14:45
ディスク、デスクの場合とは違うっしょ。
URLリンク(cougar.eb.com)
URLリンク(cougar.eb.com)

377:デフォルトの名無しさん
08/03/15 13:36:59
disk [di'sk]
default [difo':lt]

アクセント位置の違いなのかな


378:デフォルトの名無しさん
08/03/15 14:55:27
デホルト

379:デフォルトの名無しさん
08/03/15 16:19:21
Visual Studio 2005 Standard と Visual C++ 2008 Express Edition
を使っています。時々 EUC で書かれたファイルを受け取って開いて
しまい、文字化けしてしまうのですが、ファイルを開くにあたって
想定する文字コードを指定して読み込ませることは可能でしょうか?

UTF-8 と ShiftJIS に関してはどうやら判別してくれるようですし、
保存する際の文字コードにいたってはわざわざ EUC-JP で保存する
こともできるようなのですが、読み込みの際には UTF-8 か ShiftJIS
かどちらか程度しか判別してくれないようです。

せめて「俺はこのファイルを開くときに文字コード○○のつもりで
開いたぜ」ってことがステータスバーに表示されるといいのですが。

マルチバイト文字を含んだソースコードとして
UTF-8, UTF-16LE, Shift-JIS, EUC-JP のものを受け取る可能性が
あるので、できれば Visual Studio のエディタで開く
文字コードに関してどんな判定がされているのかを知りたいです。

380:デフォルトの名無しさん
08/03/15 17:23:07
他のエディタか変換ツール使えばいいだけ

381:デフォルトの名無しさん
08/03/15 18:38:43
PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// 描画処理
DrawMain();


}
}
// Direct3D オブジェクトを解放
RELEASE(lpD3DDEV);
RELEASE(lpD3D);
// 終了する
return 0;
}

382:デフォルトの名無しさん
08/03/15 18:43:16
DestroyWindowでアプリを終了させたいのですが、ウインドウは消えるのですが、
プロセスが残ってCUPがんがん回ってるのですが、全部きれいに消すにはどうすればいいですか?

LRESULT CALLBACK procMainaa(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_CLOSE:
MessageBox(NULL,"WM_CLOSE","test",MB_OK);
DestroyWindow(hWnd);
return 0;

case WM_DESTROY:
MessageBox(NULL,"WM_DESTROY","test",MB_OK);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}

383:デフォルトの名無しさん
08/03/15 18:51:41
さあ?

384:デフォルトの名無しさん
08/03/15 18:56:28
> 全部きれいに消すにはどうすればいいですか
ブレークポイント等を活用しながらトレースし、
問題箇所を探っていこう。

385:デフォルトの名無しさん
08/03/15 21:04:38
TranslateMessageの前に、
if( msg.message == WM_QUIT ) break;
でも入れたら?

386:デフォルトの名無しさん
08/03/15 21:46:59
DestroyWindowにこだわるのは何で?

PostQuit・・・じゃダメなの?

387:デフォルトの名無しさん
08/03/15 22:19:54
DestroyWindowは呼んでも呼ばなくてもいい
ただ自分で呼ばないときはDefWindowProcが代わりに呼ぶように作る
だからどっちみちDestroyWindowは呼ばれる

388:デフォルトの名無しさん
08/03/16 02:23:27
Visual Studio 2008 Express Editions をインストールしたのですが

ファイル > 新規作成 > プロジェクト > 「新しいプロジェクト」のダイアログで
プロジェクト名を入力してもOKボタンが有効になりません。

OSは、XP Home SP2です。

389:デフォルトの名無しさん
08/03/16 07:57:00
VC2008です。
L""でない""の文字列定数をANSI(SJIS)でなく、UTF-8にしたいのですが、どうすればいいですか。
ソースコードをUTF-8で保存しても、SJISにされるようです。

390:デフォルトの名無しさん
08/03/16 08:32:57
WideCharToMulltiByte

391:デフォルトの名無しさん
08/03/16 08:45:39
定数をUTF-8にしたいんですが…
実行時に変換するしか方法はないですか?

392:デフォルトの名無しさん
08/03/16 10:07:31
あとはファイルから読み込むとか、
"\xe4\xb8\xAD"のように地道に十六進拡張表記を書くくらいしかない。

393:デフォルトの名無しさん
08/03/16 10:27:27
Visual C++ では wchar_t の文字列は
UTF-16 なんですか?それとも UCS2 なんですか?

394:デフォルトの名無しさん
08/03/16 11:08:08
サロゲートペアを扱えたらUTF-16、そうでなければUCS-2。
それは冗談としても、最近のWindowsはUTF-16だから、
UTF-16として扱っておくのが吉。

395:デフォルトの名無しさん
08/03/16 16:47:44
Windowsの内部でUnicode使ってるからVCでUnicodeを使うようになっただけだから
あくまでWindowsのためのUnicodeなんだと考えておいた方がいい。

396:デフォルトの名無しさん
08/03/16 17:42:10
結局マルチバイトじゃん・・・
いや、マルチワードじゃん・・・
まぁ合成文字とかもあるから仕方ないか。
いっそのこと Mule の内部表現にしてしまへ!

397:デフォルトの名無しさん
08/03/18 01:45:20
VisualC++6.0を使って一人でプログラムを作っているのですが、
だんだんとソースファイルが増えてきて60個ぐらいになりました。
これらのファイルは1つのフォルダに入れているのですが、
ファイル名の衝突が気になり始めました。衝突を防ぐ方法として
次の二つの方法を思いつきました。

(1) ファイル名にサフィックスやプリフィックスを付けるなどして
名前が重複しないようにする。(今まで通り、1つのフォルダに全て
のソースファイルを入れる。)

(2) ファイルをフォルダに分けて管理。

ソフトウェア開発の現場では多数のソースファイルをどのように
管理していますか?アドバイスをお願いします。

398:デフォルトの名無しさん
08/03/18 01:51:54
>>397
ファイル名が衝突する=ファイル分割が間違っているorファイル命名が間違っている
とは思うけど、まぁよくあることだよな。
1も2も大差はないと思うけど見た感じ管理されてそうに見える2を選択するかな?
ただincludeパスを書くのが面倒かもしれないが・・・


399:デフォルトの名無しさん
08/03/18 01:56:41
>>398
>ファイル名が衝突する=ファイル分割が間違っている
>orファイル命名が間違っている
>とは思うけど、まぁよくあることだよな。

適切にファイル分割して正しく命名すれば、ファイルがいくら
増えても名前が衝突することはないのですか?

400:デフォルトの名無しさん
08/03/18 02:00:48
名前入れ忘れたけど399==397です。

401:デフォルトの名無しさん
08/03/18 02:01:45
>>399
システムの規模にもよると思うけど、俺のしょぼい経験じゃまず無いように思う。
きちんと命名し、役割が変わってしまった、役割を分割したときなんかに正しくリネームしてれば無さそうだけど・・・

402:397
08/03/18 02:22:48
>>401
とすると、開発の現場では1つのフォルダで全てのソースを管理する
のが一般的だということでしょうか? ちょっと意外です。

403:デフォルトの名無しさん
08/03/18 02:31:40
>>402
いやいやw>>397の2だよ。いちばん深い階層で4くらいかな?
ファイル数はヘッダー含めて100位だと思う。数えたことないけど・・・
1フォルダあたりファイルが20超えるくらいから考え始めて、50超えたらまずフォルダわけする。
というか、ファイルが増えたからフォルダわけっていうより役割の分割が自然とフォルダ単位になる。

404:397
08/03/18 02:57:59
>>403
やっぱりそうですか。ファイルの役割に着目してフォルダ分けする
のが自然ですよね。

僕の場合、Visual C++のFileViewのツリーで細かくフォルダ分けして
ファイルを分類しています。だから実際のファイルのフォルダ分けは
特に必要がないように感じていました。FileViewのツリーとWindowsの
フォルダのツリーを同じに保つのはめんどくさい(片方を変更したら
もう片方も変更しなければならない。)ので実際のファイルは分類せず
に1つのフォルダに放り込んでいました。

一人で開発していると、このような方法が一般的かどうかわからない
ので、アホなことをやってるんじゃないか、とか思うことが良くあります。


405:デフォルトの名無しさん
08/03/18 06:02:52
一般的ではないアホなことをやっている

普通はプロジェクトごとにフォルダわけするだろ
さらに別プロジェクトでも共有するライブラリなどのヘッダも
別フォルダにしてパスを通す

406:デフォルトの名無しさん
08/03/18 08:37:57
大量のソースがある巨大プロジェクトなのかと思ったけど
ファイル名の衝突とか言ってるから、今まで作ってきた全然関係ないプログラムが
1つのフォルダにごっちゃごちゃに存在してるということか?

407:デフォルトの名無しさん
08/03/18 12:33:31
>>397
参考までに衝突する(した)ファイル名を教えてほしい
一人で作っていて名前が衝突するって考えられんのだが

408:デフォルトの名無しさん
08/03/18 19:04:09
>>362みたいな感じでVisualC++起動時にエラーが出るんですけど、解決法は無いですか

409:デフォルトの名無しさん
08/03/18 19:06:35
新しいパソコン買う

410:デフォルトの名無しさん
08/03/18 19:08:29
>408
しつこい

411:408
08/03/18 19:21:38
初心者に教えるスレでそんな風に言われても…

412:デフォルトの名無しさん
08/03/18 19:29:36
いやだから新しいパソコン買えよ
てかまずPCスペックぐらい書けや

413:408
08/03/18 19:33:50
>>412
WindowsXP HomeEdition
Intel Celeron M processor 1.60G
メモリ 704M

414:デフォルトの名無しさん
08/03/18 19:53:55
OSから再インストール、それで駄目なら新しいパソコン買う

415:408
08/03/18 19:59:06
分かりました。ありがとうございました

416:デフォルトの名無しさん
08/03/18 21:47:42
VC++2008でC++の勉強を始めたものです。新規プロジェクトでコンソールアプリを選択して
新規プロジェクトを作成し、そこに既存のCPPファイルとかヘッダとかを追加したのですが、
ヘッダがコンパイラに認識されておらず、コンパイル時にヘッダがないというメッセージが
でてコンパイルできません。どうすればよいですか?
どうかよろしくお願いします。

417:デフォルトの名無しさん
08/03/18 23:06:01
ヘッダーがないなら
ヘッダーを用意しなきゃだめじゃない。

418:デフォルトの名無しさん
08/03/18 23:15:08
>>416
全部がファイルシステム上で同じフォルダにあるか?
違うフォルダにあるなら、同一のフォルダにまとめてから追加しろ。


419:デフォルトの名無しさん
08/03/19 00:43:20
今windowsにログインしているユーザーに
管理者権限があるかどうかを判別する関数があれば教えてください。

420:デフォルトの名無しさん
08/03/19 00:51:44
Administratorsグループに属しているかってこと?

421:デフォルトの名無しさん
08/03/19 01:43:08
すいません、今インストールするなら
Visual C++ 2008 再頒布可能パッケージ (x86)
だけでいいでしょうか?

Visual C++ 2005 再頒布可能パッケージ (x86)
も入れておいた方がいいですか?

422:デフォルトの名無しさん
08/03/19 04:46:11
最近VisualC++2005ExpressEditionをインストールして
簡単なHelloWorldプログラムを書いてビルドしようとしたのですが
エラーが出て先に進めなくなってしまいました。
OSはWindows2000。win32/コンソールアプリケーション/空のプロジェクト、で書いてます。

エラーの内容は以下です。↓
致命的なエラー C1902
プログラム データベース マネージャが一致していません。セットアップが正しく行われているか確認してください。

マニュアルによると対処方は以下です。↓
プログラム データベース ファイル (.pdb) は、
コンパイル時に検出されたものより DBI.dll のより新しいバージョンを使用して、作成されました。
最新バージョンの DBI.dll をシステムにインストールしてください。

しかしパソにはDBI.dllはインストールされておらず、どこから入手したものか見つかりません。

エラーの前に次の警告も出ていました。
警告 D9028 : 簡易リビルド時のエラーです、通常のビルドに戻します
マニュアルによると、
プロジェクトの .idb ファイルが破損しています。このファイルを削除して、リビルドしてください。

しかしそもそも.idbファイルが生成されていません。
プロジェクトのプロパティで簡易リビルドをオフにしたら出なくなりましたが、
要するに簡易リビルドできないということなので、どうも落ち着かないです。

もしわかる方いたらおしえてください。

423:デフォルトの名無しさん
08/03/19 06:10:26
リビルド 最初から全部ビルドやりなおし
簡易リビルド 一部のファイルを除いてビルドやりなおし

一回リビルド通ったら次からは簡易リビルドで問題ないはず

424:397
08/03/19 08:05:03
>>407
僕のプログラムでは、字句解析を行うLexクラスというクラスが
二つ必要です。二つのLexクラスを作って、別々の名前空間に入れました。

1つは、DIC::Lexクラスです。
もう1つは、CP::Lexクラスです。

これらのクラスのためのヘッダと実装のファイル名はともに
lex.hとlex.cppですから衝突しました。

僕はプリフィックスを付けて二つを区別しました。
(dlex.h, dlex.cpp) と (clex.h, clex.cpp)

これで不満はないのですが、プリフィックスを付けで衝突を避ける
代わりに、ファイルをフォルダで分類することによって衝突を避ける
という手もあるかな、と思ったのです。

425:397
08/03/19 08:06:51
>>405さんのレスが非常に気になるのですが、僕が>>404で書いたことが
うまく伝わってないような気がするので、もう一度きちんと説明します。

僕のプロジェクトのフォルダ構造は次の通りです。

<CoolCorpus> プロジェクトのフォルダ
├<Release>
├<Debug>
├<souce>
├<data>
└<test>

上記のCoolCorpus\souceにすべてのソースファイル(26個の.hファイルと
36個の.cppファイル)をフォルダ分けせずに置いています。

62個のファイルは全てCoolCorpusプロジェクトに参加しています。
従って、ワークスペースウィンドウの "FileView" タブのツリーには62個の
ファイルが表示されています。

"FileView"タブのツリーは、フォルダを作って自由にカスタマイズできます。
そこで、僕はデフォルトで作成される3つのフォルダ

Source Files, Header Files, Resource Files

を削除してしまいました。そして以下のようにツリーを構成
しました。(ファイル数が多いので簡略化しました。)

426:397
08/03/19 08:07:21
<CoolCorpus ファイル>
├ <下請け>
│ ├<StdAfx>
│ │ ├StdAfx.cpp
│ │ └StdAfx.h
│ └<File>
│   ├file.cpp
│   └file.h
├ <Core>
│ ├<Dictionary>
│ │ ├<Lex>
│ │ │ ├dlex.cpp
│ │ │ └dlex.h
│ │ ├<Freq>
│ │ │ ├freq.cpp
│ │ │ └freq.h
│ │ ├dictionary.cpp
│ │ └dictionary.h
│ └<Corpus>
│   ├<Lex>
│   │ ├clex.cpp
│   │ └clex.h
│   ├corpus.h
│   ├corpus1.cpp
│   ├corpus2.cpp
└ main.cpp

427:397
08/03/19 08:08:08
1つのクラス用に hと.cppを作り、それらをセットにして一つのフォルダに
入れています。フォルダといっても、FileViewのフォルダです。
本当のフォルダ(Windowsのフォルダ)ではありません(念のため)。

ソースを読むときは、このツリーをクリックしてソースを表示させます。
"ClassView"タブは全く使いません。

さて、この方法は変でしょうか?
開発現場での方法が知りたいのですが。。。

428:デフォルトの名無しさん
08/03/19 09:12:13
以下のプログラムから出力される数字を、
wavファイルにするにはどうすればいいでしょうか・・

#include <iostream>
#include <math.h>
using namespace std;
const int rate=44100;

int p(double q, int f, int t)
{
const double pi=3.1415;
double x;
x=sin(2*pi*f/rate*q);
cout << int(x*127+128+0.4999);
cout << "\n";
if (f<t) p(q,f+1,t);
return 0;
}

int main(void)
{
p(440.0 , 0, rate);
return 0;
}

429:デフォルトの名無しさん
08/03/19 10:00:38
WAVファイルのヘッダを知りたいのか
ファイルへのバイナリ出力が知りたいのか
まあ両方書いてもいいけど、それあっという間にスタック食いつぶさないか?
普通にループでいいべ。

430:デフォルトの名無しさん
08/03/19 10:14:09
>427
オープンソースで開発してるのがいっぱいあるから好きなだけ見ればいい

431:デフォルトの名無しさん
08/03/19 10:36:46
>>429
すみません、両方です。

432:デフォルトの名無しさん
08/03/19 10:45:18
ProgramingWindowsにsinwaveとかいうサンプルあったと思う

433:デフォルトの名無しさん
08/03/19 14:17:11
Visual C++ 2005の超初心者ですが、今、誰か教えてくれる人いらっしゃいますか?
ちなみにC言語では簡単なプログラムをいくつか作ったことありますが、VCは初めてです。

434:デフォルトの名無しさん
08/03/19 14:19:27
何?

435:デフォルトの名無しさん
08/03/19 14:22:26
MFCアプリのダイアログベースでボタンを用意し、そのボタンを押したらRS232で通信するプログラムを作りたいです。
URLリンク(www.geocities.jp)

これを参考に作成したつもりですが、全くの初心者なので、これをどう使っていいのかがわかりません。
一応、それぞれをinit, write, readとして関数にし、ボタンクリック動作の関数で呼び出そうとしたんですができません。
クラスの概念なんかをもっと理解しなければいけないと思うのですが、時間もないので教えて頂ければ幸いです。

よろしくお願いします。

436:デフォルトの名無しさん
08/03/19 14:25:36
>>427
はっきりいいますがアナタは頭がおかしいです
同一のプロジェクトに参加しているのならば別のファイル名にするべきです

437:デフォルトの名無しさん
08/03/19 14:28:00
まずはファイルを読み書きするプログラムから勉強すれば?
あとは通信でも同じようなもんだ

438:デフォルトの名無しさん
08/03/19 14:30:28
>>435
分不相応な事はしない事です。
まったくの初心者であればまずは理解からはじめましょう

439:デフォルトの名無しさん
08/03/19 14:40:12
>>437さん
アドバイスありがとうございます。
ファイル読み書きやってみます。

ちなみに私のやってることって考え方間違ってますか?
init関数にして呼び出したりって。
Cでのイメージが抜けないのですが、、、

440:デフォルトの名無しさん
08/03/19 14:42:51
>>436さん
全くその通りです。ほんとはもっと時間をかけてやるべきですが、仕事で時間が限られているので相談させてもらいました。。。


441:440
08/03/19 14:43:43
間違えました。>>438さんです。

442:デフォルトの名無しさん
08/03/19 14:44:34
そういうサンプルなら探せばあると思う

443:デフォルトの名無しさん
08/03/19 14:56:32
VC++ 2005ProでPCの情報を取得する→CSVで指定したフォルダに吐き出す
というプログラムをあと三日で作成しなければなりません。
慣れた方なら1日で出来るみたいに言われたのですけど、
VBしかやったことなくてプロジェクト作成からさっぱりです。
本当はちゃんとC++の勉強をしてから取り組んだ方がいいのでしょうが
時間がないので無理なんです。
誰か手取り足取り教えてくれませんか?
ちなみに取得する情報は
PC基本情報
ハードウェア基本情報
ユーザー情報
ネットワーク情報
論理ドライブ情報
物理ドライブ情報
プリンタ情報
インストールされている全アプリケーション情報
です。
お願いします。。。





444:デフォルトの名無しさん
08/03/19 14:57:56
>>432
その本(サイトじゃないですよね)って、5版>4版>3・・・
って考えていいんですか。

445:デフォルトの名無しさん
08/03/19 15:26:52
>444
最初に出てくるサンプルは単に正弦波を描画するやつで
音を鳴らす用に改造したサンプルはあとの方に出てくる

サウンド関係のサンプル
AddSynth
BachTocc
Drum
KBMidi
Record1
Record2
Record3
SineWave
TestMci
WakeUp

446:デフォルトの名無しさん
08/03/19 15:28:56
上下卷必要?

447:デフォルトの名無しさん
08/03/19 16:23:44
>>443
仮にWMIで取得できる情報だけだったら、
VBScriptやVB6系でやるのが簡単だと思う。

あと、手取り足取り教えるほどのお人好しはここにはいないと思うぞ。

448:443
08/03/19 16:28:58
>>447
そうですか。。。
VB6のソースはあります。
これをVC++2005で作り直さなければならないのです。

449:デフォルトの名無しさん
08/03/19 17:02:14
そういえばMSDNにシリアル通信のサンプルがあった

//---------------------------------------------------------------------------
//
// Module: tty.c
//
// Purpose:
// The sample application demonstrates the usage of the COMM
// API. It implements the new COMM API of Windows 3.1.
//
// NOTE: no escape sequences are translated, only
// the necessary control codes (LF, CR, BS, etc.)
//
// Description of functions:
// Descriptions are contained in the function headers.
//
//---------------------------------------------------------------------------
//
// Written by Microsoft Product Support Services, Windows Developer Support.
//
//---------------------------------------------------------------------------


450:デフォルトの名無しさん
08/03/19 17:04:51
シリアルは慣れてないとハマるから、mscomm.ocx使ったほうが楽かも

451:デフォルトの名無しさん
08/03/19 17:40:12
>>397
職業プログラマだけど、自分はそうやってるし、他の人もそうやってる。
一般的かどうかまでわからないが、合理的な方法と思う。

実際のディレクトリ構成は、ファイル数が多くなったら機能ごとに分けてる。
その方が管理しやすいから。

ファイル名はプリフィックスをつけて一意にする。
ディレクトリが別になってても、単体で見たときに区別できないから。

452:デフォルトの名無しさん
08/03/19 18:08:53
下記のソースでVC++6.0では問題なかったのですが
VC++.net 2003で実行すると
HRESULT hr = com_object_type::CreateInstance(&sink_);
のところでアプリ(IE)が落ちてしまいます。
6.0と2003ではATL関連が結構変わってしまったようなのですが
これはソースを直すべきなのでしょうか?
あるいはプロジェクトのプロパティなどで対処できるものでしょうか?
もしご存知の方いたら教えてくださいませ。よろしくお願いします。


////ecom_event_sink : シンクラッパー
template<class Event>
class com_event_sink {
typedef CComObject<Event> com_object_type;
com_object_type* sink_;
CComPtr<IUnknown> unk_;
public:
HRESULT create() {
HRESULT hr = com_object_type::CreateInstance(&sink_);
if ( SUCCEEDED(hr) )
sink_->QueryInterface(IID_IUnknown,(void**)&unk_);
return hr;
}
com_object_type* operator->() {
return sink_;
}
};


453:デフォルトの名無しさん
08/03/19 18:29:00
>>452
CoInitialize()はちゃんとやってる?

454:397
08/03/19 20:53:43
>>430
なるほと。調べてみます。お勧めのがあったら教えてください。

>>436
やっぱりそうですか。

>>451
丁寧にありがとうございます。不安が解消されました。

今後、次のようにしようかと思っています(今のところ)。

(1) (今まで通り)すべてのファイルのファイル名が一意になるようにする。
(2) ファイルを機能別にフォルダ分けする。
  (FileViewでの分類とは別の観点で分類する)

455:451
08/03/19 21:29:52
>>454
>(2) ファイルを機能別にフォルダ分けする。
>  (FileViewでの分類とは別の観点で分類する)

FileViewと同じにした方が楽だと思うけど。

ちなみに今のプロジェクトでは主にnamespaceにあわせてる。フォルダ階層も。
比較的管理しやすい。

456:デフォルトの名無しさん
08/03/19 23:35:16
OPENFILENAME でファイルを読み込む場合に最初にパスを指定しないと
プログラムを再起動しても最後に開いたパスがカレントディレクトリ
になってますが、これは何処にパスが記憶されてるのでしょうか?


457:デフォルトの名無しさん
08/03/19 23:39:56
ゲーム作るとしたら

普通はbeginthreadexとかでループさせるもんですか?
それともpeekmesseageとかでループさせますか?

ゲーム内のオブジェクトとかどうやって管理しますか?
クラスをvectorに叩き込んで適当に追加したり削除したりでいいんですか?

ネタじゃないです
マジレスお願いします

458:デフォルトの名無しさん
08/03/19 23:41:45
ゲーム製作板がある

459:デフォルトの名無しさん
08/03/20 01:50:42
複数のファイル(cpp)を作ると
クラスとかの変更があるたびに
いちいちexternのほうも修正しなくてはならなくてめんどくさいんですが
そこらへんを自動でやってくれる機能はないですか?

460:デフォルトの名無しさん
08/03/20 01:51:52
全部ヘッダに書けば。

461:デフォルトの名無しさん
08/03/20 01:51:53
2008にMFCはないんですか?

462:デフォルトの名無しさん
08/03/20 08:27:22
>>457
もうちょっと具体的でないと答えづらいが、beginthreadexでループというのは普通じゃないと思う。

>>459
C++でexternは使わないことが多い。

463:デフォルトの名無しさん
08/03/20 10:50:29
>>461
Standard以上に付いている。

464:デフォルトの名無しさん
08/03/20 12:21:59
>>457
ネタじゃないなら、beginthreadex について調べてからこい。

どんなプログラムかわからんので beginthreadexe をループで
と言うのがおかしいかどうかはわからんけど、peekmessage と
同列にしてるのは明らかにおかしいと思う。

465:462
08/03/20 12:32:49
>>464
うん。そういう意味で書いた。メッセージにつき1スレッドで処理するってことかな。
使ったことないけどユーザーインタフェーススレッドがそんな感じなのかな。

466:デフォルトの名無しさん
08/03/20 18:01:37
>>463
もしかしてMFCはいらない子ですか?

467:デフォルトの名無しさん
08/03/20 19:10:59
貧乏人にはいらない

468:デフォルトの名無しさん
08/03/20 19:14:23
Expressは試供品だろ

469:デフォルトの名無しさん
08/03/20 21:32:54
>>454
まさかと思うが、1クラス1ファイルなんて妄執に囚われていないだろうな。

470:デフォルトの名無しさん
08/03/20 22:06:12
>>469
いやそれは基本だろ…

471:デフォルトの名無しさん
08/03/20 22:12:14
>>457
普通にメインスレッドにゲーム用ループ作って
そのループの中にメッセージループを処理する関数つくって入れてた
ただ、メインスレッドでやると、メニューポップアップ時とかにメッセージループで
処理がとまるから
ユーザー操作に関係ないリアルタイム系のゲームを作っている場合などは
気をつけないとはまるかも

472:デフォルトの名無しさん
08/03/20 22:13:21
>>457
つまり、peekmessage方式ね

473:デフォルトの名無しさん
08/03/20 22:19:15
>>464
別に>>457はおかしいことは言ってないよ
win32プログラムの場合、一般的にはメッセージをgetmessageによるループで処理させるけど
ゲームみたいな場合にはメッセージ処理をループではなく局所的に処理させたい場合がある
メッセージがない時抜けるためにpeekmessageでメッセージの有無確認を行うというのは良くやる手法

474:デフォルトの名無しさん
08/03/20 22:25:24
間違えた
peekmessage使うとメニューポップアップとかではとまらないかも
VBのDoEventsはとまったような気がしたが

475:デフォルトの名無しさん
08/03/20 22:29:40
ゲーム関係はゲーム板のやつが詳しいだろ

476:デフォルトの名無しさん
08/03/20 22:34:38
ためしにpeekmessageを使ってメニューポップアップしてみたらやっぱり止まるね
ということで、>>474は無しでw

477:デフォルトの名無しさん
08/03/20 22:40:02
>>475
確かにw
俺もWindowsゲーム作ってたのって
もう8年も前だからすっかり忘れてるわ

478:デフォルトの名無しさん
08/03/20 23:19:31
>>473
peekmessage に突っ込んでる奴なんていないから、

> 普通はbeginthreadexとかでループさせるもんですか?

についての君の意見を聞かせてくれ。


479:デフォルトの名無しさん
08/03/21 00:28:42
478みたいな
俺のほうが正しいと認めるまで論議をやめない
みたいな奴がいるとウザイ


480:デフォルトの名無しさん
08/03/21 00:56:00
ヘッダってなんで自動で書いてくれないわけ?
全部読み込んでから使わないヘッダを削除して軽くすればいいじゃん


481:473
08/03/21 01:25:33
>>478
457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
メインスレッドでループさせるのとどっちが良いかという意味でしょ
で、beginthreadexについて俺は何を意見すればよいんだ?

482:デフォルトの名無しさん
08/03/21 01:39:13
>>480
何が言いたいのかよくわからんがヘッダに何を書くかは自由だぞ?
書くのが面倒ならヘッダなんて作らなきゃいいじゃないか。

483:デフォルトの名無しさん
08/03/21 01:50:33
まず標準関数がなんのヘッダ使ってるか調べるのがだるい
使わなくなったら他に使ってないか全コード調べて使ってなかったらゴミだからヘッダ消すのもだるすぎる


484:デフォルトの名無しさん
08/03/21 02:21:33
めんどくせぇならすべてをincludeしたヘッダでも作れば?
include消すのならincludeをコメントアウトしてコンパイルエラーでなけりゃOKとかでいいんじゃね?
ってか余分なヘッダーをincludeしたからといって実害は無いと思うぞ?

485:デフォルトの名無しさん
08/03/21 03:01:52
ほんとだ!なんでいっぱいインクルードしてもプログラムサイズ増えないんだ??

486:デフォルトの名無しさん
08/03/21 03:39:45
コンパイラは賢いから。
宣言と定義の違い。実態がないもの(宣言)はいくらあったところでプログラムサイズは変わらない。

487:デフォルトの名無しさん
08/03/21 07:30:02
>>481

>457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
ゲームだとこういうやり方は普通なの?
メインスレッドでメッセージループして、重い処理を別スレッドにするのが普通と思うんだけどな。

あと457がこういう意図なのかどうかは不明。自分は457からはそう読み取れない。
464のように解釈した。

488:デフォルトの名無しさん
08/03/21 10:04:35
>>485
増えるのはコンパイル時間だけ。
ヘッダの中で変数定義しているのでもない限りプログラムの大きさは増えない。

489:デフォルトの名無しさん
08/03/21 10:39:27
>>487
普通かどうかについてはわからない 
少なくとも、俺が勤めていたゲーム会社のゲームライブラリはゲームループを
メインスレッドに組み込んでいた(ADVだからそれでぜんぜん問題なかった
ただ、>>471で書いたようにメニューポップアップが発生するとイベントループ関数から
戻ってこないような状況もあるから、サブスレッドによるゲームループもありだと思うよ

俺の場合は逆で
beginthreadexとpeekmessageを対比しているのでゲームループ処理を行う場所を
メインスレッドかサブスレッドどっちすればよいか?と質問していると判断したんだけどね

490:デフォルトの名無しさん
08/03/21 12:25:44
ありがとうございます。全ヘッダを書いたヘッダを作ってそれを使うことにしました。

491:デフォルトの名無しさん
08/03/21 20:18:35
>>489
サブスレッドでメッセージループする場合、メインスレッドはサブスレッドからの通知を待つの?
どうもこの方法の意義が分からないな。

繰り返しになるが、メインスレッドでメッセージループして、時間がかかる処理だけ別スレッドに
すればいいしそれが普通と思う。
あとメニューポップアップの表示ではループは止まらんと思う。表示してすぐ次のメッセージを処理すると思う。
止まるのはモーダルダイアログ出す場合とか。

あと質問を489のような解釈をするには「普通はbeginthreadexで作った別スレッドででループさせるもんですか?
それともメインスレッドででループさせますか?」じゃなきゃ変だと思う。

492:デフォルトの名無しさん
08/03/21 20:51:01
>止まるのはモーダルダイアログ出す場合とか。

ごめん。間違えた。これもメッセージは止まらんわ。処理時間の長い処理を入れなければ。


493:デフォルトの名無しさん
08/03/21 22:19:29
>>479
だったら、スルーしとけばいいのに。

494:デフォルトの名無しさん
08/03/21 23:05:37
>>493
見なければいいのに
ヌルーすればいいのに
書き込まなければいいのに
なんて言うだけ無駄です


495:デフォルトの名無しさん
08/03/22 00:46:04
確かに無駄だったな。(w

496:デフォルトの名無しさん
08/03/22 12:05:43
VisualStadioをインストールしたのですが、なぜかコンパイルができません。
ちなみに作ったテキストを.cに変換してCソースファイルになるはずなのですが、それも行われません。
しかし、ビルドは行うことが出来ます。
コンパイルの操作を行おうとする時に「拡張子に関連したコンパイルツールがありません」となります。
これは私なりに考えてCソースファイルになってないからだと考えます。
しかし、その根本的な原因がわかりません。
原因は何でしょうか?(長文失礼)

497:デフォルトの名無しさん
08/03/22 13:09:51
Vistaなんじゃねーの

498:デフォルトの名無しさん
08/03/22 13:27:30
単純に拡張子が表示されていないだけだと思われ。
Vista の Explorer でデフォルトがどういう表示なのかは知らん。

499:デフォルトの名無しさん
08/03/22 14:18:50
> VisualStadio

釣りか、ネタか、バカだろ。

相手にしないように。

500:デフォルトの名無しさん
08/03/22 17:22:43
>>499
初心者質問スレでその対応はないだろ

501:デフォルトの名無しさん
08/03/22 17:25:18
お前が親切に相手してやれ

502:デフォルトの名無しさん
08/03/22 17:31:43
>500
手本を示せ

503:デフォルトの名無しさん
08/03/22 19:22:16
>>491
勘違いしているようだが、メッセージループはメインスレッドでやるんだよ
ゲームループと言ってるものは、ゲームを作る場合イベントドリブン方式を使わないで
ゲームの進行に関わる処理をループで行う
単純な例では、キー入力->ステート変化->画面表示->キー入力->....こんなループを組む
たとえば、キー入力をWM_KEYDOWNのメッセージハンドラーで受けないで
GetKeyboardStateとかを使ったりして今のキーの押下状態を取得する
どうしてそのようなことをするのかについてはゲーム作成などのHPでも見てもらいたい
メニューポップアップに関しては、そのpeekmessageを使ったルーチンを作って実際に試してみてね
質問の仕方が変だというのに関しては確かにそう思う、だけどここは初心者スレだから多少の意訳はしてあげても良いと思った

質問者がすでに消えたようなのでもうこの問題はこれで収めようとおもうんだけど

504:デフォルトの名無しさん
08/03/22 19:24:12
とっくに終わってるのに1人で何やってんの?

505:デフォルトの名無しさん
08/03/22 19:43:05
>>503
誤解されると良くないからちゃんと書いておくが
メッセージループは、beginthreadexによる別スレッドでゲームループを作る場合も、
peekmessageをつかったメインスレッド中にループを作る場合も、メインスレッドで行うと言う意味ね

このことは当たり前の前提で話していたつもりなんだが、>>465の書き込みを見ると
すでに認識の違いがそこにあったようなので一応書いておいた

506:デフォルトの名無しさん
08/03/22 19:45:15
>>504
この板は、どの書き込みが>>491なのか判らないので
終わっているかどうかは判らんから一応ね

507:デフォルトの名無しさん
08/03/22 19:45:20
また始まったか

508:491
08/03/22 20:20:46
なるほど。ゲームループというのを知らなかったから話が噛み合わなかったわけだ。申し訳ない。
なんでGetMessageじゃなくてPeekMessageなんだろうと思ってたけど、そういうことね。

>505
指摘どおり、認識違いしていた。

ただポップアップメニューについてはやはり分からない。試したけど止まらなかった。
「メニューポップアップ」とはTrackPopupMenuを使ったポップアップメニューのことと思ってたんだけど、それが違う気がしてきた。
説明して欲しい。

ゲームループは以下とほぼ同じ。ウィンドウプロシージャのWM_RBUTTONUPでTrackPopupMenuをコールした。
URLリンク(www.geocities.co.jp)

#質問者は去ったが、もうちょっと続けさせて欲しい。

509:デフォルトの名無しさん
08/03/22 21:10:00
どっかよそでやってほしい
ゲーム製作板あたりで

510:デフォルトの名無しさん
08/03/23 00:57:12
お聞きしたいのですが

ボタンがもっとも美しく見える大きさについて
横幅はフォントの高さに対して x分のy
高さはフォントの高さに対して z分のw

と言う推奨比率みたいなのを
その昔MS発行の何かの書籍で見た記憶があるのですが
どなたかご存じであり 且つ 教えていただけませんでしょうか…


511:422
08/03/23 09:02:43
>>423
ありがとうございます。
初回のビルドでは警告がでて当然なんですね。
実際にも簡易リビルドの警告のあと、自動的に通常ビルドされていました。
通常のビルドでのエラーに絞ってなお調べてみようと思いますm(_ _)m

あれからすぐ書き込み規制に入ってしまい返事が遅くなりすみません。

512:デフォルトの名無しさん
08/03/23 16:58:57
何度でも蘇るよ!

513:デフォルトの名無しさん
08/03/24 14:12:56
Win32APIとランタイムライブラリを使ったプログラムで、_beginthreadを使ったら
_beginthreadexを使えって怒られたんだけど、_beginthreadの問題点を調べても
なかなかわからない。

スレッドの終了コードや生成時の状態を指定する必要が無ければ_beginthreadでも
いいような気がするんだけど。

どんな問題点があるんですか?おすえてくらさい。

514:デフォルトの名無しさん
08/03/24 14:46:22
スレッド起こしっぱなしで放置でいい用途なら_beginthreadで問題ないんじゃ。
WaitForSingleObjectとかするなら_beginthreadexを使うべし。

URLリンク(msdn.microsoft.com)
>_beginthread よりも _beginthreadex を使用した方が安全です。_beginthread が作成したスレッドの終了が早すぎると、
>_beginthread の呼び出し元に返されるハンドルが無効となる可能性や、別のスレッドを指してしまう可能性があります。
>しかし、_beginthreadex から返されるハンドルは _beginthreadex の呼び出し元で閉じられる必要があるため、
>_beginthreadex がエラーを返さなかった場合にはハンドルが有効であることが保証されます。

515:513
08/03/24 22:05:57
514>>
アリガ㌧
やっぱハンドル使ったりしないなら_beginthreadで問題ないよね?

でも上司に反抗するのも建設的じゃないんで_beginthreadexに書き換えますたw

516:デフォルトの名無しさん
08/03/24 22:40:12
WindowsXPでVisual C++ 2008 Express Editionを三日くらい使っているのですが、
プログラムを実行したときの表示が一瞬で消えてしまいます
ずっと表示させるにはどうしたらいいですか?

517:デフォルトの名無しさん
08/03/24 22:53:00
ヤフオク見るとVC++.netのスタンダードしかないんだけどプロフェッショナル
って品薄なのですか?スタンダードとプロフェの価格が知りたいです。

518:デフォルトの名無しさん
08/03/25 01:12:14
>>516
[デバッグ]-[デバッグなしで開始]

519:デフォルトの名無しさん
08/03/25 01:33:58
>>516
main関数の最後に↓を追加
getchar();


520:デフォルトの名無しさん
08/03/25 14:32:27
>>517
スタンダード2~3万 プロフェショナル8~9万ぐらい

521:デフォルトの名無しさん
08/03/25 20:58:40
>>516
コマンドラインで実行

522:デフォルトの名無しさん
08/03/25 22:42:33
>>517
おとなしくExpress使ってろよ


523:sage
08/03/26 19:21:13
ListBoxで長いテキストの右は隠れんだけど、マウスを乗せて
ポップアップ窓に全文表示ってどうすんの?
調べんだけどわからん

524:523
08/03/26 19:24:34
久し振りで来たら名前とE-mail間違え


525:デフォルトの名無しさん
08/03/26 20:07:35
>>523
tooltip

526:デフォルトの名無しさん
08/03/26 20:32:13
>>525
ありがとうございます
tooltipにテキストを取得ってどうするんでしょうか?
コントロールやなんかのヘルプは表示できるんですが

527:デフォルトの名無しさん
08/03/26 21:19:36
int APIENTRY WinMain(HINSTANCE hInstance,
     HINSTANCE hPrevInstance,
     LPSTR lpCmdLine,
     int nCmdShow){

  HANDLE hMutex = CreateMutex(NULL,FALSE,szInstance);
  if(::GetLastError() == ERROR_ALREADY_EXISTS){
   CloseHandle(hMutex);
   return FALSE;
  }

  DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgWndProc);

  return 0;

}

この記述でリリースビルドをしても構成エラーとかで起動できないPCがあるんですが、原因が分かりません;
分かるかた是非お願いいたします。

528:デフォルトの名無しさん
08/03/26 21:35:34
そのエラーは、大方Visual C++のランタイムをインストールしていないのだろう。
2005, 2005 SP1, 2008とかそれぞれ分かれているから、
自分のプログラムをビルドしたVC++のバージョンと同じやつを選んでインストールしろ。

529:デフォルトの名無しさん
08/03/26 21:46:44
やっぱりそれ関係のエラーだったのか・・

相手にそーいった環境が一切なくても動くようにするにはどうすればいいですか?


530:デフォルトの名無しさん
08/03/26 21:56:48
原因が分かりません
     ↓
やっぱりそれ関係のエラーだったのか・・

531:デフォルトの名無しさん
08/03/26 22:28:56
1度コード書いてコンパイルに成功する
EXEができてそれが起動する
コードを修正したけどコンパイル失敗
なのに1番目にコンパイルしたEXEが起動する

これ、コンパイル失敗したらEXE起動しないようにするにはどうすれば?

532:デフォルトの名無しさん
08/03/26 22:34:26
コンパイルではEXE起動しないよ

533:デフォルトの名無しさん
08/03/26 22:39:50
原因を特定できなくて「分からない」と言ったんで、
これかな?あれかな?って思ったのはあったんだよね;

534:デフォルトの名無しさん
08/03/26 23:27:08
>529
/MDじゃなくて、/MTでコンパイルすれば。

535:デフォルトの名無しさん
08/03/26 23:51:28
>>534
すいません。どーゆー意味でしょう・・?

536:デフォルトの名無しさん
08/03/27 00:45:33
ヘルプ嫁

537:デフォルトの名無しさん
08/03/27 11:57:29
Microsoft Visual C++ 2008 Express Editionを使用しています。
c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template
というフォルダにawxファイルを入れたいんですが
見つかりません。
Expressには無いんでしょうか??

538:デフォルトの名無しさん
08/03/27 12:00:26
>>531
前に作ったEXEを起動するか?って聞いてくるはずなんだけど。
「今後この問い合わせをしない」にチェック入れたのか。

ツール-オプションのプロジェクトおよびソリューションのビルド/実行に
それ関連の設定あるみたいだから見てみては。
起動する/しない/確認の3通り設定できる

539:デフォルトの名無しさん
08/03/27 13:24:47
で、MTとMDの違いが分かりませんw

540:デフォルトの名無しさん
08/03/27 13:45:04
ヘルプ嫁

541:デフォルトの名無しさん
08/03/27 13:50:12
ヘルプヘルプってそんくらい教えてやれよ
どーせお前わかんねーんだろ?w
ぷっ

542:デフォルトの名無しさん
08/03/27 13:58:51
エラーになったとき、エラーの原因が表示されるコンパイラはありますか?

543:デフォルトの名無しさん
08/03/27 23:43:27
>>539
[プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++]-[コマンドライン]にあるよ

544:デフォルトの名無しさん
08/03/28 00:49:43
>>543
あ。ありがとー
リンクの静的と動的が具体的にどう違うのかいまいち理解しきってないなぁ・・

545:デフォルトの名無しさん
08/03/28 02:16:49
CRTを自分のEXE/DLLに内蔵するか、外のDLLに頼るかの違い。

546:デフォルトの名無しさん
08/03/28 11:38:52
お。ありがとうございます

547:デフォルトの名無しさん
08/03/28 20:11:35
自分でクラス作るところでつまづく
Cも関数作るところでつまづいた

548:デフォルトの名無しさん
08/03/28 21:45:30
VC++2005で、バイナリデータをchar型の配列にいれてから、DATファイルに保存していましたが、
SQLSERVER2005にそのバイナリデータを直接保存できるようにしたいです。
varchar型のFIELDにそのデータを保存しようとすると、認識できないデータ(文字?)
があるらしく、データがそこで切れてしまいます。FIELDのデータ型をいろいろ変えたり
してみましたがやはり駄目でした(binary型などはエラーになってしまいます)。
何かヒントを頂ければ幸いです。スレ違いだったらすみません。

549:デフォルトの名無しさん
08/03/28 21:48:24
初心者スレでSQLSERVER2005はないだろ

550:デフォルトの名無しさん
08/03/28 21:51:27
↑すいません。SQLSERVERにデータを保存する際には、DATファイルに保存
する時と同様に、char型配列にバイナリデータをmemcpyしてから、データを転送しています。
よろしくお願いします。

551:デフォルトの名無しさん
08/03/28 21:52:27
>>549
すいません。。。

552:デフォルトの名無しさん
08/03/28 21:52:27
Microsoft Visual C++ 2008 Express Editionを使ってます
プログラムを書き込む際に普通のテキスト感覚で行うと
前の文字まで消えてしまいます (挿入ができない)

x+600 +の後に4500といれたい
しかしx+4500となって600が消えてしまいます
そういった設定はどこで行えばよいのでしょうか?

553:デフォルトの名無しさん
08/03/28 22:02:11
まさか Insert 押せば終わりってオチじゃないよな…


554:デフォルトの名無しさん
08/03/28 22:08:47
>>553
その通りでした すみません・・

555:デフォルトの名無しさん
08/03/28 22:11:51
>>548
> 認識できないデータ(文字?)
> があるらしく、データがそこで切れてしまいます。

文字列型なんだから、\0がきた時点で切れるだろ。


> binary型などはエラーになってしまいます

エラーの原因を調べろよ。


556:デフォルトの名無しさん
08/03/28 22:25:24
>>555
ありがとうございます。

>文字列型なんだから、\0がきた時点で切れるだろ。

全く同じデータをDATファイルに保存して、そのファイルをテキストエディタで開き、
そのデータをSQLSERVERのFIELDにコピペすると、やはりデータが切れてしまいます。
データを変換する必要があるんですかね?

557:デフォルトの名無しさん
08/03/28 22:30:44
#include <stdio.h>
void main()
{
int count;

for (count = 0; count < 5; count++) {
printf( "countは今%dです\n", count );
}
printf("aaa");
if(count==4){printf("正解です%dです\n",count);}
else{printf("残念");}


getch();
return;

}

VC++2008でデバックしましたがなぜかこれが"残念"のほうが出力されます。
countは4だと思うんですが

558:デフォルトの名無しさん
08/03/28 22:33:21
>557
Cスレで聞けば?

559:デフォルトの名無しさん
08/03/28 22:36:41
すいませんCスレいきます

560:デフォルトの名無しさん
08/03/29 09:00:44
countの値は5

561:デフォルトの名無しさん
08/03/29 10:14:51
>>556

特定のデータまたは文字長で切れるのか調べること
またFIELDのデータ型のルールに違反してないかを調べること

を勧めます。



562:デフォルトの名無しさん
08/03/29 21:25:27
>>557
forの機能を調べなおして来い


563:デフォルトの名無しさん
08/03/29 21:39:00
>562
お前もCスレ行け

564:デフォルトの名無しさん
08/03/29 21:59:18
count=0
今0です表示
countが1になる。
条件式参照(for・・・にもどる。count<5なのでループ継続。
・・・
今4です表示。
countが5になる。
条件式参照。count<5なのでループ終了。

565:デフォルトの名無しさん
08/03/29 22:02:13
スレ違いに気づけ

566:デフォルトの名無しさん
08/03/30 09:40:54
全く関係ないんじゃないからいいんじゃない?
英語の文法の授業で先生がSpeakingの話はじめたら
「先生、今文法の授業です」っていうタイプかしら。

567:デフォルトの名無しさん
08/03/30 09:56:39
落ちこぼれのために小学校の復習からやられたら迷惑

568:デフォルトの名無しさん
08/03/30 11:52:00
バカは気づかない。
スレ違いでも、分かるやつが答えを1レスすればそこで終わることを。
結局何も分からないやつがアホみたいに、スレ違い、ヘルプ嫁を書き続けるからリソースも無駄遣いすることになる。
教えたくないなら完全にシカトしろ。どーせ答えられねーんだからよ

569:デフォルトの名無しさん
08/03/30 14:08:47
ばかじゃん

570:デフォルトの名無しさん
08/03/30 14:11:54
>559でとっくに終わってるのに

571:デフォルトの名無しさん
08/03/30 14:23:53
このスレの回答者はゴミレベルが幅を利かせてるからな
557なんかは560のレスが出れば終わるだろ。
運悪くゴミに糞回答された質問者は可哀相だよ。


572:デフォルトの名無しさん
08/03/30 14:30:15
というゴミレスを必死に繰返してる君はいったい

573:デフォルトの名無しさん
08/03/30 15:32:35
質問です。
C++の勉強をしようと思って、express editionをダウンロードしたんですが。
.NetFrameworkというのも一緒にダウンロードされました。

これって、何ですか?

574:デフォルトの名無しさん
08/03/30 15:39:00
express editionはC++の勉強に使えないこともないけど
本来は.NetFramework用の開発ツールですよ

575:デフォルトの名無しさん
08/03/30 15:41:44
すみません。
.NetFrameworkって、何なんですか?

576:デフォルトの名無しさん
08/03/30 15:42:48
ググレかす

577:デフォルトの名無しさん
08/03/30 15:44:15
★初心者にVisual C++を教えるスレ★

578:デフォルトの名無しさん
08/03/30 15:45:58
人類にまだ正義は残っている。
URLリンク(www.nicovideo.jp)

579:デフォルトの名無しさん
08/03/30 15:47:51
wikipediaで調べたら・・・
Microsoft .NET Framework(マイクロソフト ドットネット フレームワーク)は、マイクロソフトが開発したアプリケーション開発、実行環境。

WindowsアプリケーションだけでなくXML WebサービスやWebアプリケーションなどWebベースのアプリケーションなどを取り入れた環境。一般に.NETという場合.NET全体の環境を指す。

また.NET Frameworkの基盤となっている仕様はEcmaインターナショナル、ISO、JISにて標準化されており、マイクロソフト以外のベンダーが独自に実装することもできる。

実際にいくつのオープンソースによる実装プロジェクトがある。なお、CLIのマイクロソフトの実装をCLRと呼ぶ。.NET FrameworkはCLRにその他ライブラリ群を加えたものと言える。


初心者の俺には意味がわかりません。

580:デフォルトの名無しさん
08/03/30 15:52:27
なんでもすぐ聞くな
調べろ
徹底的に調べろ

581:デフォルトの名無しさん
08/03/30 16:22:59
調べてみました。

簡単に言うと、同じプログラムで.NetFrameworkが入ってるコンピュータなら
書き直さなくても、同じように動作するってことですか?

582:デフォルトの名無しさん
08/03/30 16:40:49
スクリプト言語みたいなもんです
C++の勉強がしたいならコンソールアプリで十分


583:デフォルトの名無しさん
08/03/30 16:48:02
質問失礼します。
現在ゲームを製作中なのですが、複数のcppファイルで同一のヘッダを
参照すると変数の多重定義によるエラーが出てしまいます。

環境はVC2005EEで、error LNK2005でググって色々試したりしてみましたが何ともいかず、
コンソールアプリケーションですごく簡単なプログラムをコーディングして試してみてもうまくいきません。
申し訳ないのですが少しでも解決方法の手立てをお教え頂けると幸いです・・・。

584:デフォルトの名無しさん
08/03/30 16:52:55
インクルードガード

585:デフォルトの名無しさん
08/03/30 16:53:23
#ifndef __HOGE_H__
#define __HOGE_H__

//・・・

#endif

586:デフォルトの名無しさん
08/03/30 16:54:34
#ifdef __MAIN__
#define EXTERN
#else
#define EXTERN extern
#endif

EXTERN int g_hoge;

587:デフォルトの名無しさん
08/03/30 16:58:10
ここに
スレリンク(gamedev板:491番)

588:デフォルトの名無しさん
08/03/30 17:23:06
>>561
ありがとうございました。もうちょっと調べてみます。

589:デフォルトの名無しさん
08/03/30 17:26:23
皆さんご返答ありがとうございます。

>>584-585,>>587
この用法は既知だったので実装し、尚且つヘッダ内でstatic変数を作成し定義することも、
関数の定義を行うこともせずにビルドしてたのですが、それでもエラーが起こるため
甚だ疑問でした。環境から考えればコンパイラが古いということはないはずなのですが・・・。

>>586
そちらの用法を実装したところ、うまくいきました。ありがとうございます。
出来れば>>585さんの記述の仕方でうまくやりたかったのですが、
何ともいかないのでこちらのやり方で何とかしてみようと思います。

しかし本当に何で#ifndefのほうはうまくいかないのか・・・。

590:デフォルトの名無しさん
08/03/30 17:27:32
目的が違うから。

591:デフォルトの名無しさん
08/03/30 17:34:50
int main ()
{
try { LogFile logFile( "c:\\log.txt" ) ; }
catch(...) { return -1 ; }

logFile.Write( "hoge" ) ;
}
みたいに書きたいんだけど、tryのスコープにlogFileが捕らわれてしまうんだけどどうすれば解決できるでしょうか

592:デフォルトの名無しさん
08/03/30 18:28:59
>>591
LogFile のインスタンスが try 内でのみ有効なのでは?
ポインタを使うのが常套手段かと


LogFile *LogFile;
try {
LogFile = new LogFile( "c:\\log.txt" );
}
catch (..) {
return -1;
}
LogFile->Write( "hoge" );
....
delete LogFile;


LogFile が ref class なら * を ^ に、 new を gcnew で置き換えればOK


593:591
08/03/30 18:36:17
mainのreturnが複数の箇所になって、ポインタをいちいち開放するのがスタイリッシュじゃないと感じて、
オブジェクト使って自動的にデストラクトさせようという狙いだったんです。

594:デフォルトの名無しさん
08/03/30 18:47:29
>>593
goto 文でエラー処理すれば?

err_1:
delete a;

err_2:
delete b;

return -1;
みたいな感じで

著名なツールでも内部でgoto文使って
コードを簡潔化してる事あるよ
あとはdefine使うぐらいしか無いんじゃ

オヤジプログラマーに「goto文使ったら減給」とか
言われかねないけどw

595:デフォルトの名無しさん
08/03/30 18:50:14
どうでもいいけどスレ違い

596:デフォルトの名無しさん
08/03/30 18:52:28
>>591
これでダメな理由は?
try {
  LogFile logFile( "c:\\log.txt" );
  logFile.Write("hoge");
} catch(...) {
  return -1 ;
}




597:591
08/03/30 18:55:55
>>596
かなり簡潔に書いたけど、main内でいろいろ処理しながら、いろいろとログ書き込んでるからきびしいかと

598:デフォルトの名無しさん
08/03/30 18:56:05
そんなことよりスレ違いを気にしたほうがいい

599:デフォルトの名無しさん
08/03/30 19:01:13
このスレの対象ってC++なの?CLRなの?MFCなの?

600:デフォルトの名無しさん
08/03/30 19:06:35
スレリンク(tech板:896番)

誰かご存知の方いませんか?(´;ω;`)ブワッ


センセー、C++もCLIもMS VC範囲内だと思います。

601:デフォルトの名無しさん
08/03/30 19:14:57
>599
標準C/C++のスレでないことは確か

602:デフォルトの名無しさん
08/03/30 19:18:16
C++をVCに含めるならVCはWinに含まれるのか?

603:デフォルトの名無しさん
08/03/30 19:33:55
>>596
コンストラクタで例外が発生する場合もあるしね。

すれ違いなんて気にするな。
その方が愛が育まれる。


604:デフォルトの名無しさん
08/03/31 11:37:10
case WM_CREATE:
hdcMem=CreateCompatibleDC(GetDC(hWnd));
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
BitBlt(hDC,0,0,500,415,hdcMem,0,0,SRCCOPY);
EndPaint(hWnd,&ps);
return 0;

こんな感じで、ウィンドウのDCと互換性のあるDC(hdcMem)を作り
WM_PAINTでhdcMemからウィンドウのDCへコピー(画面に表示させる)・・・
というようにしたいのですが
例えばTextOutなどでhdcMemに書き込んでも
画面に何も表示されません。

教えて欲しいです。
あと、このプログラムはゲームのソースの一部ですが、この考え方って
一般的なものでしょうか?

605:デフォルトの名無しさん
08/03/31 11:59:58
更新ないと描画されないからか?

606:デフォルトの名無しさん
08/03/31 13:55:22
ビットマップ選択してないとか?

607:デフォルトの名無しさん
08/03/31 14:03:39
どのcaseでtextoutしてんだ?
PAINT以外でInvalidateRectしてないとか?

てかbitmap選択してないからじゃないの?

608:デフォルトの名無しさん
08/03/31 14:34:06
最初は1x1ドットのビットマップが選択されてるから、
1ドットだけコピーされてるよ。
同じ色になってなけりゃ虫眼鏡で見ればわかるよ。

609:デフォルトの名無しさん
08/04/01 12:22:11
リストビューにファイルを表示させようと思い、SHGetFileInfoでファイル情報を取得したところ、ファイルの種類とアイコンが思惑と異なりました。
対象はあるアプリケーションのファイルなんですが
 ファイル種類 → システムフォルダ
 アイコン → マイコンピュータのアイコン
となってしまいます。

第一引数のLPCITEMIDLISTはフルパスを元に自作したものを使っています。
IEnumIDListのNext()関数で取得したLPCITEMIDLISTを用いた場合は正常に取得できる所を見ると、やはりLPCITEMIDLISTの自作部分に問題があると思った方がいいのでしょうか?

610:デフォルトの名無しさん
08/04/01 12:28:54
そこまでわかってたらデバッガか何かで確認するだけ

611:デフォルトの名無しさん
08/04/01 13:45:21
この辺が参考になるかも。
[ファイルを列挙する]
URLリンク(www.kab-studio.biz)


612:デフォルトの名無しさん
08/04/01 15:05:06
>610
同じハズの2処理で結果が違うのですから、やはり何か異なるはずですよね。
もう少し追跡に集中してみます。

>611
こちらのサイトは参考資料として活用させてもらっています。
もう一度最初から読み直すなどして、もう少し理解を深めようと思います。


お二方ともありがとうございました。

613:デフォルトの名無しさん
08/04/01 15:40:57
>>611

URLリンク(www.kab-studio.biz)

↑に「IEnumIDList::Next()で取得するアイテムIDリストは、たったひとつのアイテムID、つまりそのファイルかフォルダだけしか持っていません。」
て書いてある。
これが原因じゃない?


614:611
08/04/01 15:42:10
>>612

と書きたかった。

615:611
08/04/01 15:57:38
多分フルパスで取得したLPITEMIDLISTを先頭にたどっていけばいいんじゃないかな。
そうすれば最後はNext()で取得したLPITEMIDLISTと一致すると思う。

マイコンピュータのアイコンが表示されてしまうのは、
フルパスの先頭である「マイコンピュータ」を指してるからじゃないかな。



616:611
08/04/01 15:59:46
>>多分フルパスで取得したLPITEMIDLISTを先頭にたどっていけばいいんじゃないかな。
「先頭に」じゃないな。「末尾に」だな。

確認はしてないので違ってたらごめんね。

617:デフォルトの名無しさん
08/04/01 16:23:02
>616
いえ、ありがとうございます。
ここは多少立ち止まってでもしっかり理解したい所なので、全て試してみようと思います。

618:デフォルトの名無しさん
08/04/01 17:48:04
初心者に教えてくれる掲示板ということで教えてほしいのですが、
スタティックテキストの文字の色、大きさ、フォントの種類を変更したいと思っています。
初期の設定で変更し、その後は特に変更しません。
VisualC++2005のダイアログベースで作成中です。
よろしくお願いします。

619:デフォルトの名無しさん
08/04/01 18:25:29
>>618
ダイアログベースってMFC?そうでない?
スタティックテキストは個別に変更したいってこと?
リソースエディタでは無理だから、大きさとフォントは、別に作ったフォントを
WM_INITDIALOGでWM_SETFONTしてやると変更できる。
色はWM_CTLCOLORSTATICメッセージでSetTextColor呼ぶとか

620:デフォルトの名無しさん
08/04/01 18:26:03
>618
そのへんは普通に勉強すれば誰でもわかることだし
掲示板でいちいち説明できる分量じゃない。

621:デフォルトの名無しさん
08/04/01 18:30:53
初心者に教えるスレでっせ。

622:デフォルトの名無しさん
08/04/01 18:37:09
教えるのはいいけど理解できるか?

623:デフォルトの名無しさん
08/04/01 18:42:36
この掲示板で説明するべき話題でないというのは同意。
ググった方が早くて確実で分かりやすいと思う。

突き放すことはないかなって思っただけです。

624:デフォルトの名無しさん
08/04/01 18:50:00
まあ環境もうちょっと書いてくれないとね。
詳しく書いた後で、MFCだとどう書きますかとか聞かれたらやだしね。

適当にはしょって答えて、そのキーワードでググってもらうのがいいかと。

625:デフォルトの名無しさん
08/04/01 19:19:54
>619
ありがとうございます。
MFCです。スタティックは個別にそれだけを変更したいです。
その辺のキーワードを頼りに勉強してみます!

>620
初心者なんですいません。
>そのへんは普通に勉強すれば誰でもわかることだし
ということですが、その普通にを教えていただけませんか?
もちろん参考書で勉強をしていますが、各コントロールの使い方が主に載っていてそれはわかるが、応用するときにはどうしていいかわかりません。

未熟者ですいませんがキーワードとかこういうの参考になるよってのを教えていただけたらと思います。
よろしくお願いします。

626:デフォルトの名無しさん
08/04/01 19:22:22
>各コントロールの使い方が主に載っていてそれはわかるが、応用するときにはどうしていいかわかりません。

>625
林本だろそれ

627:デフォルトの名無しさん
08/04/01 20:11:22
本は欲しい情報が載ってないことが多いし探すのが大変。
自分はMSDNを調べたりキーワードでググったり掲示板を利用したりしている。

掲示板
URLリンク(rararahp.cool.ne.jp)
URLリンク(hpcgi1.nifty.com)
URLリンク(m--takahashi.com)

628:デフォルトの名無しさん
08/04/01 20:15:42
コントロールのデバイスコンテキスト取得

pDC->SetTextColor(0xffffff);

629:デフォルトの名無しさん
08/04/02 01:29:08
DLLファイルを作成するプロジェクト(A)と、そのDLLファイルを使う
プロジェクト(B)があります。AとBは別個のフォルダに収められている
ので、BからAのDLLを使うには次のことをしなければなりません。

(1) .libファイルの場所をBで設定。(コンパイル時)
(2) Bの.exeとリンクされる.dllの場所を設定。(実行時)

(1)については[プロジェクト]→[設定]→[リンク]タブで設定しました。

(2)についてはどうすればいいのでしょうか?
Aが作るDLLにはデバッグバージョンとリリースバージョンがあります。そこで、
Bの.exeがデバッグバージョンであれば、AのデバッグバージョンのDLLが、
Bの.exeがリリースバージョンであれば、AのリリースバージョンのDLLが
リンクされるようにしたいのですが。

630:デフォルトの名無しさん
08/04/02 02:02:28
>>629
AとBの出力フォルダをデバッグ同士・リリース同士で揃えたらいいんじゃない?

631:デフォルトの名無しさん
08/04/02 02:13:14
>>630
.exeと.dllが作成される場所はデフォルトのままにしておきたいのですが。。。

632:デフォルトの名無しさん
08/04/02 02:31:13
>>631
ならBのプロジェクトのプロパティのデバッグの環境変数の設定で
Aの出力フォルダをパスに追加しておくというのはどう?

633:デフォルトの名無しさん
08/04/02 02:46:44
>>632
すみません。具体的にどうやって設定したらよいか教えてもらえませんか?
[プロジェクト]→[設定]とか[ツール]→[オプション]とかは散々いじくった
のですが。。。

Visual C++6.0です。

634:デフォルトの名無しさん
08/04/02 06:53:44
カスタムビルドプロセスで、Aのdllをこっちのexeの出来るフォルダにコピーするとか。

635:デフォルトの名無しさん
08/04/02 08:19:54
>>633
出力はデフォルトのまま出来たDLLとかlibをコピーするのは駄目なの?
コンパイル後のコマンドでコピーすればよいと思うんだけど
あと、デバッグとリリースを分けるなら別名にしたほうがいろいろ便利だよ

636:デフォルトの名無しさん
08/04/02 10:26:22
同じソリューションに入れて依存関係作っとけばよかった気がする

637:625
08/04/02 11:54:51
>>626
林本です!

一応初期化のところでCreateFontでフォントを作成し、GetDlgItemでIDを取得し、SetFontでフォントを指定して文字の大きさは変更できました。
あとは色ですね。。。
もうちょっと勉強してみます!


638:デフォルトの名無しさん
08/04/02 12:05:55
>>637
色は
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

if (pWnd->GetDlgCtrlID() == IDC_HOGE)
{
  pDC->SetTextColor(RGB(0xff,0,0));
}
とか }


639:デフォルトの名無しさん
08/04/02 18:23:21
デバッグウインドウに文字を表示するにはどうすればよいでしょうか?

640:デフォルトの名無しさん
08/04/02 18:29:20
以前学校の授業でC言語を簡単に勉強した事があるのですが
C++とCはまったくの別物と考えたほうがいいのでしょうか?

また、勉強用に独習C++あたりを購入しようかと思っているのですが、他におすすめの入門用の書籍などありますか?

641:デフォルトの名無しさん
08/04/02 18:31:58
あまり別物でないように使う事も出来るけど、
フルに機能を利用すれば全くの別物になる。

入門書は
・ 独習 C++
・ C++ プライマー 第4版
・ ロベールの C++ 入門教室
の3つを実際に店頭で読んでみて決めてみたら。

642:デフォルトの名無しさん
08/04/02 18:36:17
>>639
デバッグ中の出力ウィンドウのこと?
OutputDebugStringとかOutputDebugStringFormatとか使う
MFCだとTRACEマクロもある

643:デフォルトの名無しさん
08/04/02 18:41:14
>>641
なるほど、基本的な部分が似てるのなら少し安心です

前に独習Perlがすごい役にたったから今回も独習シリーズでいいや、とか思ってた
たしかに読んでみて自分に合ったの探したほうがよさそうですね。
どうもありがとうございます

644:デフォルトの名無しさん
08/04/02 19:53:10
>>636
依存関係ではダメと思う。

自分は634のようにしている。

645:デフォルトの名無しさん
08/04/02 21:00:54
>>643

自分は「やさしいC++」がオススメ

646:デフォルトの名無しさん
08/04/02 23:31:13
>>642
アリガトン

647:デフォルトの名無しさん
08/04/03 02:55:42
>>634 >>635
ありがとうございます。うまくいきました。

[プロジェクト]→[設定]→[ビルド後の処理]タブで、
出来たての.dllをコピーするコマンドを指定しました。

  copy $(TargetPath) コピー先フォルダ

これでビルド後に.dllが(対応する).exeのフォルダにコピーされ、
.exeの実行時に適切な.dllが使われるようになりました。

>あと、デバッグとリリースを分けるなら別名にしたほうがいろいろ便利だよ
考えてみます。今のところ不都合はないように思います。

>>636
>同じソリューションに入れて依存関係作っとけばよかった気がする

>>644さんのおっしゃる通り、この方法はダメでした。
1つのワークスペース(VisualC++6.0なので)に2つのプロジェクトを挿入して、
それらのプロジェクトの間に依存関係を指定してみたのですが、
うまくいきませんでした。この方法でできれば簡単で良いのですが。。。

648:デフォルトの名無しさん
08/04/03 07:19:02
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(NULL,IDC_CURSOR1), NULL, NULL,
L"Cursor Test", NULL };

カーソルを自作カーソルIDC_CURSOR1にするにはどうすればいいんですか?
こうやるとエラーになってしまいます。

649:デフォルトの名無しさん
08/04/03 08:12:29
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

650:デフォルトの名無しさん
08/04/03 08:20:17
>>648
-LoadCursor(NULL,IDC_CURSOR1),
+MAKEINTERSORSE(IDC_CURSOR1)
綴りまちがってるから自分で確認して

651:デフォルトの名無しさん
08/04/03 09:06:33
開発環境は2008です。

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL,
L"Cursor Test", NULL };

- + の意味がわからないのですが
これで実行した時のエラーは

error C2065: 'IDC_CURSOR1' : 定義されていない識別子です。
warning C4003: マクロ 'CreateWindowW' に指定された実引数の数が少なすぎます。
error C2059: 構文エラー : ')'

です。

652:デフォルトの名無しさん
08/04/03 09:38:12
IDC_CURSOR1っていう名前のカーソルのリソースがないんじゃないのかい?

653:デフォルトの名無しさん
08/04/03 10:09:47
Windowsフォームアプリケーションだとコントロールを個別にフォントとかをプロパティで簡単に設定できるんですね。
なんでMFCだとできないんですかね。。。実はできたりするんですか?

654:デフォルトの名無しさん
08/04/03 10:14:51
ポトペタRAD環境をC++で使いたいならC++Builderへどうぞ
VC++ではできません

655:デフォルトの名無しさん
08/04/03 11:50:43
>>651
LoadCursor(NULL,IDC_CURSOR1) だと IDC_CURSOR1 でエラーにならないのに
LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1)) だとエラーになるのはおかしいだろ。

そして、LoadCursorの第一引数がNULLなのはシステム定義アイコンを使うときだ。
hInst を入れてみ。

656:デフォルトの名無しさん
08/04/03 12:30:44
だめでした。
IDC_CURSOR1 を定義する方法は、

リソースビュー>追加>リソース>cursor>新規作成
出来た resource.h をcppにインクルード

だけでいいですか?
LoadCursorのヘルプに afxwin.h が必須インクルードと書いてあるのですが、インクルードすると

#ifdef _DLL
#ifndef _AFXDLL
#error Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

の#errorに飛んでしまいます。

657:デフォルトの名無しさん
08/04/03 15:09:25
MFCのLoadCursor使うならafxwin.hが必要でMFCとしてビルドしないといけない

658:デフォルトの名無しさん
08/04/03 16:21:45
もしかして>>648のエラーも
>error C2065: 'IDC_CURSOR1' : 定義されていない識別子です。
なのか?
そうでないなら出たエラー書いてみて

659:デフォルトの名無しさん
08/04/03 16:29:47
あと、>>648 のその行以外は問題ないとすると
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL,
L"Cursor Test", NULL };

こうだな。GetModuleHandle(NULL)がかぶってるから、
事前に呼んでとっておくといい、けどこれWinMainの第一引数なんだけどな。

660:デフォルトの名無しさん
08/04/03 18:12:45
エラーが出なくなりましたが、今度はウインドウが出てこなくなりました。
正常だった記述に戻してもウインドウが出てこなくなりました。
中間ファイルもソリューションのクリーンで消しましたがだめです。WINごと再起動してもだめです。

DirectX9SDKのサンプルCreateDeviceのVS2005プロジェクトをVS2008で自動変換して取り込み自作カーソルリソースを新規作成で追加して
#include "resource.h"追加と

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
L"D3D Tutorial", NULL };

の部分を

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL,
L"Cursor Test", NULL };

に書き換えただけです。たすけてください。もう12時間これやってます^^;

661:デフォルトの名無しさん
08/04/03 18:18:42
エラーが出ないって事はコンパイルできたんだろ?
そしたら次はデバッガの使い方をだな・・・

とりあえず、F10連打だ

662:デフォルトの名無しさん
08/04/03 18:53:10
ああそうか!カーソルはこれでクリア出来てるってことですよね
LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1))
の意味と、CreateDeviceが失敗してるのはまた明日調べます。
まじありがとうございました。

663:デフォルトの名無しさん
08/04/03 19:00:16
ちょっとサンプルみたけど、hInst でいいんじゃん。
LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR1))
で。前のGet・・・につられたわ

664:デフォルトの名無しさん
08/04/03 19:24:36
拾ったサンプルをあてずっぽうで改造?
ほとんど何も知らないでやってる?

665:644
08/04/03 20:28:26
>>647

dllのコピーは必要だけど、依存関係を設定するのはオススメ。
libのリンクを自動的にやってくれるし、
exeをビルドする前にdllをビルドしてくれるので、
古いdllを使ってハマルようなことがなくなる。

つまり 依存関係+ビルド後の処理でコピー と。

666:647
08/04/04 00:44:33
>>665
なるほどです。そうしてみました。

667:デフォルトの名無しさん
08/04/04 08:56:37
>>663
hInstで動きました。ありがとうございました。

668:デフォルトの名無しさん
08/04/06 00:09:59
PCSX2というソフトをコンパイルしたいんですがやり方がわかりません。
プログラムについての知識0です。
勉強したいとかではなくこのソフトがほしいだけです。

Microsoft Visual C++ 2008をとりあえずインストールしましたがやり方がまったくわかりません。
サルにも判るように教えてくれる方がいれば幸いです。

URLリンク(www.pcsx2.net)

URLリンク(pcsx2.svn.sourceforge.net)

669:デフォルトの名無しさん
08/04/06 00:25:00
readme嫁

670:デフォルトの名無しさん
08/04/06 02:26:07
勉強する気ないやつに教えるほど俺は性格良くないです

671:デフォルトの名無しさん
08/04/06 04:37:38
>>668
エミュレータでタダゲーしたいんだけど、コンパイルしないといけない。
だれか手取り足取り教えろ、ということか。
…たしかに何も教える気がまったく起こらんなw 初心者には寛容なほうなのだが。

672:デフォルトの名無しさん
08/04/06 10:00:14
実は頭悪いだろ、ここの人たち

673:デフォルトの名無しさん
08/04/06 10:29:33
残念ながらそんな煽りに乗るほどには悪くないんだな。(w

674:デフォルトの名無しさん
08/04/06 16:45:39
>>668
ここは勉強する意欲のある初心者に教えるスレであって
勉強するつもりもない素人に教えるスレではありません
お帰り下さい

675:デフォルトの名無しさん
08/04/06 20:47:50
今までXPで開発していましたがPCをVistaで新調して開発したところ、
Vista機では問題なく実行できるexeがXPマシンに持っていくとアプリケーション構成エラーが出て実行できません
おそらく>>527さんとほぼ同じ症状で、/MTでコンパイルを通すと実行できるようにはなりますが
ファイルサイズが大きくなるのでできるだけ/MDにしたいです
何か良い手段はないでしょうか
VC2008を使用しています

676:デフォルトの名無しさん
08/04/06 21:08:55
それが嫌なら>528の方法
それも嫌ならライブラリ使わない

677:675
08/04/06 21:26:15
なるほど…
やはり基本的には/MTにするかランタイム導入を促す方向になるのですね
ありがとうございました

678:デフォルトの名無しさん
08/04/06 21:32:39
ランタイムをインストールするのが嫌なら、
EXEと同じフォルダに置くという方法もできる。
マニフェスト関係が面倒だけど。

679:デフォルトの名無しさん
08/04/07 00:18:33
intやfloatの値をLPSTRに変換するにはどうすればいいですか?

680:デフォルトの名無しさん
08/04/07 00:26:55
キャスト

int i = ...;
LPSTR s = (LPSTR)i;

681:デフォルトの名無しさん
08/04/07 02:39:25
すごいな。 いろいろと。 dobuleでなくて良かったとかそういう話なんだな。。

682:デフォルトの名無しさん
08/04/07 03:11:47
どぶれ?

683:デフォルトの名無しさん
08/04/07 06:17:22
>679
CやC++でintやfloatを文字列に変換するのと同じでもいいし
apiやMFC使う方法もある

684:デフォルトの名無しさん
08/04/07 06:19:08
でもfloatは対応してないのもあったかも

685:デフォルトの名無しさん
08/04/07 08:34:49
>>680
オマイ天才

686:デフォルトの名無しさん
08/04/07 08:42:03
2008のMFCで、チェックボックスのメンバ変数を追加して、初期化時に

変数名 = TRUE;

とすればチェックされた常態で起動されるとVC++6.0の本に書いてあるのですが
error C2679: 二項演算子 '=' : 型 'int' の右オペランドを扱う演算子が見つかりません (または変換できません)。
のエラーが出てしまいます。
VBのようにプロパティにもそれらしき項目がないです。教えてください。

687:デフォルトの名無しさん
08/04/07 09:36:44
何の問題もなくできたよ

688:デフォルトの名無しさん
08/04/07 10:06:14
変数を作ったら
DDX_Control(pDX, IDC_CHECK1, as);
この行が追加された。

OnInitDialog()の中に
as = TRUE;
を追加してもだめです。

689:デフォルトの名無しさん
08/04/07 10:27:05
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる

糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。

690:デフォルトの名無しさん
08/04/07 10:48:51
>>688
単にデフォルトでチェック状態にしたいなら
as.SetCheck(BST_CHECKED)
をすればいいんじゃないの?

691:デフォルトの名無しさん
08/04/07 12:21:28
できました。ありががとうございます。
できましたが、わからないことを逆引きできず、きりがありません、本も相当買いましたが、VBと違いまったく応用できません
このまま一個ずつ積み重ねるしかないのでしょうか?

692:デフォルトの名無しさん
08/04/07 12:25:51
MSDNで調べる癖をつけましょう
それでもわからなければWebやメーリングリストの過去ログなども使いましょう

CheckBoxの場合はCButtonというクラスの変数なのでそのメンバを調べましょう

693:デフォルトの名無しさん
08/04/07 13:01:00
DDX_Controlにするから型があわない
たぶん本に書いてあるのと違うことやってる

694:デフォルトの名無しさん
08/04/08 17:56:11
Visual C++6.0を起動すると、

 「ワークスペースにあるウィンドウのすべてを開くことはできません。」

という意味不明なメッセージボックスが表示されることがあります。
[OK]ボタンがひとつあるだけの単純なメッセージボックスです。
このメッセージは次のように言っているように聞こえます。

「ワークスペースにはウィンドウがいくつかある。あなたはそれをすべて
開こうとした。でもそれはできない。」

???

別に困っているわけではないのですが起動時に数回に一回の割合で出現するので
気になります。一体、このメッセージボックスは何が言いたいのでしょうか?

695:デフォルトの名無しさん
08/04/08 19:13:41
URLリンク(support.microsoft.com)
このぺージの ダイアログ ボックスでWebBrowserコントロールを使用
の部分なのですが、webbrowser2.hが存在していないエラーが出ます。2008では使えないんですか?
代りに何を使えば同じように使えるんでしょうか

696:デフォルトの名無しさん
08/04/08 19:45:02
URLリンク(msdn2.microsoft.com)
ここらへんをみるとwebbrowser2.hは、該当
ActiveXからMFCクラスを生成するとできる、
って書いてあるような気がする

697:デフォルトの名無しさん
08/04/08 19:47:36
>694
メニュー > ウインドウ

698:デフォルトの名無しさん
08/04/09 10:09:33
そこの英語ページぜんぜんわかりません
CWebBrowser2とIWebBrowser2の違いもわかりません。
ドキュメント自体しないですよね

void CtestDlg::OnBnClickedOk()
{
//CWebBrowser2* hExp1 = (CWebBrowser2*)GetDlgItem(IDC_EXPLORER1) ;
//hExp1->Navigate2((CString*)("URLリンク(www.google.com)"), &noArg, &noArg, &noArg, &noArg);

IWebBrowser2* hExp1 = (IWebBrowser2*)GetDlgItem(IDC_EXPLORER1) ;
hExp1->Navigate2((VARIANT*)("URLリンク(www.google.com)"), NULL, NULL, NULL, NULL);
}

これで起動するとコンパイルはできるのですが、ボタンをクリックすると

test.exe の 0x78a49c05 (mfc90ud.dll) でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x8b55ffdb を読み込み中にアクセス違反が発生しました。

と出てしまいます。VC++2ヶ月でこれはまだ早いですかね

699:デフォルトの名無しさん
08/04/09 11:03:06
IWebBrowser2はインターフェイスでCWebBrowser2はその実装されたクラスだけど多分難しいと思う

単に表示させたいならGetDlgItem使わずにダイアログに直接貼り付けてクラス変数作ってNavigateした方が楽だよ

なんにしてもCOMとかActiveXとかめんどくさい物を勉強した方がいいと思う

700:デフォルトの名無しさん
08/04/09 15:18:28
VC++6.0の初心者です。
 マウスのイベントについて教えて下さい。
 (漢字はよく読めないので、なるべく平仮名でお願う)
MFC AppWizard(exe)を使って、しゅるい はダイアログベース(D)を使います。

1つめ. ダブルホイールマウスを使ってた。
  マウスにかんけい知るイベントで、自分で調べて解ったのは
  WM_MOUSAWHEEL という奴ですが・・・ホイールが2つある、もっと、マウスで
  アプリケーションに必要な処理をおこうなうには何すれば?
   どう考えればいいでしょうか?

701:デフォルトの名無しさん
08/04/09 15:47:15
日本語でOK

702:デフォルトの名無しさん
08/04/09 15:59:22
ホイールが二つあるマウスのイベントを拾いたい

703:デフォルトの名無しさん
08/04/09 17:39:18
横ホイールか

704:デフォルトの名無しさん
08/04/09 17:39:57
>>702さん。
Yes.ホイールが2つ以上あるマウスのイベントを拾いたいです。
(日本語あってる?)

705:デフォルトの名無しさん
08/04/09 18:05:07
VisualC++2005のMFCのダイアログベースでプログラムを作成しています。
まだ初めて1ヶ月もたってないので初歩的なことを聞いてすいません。

OnInitDIalog内の//TODO: 初期化をここに追加します。
というところで

font.CreateFont( 36,
0,
0,
0,
FW_NORMAL,
TRUE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
"Italic");

GetDlgItem(IDC_STATIC)->SetFont(&font);

として、文字のフォントを変更しようとしました。
最初は問題なく変更できていたのですが、気づいたらいつの間にか変換できていませんでした。

ボタンを使って、ボタン動作で
GetDlgItem(IDC_STATIC)->SetFont(&font);
を行うと変更されますので、一度変更した後になんらかの理由で元に戻ってると推測していますが、その理由と場所がわかりません。

これだけの情報でわかれば教えていただけますか?

706:デフォルトの名無しさん
08/04/09 18:25:46
そのfontは保持し続けてるのか?
どこで宣言してる?

707:デフォルトの名無しさん
08/04/09 21:21:31
long ldata[] = {0x00000000,0x00000001,0x00000002,・・・・・};

このような配列を、文字列、"0x000000000x000000010x00000002・・・・・"
と変換するにはどのようにしたらいいでしょうか。
また、この文字列を逆に配列に戻すことは可能でしょうか。



708:デフォルトの名無しさん
08/04/09 21:40:00
VCというよりCかC++を勉強すれば可能

709:デフォルトの名無しさん
08/04/09 21:54:15
>>708
ありがとうございました。可能ということで、勉強したいと思います。

710:デフォルトの名無しさん
08/04/09 22:33:41
>>709
sprintfとかで速効

711:705
08/04/10 09:50:43
>706
一応グローバルで宣言してるつもりで関数の外で宣言してます。

ちなみにC言語は初心者レベルで理解してるつもりです。
まだ、簡単なソフトを1つ作っただけですが。。。初心者レベルで。

712:デフォルトの名無しさん
08/04/10 10:50:01
最近VisualC#2008 Expressをダウンロードして使っているものです。
質問なのですが、
イミディエイトウィンドウを使ってコマンドを入力してデバッグできる
ことを知ったのですが、普通にGUI上からデバッグするだけでは
できないことや効果的な利用方法などがあったら教えて頂きたいです。


713:デフォルトの名無しさん
08/04/10 10:53:47
ここC#じゃないよ

714:デフォルトの名無しさん
08/04/10 12:20:50
static DWORD beforeTime = 0;
DWORD nowTime;static int fps = 0;char buff[80];

nowTime = timeGetTime();fps++;
if ( nowTime - beforeTime >= 1000 ) {wsprintf(buff, "%05d FPS\n", fps);
TextOut(hDC,1,1,buff,lstrlen(buff));fps = 0;
beforeTime = nowTime;
}
counter++;

これは某所にあった
FPSを表示するソースの一部なんだけど
これを使うと(WM_TIMERで呼ぶと)
最初の一回は00001FPSと出て、その後は25000とか二万を越える値が出ます。
どうして?

715:デフォルトの名無しさん
08/04/10 12:31:49
1秒に25000回呼ばれてるんだろ

716:デフォルトの名無しさん
08/04/10 12:56:24
>713
あ、思いっきり間違えました!
すいません。

717:デフォルトの名無しさん
08/04/11 05:19:00
リソースファイルは、Express Edition じゃビルドできないんですか?

ちなみにバージョンは2008です。

718:デフォルトの名無しさん
08/04/11 06:07:09
リソースコンパイラはRC.EXE

719:705
08/04/11 10:28:39
どなたかヒントだけでも教えていただけませんか?

720:デフォルトの名無しさん
08/04/11 11:27:20
>>705
文字を替えたいコントロールのIDをIDC_STATICから別の名前に替えてみて


721:デフォルトの名無しさん
08/04/11 12:07:17
>>720
変更しましたところ、グループボックスの文字が変化しました。
グループボックスのIDもIDC_STATICになっていました。
その原因は GetDlgItem(IDC_STATIC)->SetFont(&font); でIDを変更していなかったので、
ここでGetするIDも変更したのですが、文字は変化しませんでした。

原因はこれですか??

722:デフォルトの名無しさん
08/04/11 12:40:58
>>721
IDC_STATICってのは (-1) になってて
ID未設定でいいときに使うんだよ。
プログラム中で指定するなら自分でIDつけろ

723:デフォルトの名無しさん
08/04/11 13:36:40
>>722
ありがとうございます。
しかし、変更しましたが文字は変化しません。。。

724:デフォルトの名無しさん
08/04/11 13:43:12
すいません。文字変更できました!
なぜかスタティックテキストの上に全く同じスタティックテキストができていて、
上を必死に変更してたのですが、下のものが表示されてたためにいくらやっても変化しなかったようです。

コピーやペーストをした覚えはないんですが、、、


でも、おかげさまでIDのことを覚えることができました。ありがとうございました。
もっと勉強してきます!!

725:デフォルトの名無しさん
08/04/12 21:00:41
しかしこのスレって土日になるととたんに書き込みなくなるよね
仕事でこんなところに書き込んでる奴ばかりなんだろうか

726:デフォルトの名無しさん
08/04/13 03:40:49
仕事でか(((( ;゚Д゚))))

727:デフォルトの名無しさん
08/04/13 09:24:12
VC++2008ExpressでReleaseでビルドしてもtest.exeファイルが作成されません
Releaseフォルダにはtest.exe.intermediate.manifestやtest.objがあるだけです
どうすればいいですか?

728:デフォルトの名無しさん
08/04/13 09:52:27
>>727
あるじゃん

729:デフォルトの名無しさん
08/04/13 10:16:14
Releaseフォルダは2箇所にある。

730:デフォルトの名無しさん
08/04/13 10:35:39
>>727
ほんとだ

731:デフォルトの名無しさん
08/04/13 12:13:21
>>727
リンクエラー出てませんか?

732:デフォルトの名無しさん
08/04/15 18:04:24
設定に関する質問です。
以前VisualC#2005をつかっていた時は、
括弧を閉じたりセミコロンを入れると自動でコードが綺麗に整列されて、例えば
x=5 が x = 5 というように、空白が挿入されたりインデントされたりしてたのですが、
こういった機能はVisualC++2008にはありますか?
自分でも調べたのですがよくわかりませんでした。設定方法がありましたらお願いします。
上手く説明できなくてすみません。。orz

733:デフォルトの名無しさん
08/04/15 19:18:10
>>732
C++に、そういう機能はなかったはず
C#なら2008にもある

734:デフォルトの名無しさん
08/04/15 20:07:24
そうですか。。回答ありがとうございました

735:デフォルトの名無しさん
08/04/15 20:50:01
C#はそんなのがあるんだ。
C++は他の言語や環境と比べると不便さを感じるかもね。

736:デフォルトの名無しさん
08/04/15 21:11:22
昔からVBがそうだけど、特にVCが不便と感じたことはない
逆にいちいち余計なことされるとむかつく

737:デフォルトの名無しさん
08/04/15 22:37:16
VBは改行時にいちいち構文チェックしてうざかったな~
.netになってからVBとかC#とかのインテリセンスはかなり優秀に
C#になれてたんでVC++にきたときに不便さに困った
今となっては慣れたけど

738:デフォルトの名無しさん
08/04/16 03:22:50
C++ はマクロとかあるし、それ抜きにしても文法凶悪だからね。処理系的には。
賢くしづらいのはよく分かる。

739:デフォルトの名無しさん
08/04/16 03:29:29
VCで極力小さい実行ファイルを作るにはどうしたら良いのでしょうか。

#include <windows.h>
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{ return 0; }
だけをコンパイルしても24KBにもなってしまい、ビルドオプションで
サイズ優先とかしても変化せず。

変なランタイム使ったり実行ファイルが圧縮されてるわけでも無いのに、
ファイルサイズ10KB台で色々な処理をしてるまともなGUIツールが
あるんですが、何をどうしたらこう言う実行ファイルが作れるのか
皆目見当が付きません。

740:デフォルトの名無しさん
08/04/16 05:43:44
既存のライブラリを使わない

741:デフォルトの名無しさん
08/04/16 06:57:12
あとは/opt:nowin98だっけか。

742:デフォルトの名無しさん
08/04/16 09:55:28
どなたか
URLリンク(www.whitire.com)
をvc++に移植してください!

743:デフォルトの名無しさん
08/04/16 10:43:12
移植もなにも…

744:デフォルトの名無しさん
08/04/16 11:16:47
できあがったDLLからC++のdllexport関数をDEFファイル形式で吐くツールとかないかな・・・

745:742
08/04/16 11:40:27
こんな感じで呼べますか?
URLリンク(www.geocities.co.jp)


746:デフォルトの名無しさん
08/04/16 14:58:36
>>740-741
きっちり1KBの実行ファイルが生成される様になりました。
有り難うございました。

747:デフォルトの名無しさん
08/04/17 00:53:24
ファイルから読み込んだ文字列から数字を取り出す方法を教えてくれないか

[100,100]

こんな感じの文字列なんだが

"[%d,%d]"

こんな書式を使って文字列から数字とか文字列とか取り出せるCの関数ってなんだっけ?

もし、C++だったら別のいいやり方があったらそっちを教えてくれたら嬉しい。

748:デフォルトの名無しさん
08/04/17 00:58:11
自己解決、sscanfだ!

749:デフォルトの名無しさん
08/04/17 03:33:25
スクリプト処理させるなら","やらスペースやら"[" "]"やらでトークン識別して
個々の文字列をatoiとかで読み取らせる方がいいよ

750:デフォルトの名無しさん
08/04/17 08:14:17
sscanf()で%[]や%nを駆使する方がましな希ガス。

751:デフォルトの名無しさん
08/04/17 08:38:20
sscanfは黒歴史だよ

752:デフォルトの名無しさん
08/04/17 08:48:49
Cスレ行け

753:デフォルトの名無しさん
08/04/17 14:51:45
>>750
入力ミスのチェックとか考えると自前で文字列解析処理作った方がいい
仕事でスクリプターが別にいる場合とかはチェック必須だしな

754:デフォルトの名無しさん
08/04/18 13:51:12
あるクラス(以下CTest)をdllにして別のプロジェクトでリンクして
使ったときに、デバッグモードの時だけエラーが出ます。

ソースはこれだけなんですが・・・

1: CTest *ptest = new CTest;
2: delete ptest;

2行目実行時に「Invalid Address specified to RtlFreeHeap」
が出力されてブレークします。ヒープ領域の開放が上手くできて
いないような感じかと思ったのですが、具体的にどうしたら
良いのか分からないです。よろしくお願いします。

755:デフォルトの名無しさん
08/04/18 14:04:11
CTestの中身がなんか悪さしているんじゃない?

756:デフォルトの名無しさん
08/04/18 14:36:49
実際のheapいじるメモリ確保がdllと本体側でまたいでんじゃないの?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch