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不为空。但是,当我后来PostMessage(从另一个线程)调用时:

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

即使 bPosted 为真,窗口过程也不会被调用。我正在努力弄清楚为什么会这样。窗口过程是MSDN 示例中的一个- 一旦我确认消息通过,我打算添加另一个案例。

发布窗口消息需要满足哪些条件?

4

1 回答 1

1

没有条件。

使用消息 [0, WM_USER) 时存在一些限制,但在 WM_APP 上没有限制。

你在检查PostMessage的返回码吗?

您可能应该将(至少部分)您正在使用的代码发布到 PostMessage,以及注册的 WndProc。

如果您不这样做,您还必须提供消息循环。大多数框架会隐藏这个细节(至少在某种程度上),但如果你直接处理 win32,你必须提供你自己的。

于 2009-07-30T13:18:47.563 回答