プロが教える店舗&オフィスのセキュリティ対策術

http://web.kyoto-inet.or.jp/people/ysskondo/chap …
のサイトで気になったのですが、
このサイトの
hChildWnd=CreateWindow( "SubWindowClass","子ウインドウ",
WS_CAPTION|WS_THICKFRAME|WS_CHILD,
10,10,200,100,hwnd,(HMENU)1,
cs->hInstance,0);
の|WS_CHILDを消すと
if((hOwnedWnd==NULL)||(hChildWnd==NULL))
return -1;
のところで終了してしまうのですが、
なぜなのでしょうか?

A 回答 (2件)

API のリファレンスを見ると、CreateWindow() 10番目の引数は



HMENU hMenu, // メニューハンドルまたは子ウィンドウ ID

となっていました。
WS_CHILD ありの場合、メニューハンドルではなく子ウィンドウのIDとして解釈されますので、

(HMENU)1

は ID = 1 を割り当てていることになります。
一方、WS_CHILD を指定せず、(HMENU)1 をセットした場合はメニューハンドルとして解釈されますが、値が 1 のメニューハンドルは作成されていないので、CreateWindow() が失敗して NULL を返します。
    • good
    • 0

リンクは 404 でした。

MSDN には、If the function fails, the return value is NULL. To get extended error information, call GetLastError. とあるので GetLastError() を呼ぶんじゃないでしょうか?

参考URL:http://msdn.microsoft.com/en-us/library/ms632679 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!