2011-07-22 13 views
0

どうすればいいですか?リソースIDを持つツールウィンドウ

次が動作しているようです:

CreateWindowEx(WS_EX_TOOLWINDOW, szToolWndClass, "Title", 
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 240, 320, 
hWnd, NULL, hInstance, NULL) 

しかし、これはしていません(ウィンドウが表示されていない):

CreateWindowEx(WS_EX_TOOLWINDOW, szToolWndClass, "Title", 
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 240, 320, 
hWnd, (HMENU) IDD_TOOL, hInstance, NULL) 

はしかし、それは私がWS_CHILDスタイルを追加するときに動作しますが、ということフローティングウィンドウを作成しません。

答えて

0

トップレベルウィンドウでは、HMENUとしてIDスロットが使用されます(または、子ウィンドウではコントロールIDとしてHMENUスロットが使用されます)。子ウィンドウはHMENUを持つことができず、トップレベルHWNDはIDを持つことができません。

WS_CHILDを省略すると、ウィンドウはIDをHMENUとして扱い、有効なHMENUではないため、CreateWindow呼び出しに失敗します。

一般に、IDは既知のコンテナのコンテキストでのみ意味があります。だから、ダイアログの文脈では、ダイアログがその中のコントロールを所有しているので、IDは意味をなさない。そして、作成者は重複がないことを保証することができ、GetDlgItemは何か分かりやすいやりかたをするだろう。

しかし、デスクトップでは、すべてのウィンドウが異なるソースから来ているため、一意のIDを確保する方法がないため、概念は実際には意味をなさないでしょう。

おそらく、HWND自体を保存して、必要なときに直接使用することです。注意すべき

ことの一つは、あなたがWS_CHILDを使用しないとき、あなたの新しいウィンドウが実際にデスクトップウィンドウの子ですが、あなたが合格HWNDによって所有であるということです、それはそれの子ではありません窓。その所有者ウィンドウの子ウィンドウを列挙しても、新しいウィンドウは返されません。

Raymond Chen(ブログはすべてのWin32デベロッパーに必要な読者とみなす必要があります)には、親と所有者の問題hereの説明があります。

関連する問題