0

を使用してウィンドウ クラスを正常に登録し、次を使用しRegisterClassExてウィンドウを作成しましたCreateWindowEx

m_hInstance = ::GetModuleHandle(NULL);
...
m_hWnd = ::CreateWindowEx(0, "CMyClassName", "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0);

関連付けられたウィンドウ プロシージャはメッセージ 36、129、131、および 1 を受け取り、返された値HWNDは null ではありません。ただし、後でPostMessage(別のスレッドから)呼び出すと:

bool bPosted = ::PostMessage(m_hWnd, WM_APP + 3, 0, 0);

bPosted が true であっても、ウィンドウ プロシージャは呼び出されません。私はなぜそれが必要なのかを理解しようとしています。ウィンドウ プロシージャはMSDN の例のものです。メッセージが通過していることを確認したら、別のケースを追加するつもりでした。

ウィンドウメッセージが投稿されるためには、どのような条件を満たす必要がありますか?

4

1 に答える 1

1

条件はありません。

メッセージ [0, WM_USER) を使用する場合、いくつかの制約が存在しますが、WM_APP では制約はありません。

PostMessageの戻りコードを確認していますか?

おそらく、使用しているコード (少なくとも一部) を PostMessage に投稿するだけでなく、登録済みの WndProc も投稿する必要があります。

提供していない場合は、メッセージ ループも提供する必要があります。ほとんどのフレームワークはこの詳細を (少なくともある程度は) 隠しますが、win32 を直接扱う場合は、独自のものを提供する必要があります。

于 2009-07-30T13:18:47.563 に答える