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

时间:2009-07-30 13:11:45

标签: winapi window-messages

我已使用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为true,也不会调用窗口过程。我想弄清楚为什么会这样。窗口程序是来自MSDN example的窗口程序 - 一旦我确认邮件正在通过,我打算再添加一个案例。

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

1 个答案:

答案 0 :(得分:1)

没有条件。

使用消息[0,WM_USER]时存在一些约束,但WM_APP上没有约束。

您是否正在查看PostMessage的返回代码?

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

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