Win32API質問箱 Build ..
910:デフォルトの名無しさん
08/03/02 05:05:17
>>907
そのディレクトリを作成したディレクトリをFindFirstChangeNotification()で監視しておけばいい。
どういうパラメータを設定すればいいかは忘れた。
911:907
08/03/02 05:23:18
>>910
ありがとうございます。
これは相当使えそうです。
912:デフォルトの名無しさん
08/03/02 06:15:29
ファイルやフォルダが作られる度に全ウィンドウへ WM_ なんて投げてたら重くてやってられないだろw
>>911
ReadDirectoryChangesW を使った方がいい
913:デフォルトの名無しさん
08/03/02 07:16:31
今回は選ばれない可能性が高いが、選択肢としてSHChangeNotifyRegisterもある
914:907
08/03/02 12:07:17
>>912 >>913
ありがとうございます。
ファイルなど個別に調べる場合に使えそうです。
915:デフォルトの名無しさん
08/03/02 12:35:32
ダイアログボックスのプロシージャの戻り値って、BOOLかINT_PTRどっちが正解ですか?
916:デフォルトの名無しさん
08/03/02 12:37:27
BOOL
917:デフォルトの名無しさん
08/03/02 12:40:46
64 ビットのことも考えると INT_PTR じゃないの?
918:デフォルトの名無しさん
08/03/02 12:51:00
BOOL=INT_PTRだとばかり思ってたらwindef.hに
typedef int BOOL;
と書いてあって鬱になった俺が通りますよ
919:デフォルトの名無しさん
08/03/02 12:55:13
DLGPROC 型の定義を見てみたら?
仕様としては TRUE/FALSE 返すから BOOL なはずではあるけど、
知らない間に仕様拡張されてたら知らん。
920:デフォルトの名無しさん
08/03/02 13:18:00
あれってポインタ値以内ならなんでも返せるんじゃなかったっけ?
921:デフォルトの名無しさん
08/03/02 13:21:46
>通常、ダイアログボックスプロシージャはメッセージを処理した場合に 0 以外の値(TRUE)を、
>処理しなかった場合に 0(FALSE)を返すべきです。
>ダイアログボックスプロシージャが 0(FALSE)を返した場合、
>ダイアログマネージャはそのメッセージに応答して既定のダイアログ処理を実行します。
>
>ダイアログボックスプロシージャが、特定の戻り値を必要とするメッセージを処理する場合、
>ダイアログボックスプロシージャは 0 以外の値(TRUE)を返す直前に
>SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) を呼び出し、
>希望の戻り値を設定するべきです。
>0 以外の値(TRUE)を返す直前に、
>SetWindowLong を呼び出さなければならないことに注意してください。
>それより早く呼び出すと、ネストされたダイアログボックスメッセージが、
>DWL_MSGRESULT の値を上書きする可能性があります。
って書いてあるけど。
922:デフォルトの名無しさん
08/03/02 13:42:58
URLリンク(msdn2.microsoft.com)(VS.85).aspx
MSDNにはINT_PTRと書いてある
923:デフォルトの名無しさん
08/03/02 13:46:12
しかし、MSDN はたまに嘘書いてるからなあ。
924:デフォルトの名無しさん
08/03/02 13:50:11
例えば?
925:デフォルトの名無しさん
08/03/02 14:07:04
GetModulePathName の MAX_PATH 以上のパスを取得する方法が
実は使えないとか?
926:デフォルトの名無しさん
08/03/02 14:14:50
>>438
セットアップファイル群の中にそれらしいcabファイルがあるから、
VS2008が入ってない環境だと入るのかもしれない。
927:デフォルトの名無しさん
08/03/02 15:02:29
すげー亀レスだな
928:デフォルトの名無しさん
08/03/02 15:05:52
最近のSDK
typedef INT_PTR (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM);
古いSDK (VC6付属)
typedef BOOL (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM);
929:デフォルトの名無しさん
08/03/02 15:25:55
仕様変わったのか・・・。
何で INT_PTR にしたんだろう?
930:デフォルトの名無しさん
08/03/02 15:31:10
TRUEかFALSEを返すをかえす仕様なんだから、BOOLだったんだろ。
INT_PTRにかえた理由は、64bitコードでは64bitにしたかったんじゃない?
931:デフォルトの名無しさん
08/03/02 15:33:23
せめて 32/64 を切り替えるような BOOL 型を導入するべきだと思うんだけどな。
932:デフォルトの名無しさん
08/03/02 15:33:35
TRUEFALSEっていうよりはなから0かそれ以外か負の数っていってほしい
933:デフォルトの名無しさん
08/03/02 15:34:29
負の数はここでは関係ないと思うが。
GetMessage は別だが。
934:デフォルトの名無しさん
08/03/02 17:09:07
GetMessageは未だに使い方間違ってる例を見かけるなぁ
935:デフォルトの名無しさん
08/03/02 17:16:56
VS 2008 EE の 「Windows アプリケーション」のテンプレートでも
>while (GetMessage(&msg, NULL, 0, 0))
吐き出すんだけど
936:デフォルトの名無しさん
08/03/02 17:30:22
GetMessageって-1とかちゃんと見てないとアチョーなんだっけ?
937:デフォルトの名無しさん
08/03/02 17:31:30
実はエラーなんて返さないのかもしれない・・・。
938:デフォルトの名無しさん
08/03/02 18:09:39
いまだにIEとかメモリ無くなるギリギリまで
複数インスタンス立ち上げると
リソースがボロボロ欠けたウィンドウが開いて
そのうち黙り込んで応答もしなくなって
システム全体再起動しないといけなくなるのは
IEの中のひとがメモリ確保時にエラーチェック
してないからだと思うんだけどどう?
939:デフォルトの名無しさん
08/03/02 18:21:27
100個近くWin95時代のブラクラ状態でIE立ち上げてもヌルヌルにはなるけどシステム落とすまでは逝かないぜ?
環境になんかヘンなもん突っ込んでるんじゃねーの?
940:デフォルトの名無しさん
08/03/02 18:36:41
デスクトップヒープの枯渇じゃないの。
941:デフォルトの名無しさん
08/03/02 18:42:50
ここで質問させてください。
とりあえずC言語の基本を学んだので、ゲーム作りをしてみたいと思った
のですが、Win32APIで1からゲーム作りをするのは効率が悪いのでしょうか?
DirectXから学んだ方がいいのでしょうか?
942:デフォルトの名無しさん
08/03/02 18:45:42
どっちでもいいんじゃない
943:デフォルトの名無しさん
08/03/02 18:47:52
DirectX自体は、DXライブラリっての使えば簡単に扱えるよ。
ゲーム作りの本質と関係ないところは、既存のライブラリを利用するので充分。
俺に言わせて貰えば、ゲームみたいなシビアというか、ちょっと変わった処理が多いような場合は、
WinAPI直接叩く方が、やりたいことが直にやれるし、ベンキョにもなっていいと思う。
944:デフォルトの名無しさん
08/03/02 18:49:31
ある程度頑張ったら、
自分で全部やってみるのも勉強になると思う。
945:デフォルトの名無しさん
08/03/02 18:51:55
C++をやりながら、DirectX9か10をやるといい。
C++は使えないと困ることになる。
946:デフォルトの名無しさん
08/03/02 18:52:29
C で DirectX 使うのは面倒いからな。
947:デフォルトの名無しさん
08/03/02 19:00:37
C#のほうがいいと思う
948:デフォルトの名無しさん
08/03/02 19:01:20
折角高速さを追求してるのに
C++ 使わないのはもったいなさ過ぎる。
949:デフォルトの名無しさん
08/03/02 19:06:08
レスありがとうございます。
C++は現在勉強中です。APIでもいろいろ出来そうなのでこれも並行して
勉強しようと思います。
それと最後に、Win32APIでは、PS2レベルの滑らかな3D描写は出来ないのでしょうか?
950:デフォルトの名無しさん
08/03/02 19:10:15
そもそも Win32API には 3D 描画機能が用意されてないから
全部ソフト的に対処する必要があるぜ。
要するに 3D 描画エンジンを自作するという。
しかもハードウェアの助けが得られないから遅い。
まあ、DirectX を通さずにグラフィックボードを直接操作するんなら話は別だが、
あまり意味がないよね。
951:デフォルトの名無しさん
08/03/02 19:12:47
これを見て勉強しる!
URLリンク(www.geocities.jp)
952:デフォルトの名無しさん
08/03/02 19:16:00
>>950
OpenGLがあるじゃないか
微妙な所だがChoosePixelFormatなんかはgdi32にあるからWin32APIということにする
953:デフォルトの名無しさん
08/03/02 19:29:29
DIRECTXはマニアがやってたハードを解析して最大限の性能を引き出す
というのをMSが肩代わりしてくれる仕組みだ
winAPIでは3Dは無理
954:デフォルトの名無しさん
08/03/02 19:45:52
こんなのもあるよ
DarkGDK
URLリンク(www.microsoft.com)
955:デフォルトの名無しさん
08/03/02 19:59:43
>>953
全角厨キモイ
956:デフォルトの名無しさん
08/03/02 20:02:36
全角だけでなく、大文字小文字も無茶苦茶。
3 は半角で D が全角だったりも。
957:デフォルトの名無しさん
08/03/02 20:59:59
少し話題に上ったので GetMessage() の戻り値の話をさせてください。
どうやら GetMessage() で -1 が返るのは、引数が無効な値の場合に
限られるようです。つまり msg を MSG 構造体とすると、
(A) GetMessage(&msg, hWnd, 0, 0);
(B) GetMessage(&msg, NULL, 0, 0);
(A) では -1 かどうかのチェックをした方がいいですが、(B) のような
より一般的なケースではチェックは不要ということになります。
なお、MSDN に載っているのも (A) に対する警告と思われます。
958:デフォルトの名無しさん
08/03/02 21:01:04
なるほど。
959:デフォルトの名無しさん
08/03/03 00:30:44
でもそれはFor exampleとして載っているだけであって
それ以外ないとは書かれていないわけで
960:デフォルトの名無しさん
08/03/03 01:15:16
>>957
参考になったが
>>959
という意見もあるし結局どっちなんだろう
961:デフォルトの名無しさん
08/03/03 01:24:28
俺は心配性だから常に-1が返ってくる可能性があると思っている。
962:デフォルトの名無しさん
08/03/03 01:27:35
そもそも"handle the error and possibly exit"って具体的にどうすればいいのやら・・・
問答無用でbreakするようなコードだとWM_DESTROYを通さないから色々リークするだろうし、
WTLはcontinueしてるけど、毎回-1が返ってくるような状況だとループから抜け出せないし
正直-1の場合は無視でいいとオモタ
963:デフォルトの名無しさん
08/03/03 01:31:29
リークとか気にしないでreturnしています。
964:デフォルトの名無しさん
08/03/03 01:35:23
とりあえずGetLastError()だけどっかに吐いてから即死します。
965:デフォルトの名無しさん
08/03/03 12:59:40
なんで誰も>>915〜>>932の件の正解を書かない?
一例として、WM_CTLCOLOR*** は「HBRUSHを直接返さなければならない」(DWL_MSGRESULTは禁止)
だから64bitはINT_PTRじゃなきゃまずいんだよ。
HBRUSHの中身が64bitになる実装は存在しないとかいうのは無しね。
If the dialog box procedure processes a message that requires a
specific return value, the dialog box procedure should set the
desired return value by calling
SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) immediately before
returning TRUE. Note that you must call SetWindowLong immediately
before returning TRUE; doing so earlier may result in the
DWL_MSGRESULT value being overwritten by a nested dialog box
message.
The following messages are exceptions to the general rules stated
above. Consult the documentation for the specific message for
details on the semantics of the return value.
WM_CHARTOITEM
WM_COMPAREITEM
WM_CTLCOLORBTN
WM_CTLCOLORDLG
WM_CTLCOLOREDIT
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
WM_INITDIALOG
WM_QUERYDRAGICON
WM_VKEYTOITEM
966:デフォルトの名無しさん
08/03/03 13:28:18
だったら BOOL を INT_PTR にするという選択肢もあったはずでは
わざわざ 64-bit 対応の為に関数宣言を書き換える必要があるなんて馬鹿げている
967:デフォルトの名無しさん
08/03/03 13:36:16
大量に使われているBOOL(ほとんどは1ビットで足りる用途)を根こそぎ64bitにしたらそれこそ無駄だろうに
968:デフォルトの名無しさん
08/03/03 13:49:14
ダイアログプロシージャと違って、こっちが実装する関数ではないけれど、
VirtualAllocとかにも、大きさを指定する引数(今はSIZE_T)が
以前はDWORDだったとか似たような事例は他にもあるな。
969:デフォルトの名無しさん
08/03/03 14:00:34
猫でものページの第123章 メモリマップト・ファイルのソースをコピペして
実行したんですが「ファイルマッピングのオープン失敗」のメッセージが出て
最後まで実行できませんでした。どこが悪いのでしょうか教えてください。
ソースのページは
URLリンク(www.kumei.ne.jp)
でコピペして実行したcppファイルもあげときます
URLリンク(kansai2channeler.hp.infoseek.co.jp)
すいませんが教えてください
970:デフォルトの名無しさん
08/03/03 14:04:35
IDM_READ呼ぶ前にIDM_WRITE呼んでるのか?
971:デフォルトの名無しさん
08/03/03 14:53:13
>>967
つ bool / BOOLEAN
972:デフォルトの名無しさん
08/03/03 15:05:23
>>971
APIが使ってるBOOL書き換えてどうするんだよw
973:デフォルトの名無しさん
08/03/03 15:16:02
>>972
何が言いたいのかよく分からん
そもそも引数や返値を int 型からポインタ型 (INT_PTR) に置き換えても何ら無駄にはならない
974:デフォルトの名無しさん
08/03/03 15:47:44
しいて言えばスタック使用量倍増?
975:デフォルトの名無しさん
08/03/03 16:00:23
戻り値はレジスタだろうからスタックは使わないんじゃない?
976:デフォルトの名無しさん
08/03/03 16:10:57
引数もWin x64 ABIではスタックアクセスは64bit単位じゃなかったっけ?
何れにしろREXプレフィックスでコードサイズは変わるかも
977:デフォルトの名無しさん
08/03/03 16:48:39
Win32 API のヘルプとか網羅的なマニュアルなど、入手先はどこですか …
978:デフォルトの名無しさん
08/03/03 16:51:15
>>977
>>1-2にもリンクがあるMSDNライブラリがそれ。
979:デフォルトの名無しさん
08/03/03 17:27:32
>>975
それを変数に格納するってことじゃない?
980:デフォルトの名無しさん
08/03/03 18:39:39
リソースのアイコンのバイナリを読み込んでchar[]型の配列に代入するにはどうすれば良いですか?
981:デフォルトの名無しさん
08/03/03 19:42:46
LockResourceとかかな
982:デフォルトの名無しさん
08/03/03 22:33:40
MENUITEMINFO mii;
ZeroMemory(&mii,sizeof(mii));
mii.cbSize=sizeof(MENUITEMINFO);
mii.fMask=MIIM_FTYPE;
mii.dwTypeData=L"ファイル";
HMENU menu=::CreateMenu();
::InsertMenuItem(menu,0,0,&mii);
::DrawMenuBar(hwnd);
ちゃんとウィンドウ表示してからこれしたらメニュー表示されない・・・なんで?
983:デフォルトの名無しさん
08/03/03 22:35:02
SetMenuは?
984:デフォルトの名無しさん
08/03/03 23:36:08
ベジエ曲線で囲んだ内部を塗りつぶしたいのですが無理ですか?
教えてくだちい><
985:デフォルトの名無しさん
08/03/03 23:42:30
囲まれた図形の内部の座標に対してExtFloodFill
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4293日前に更新/212 KB
担当:undef