在处理特定HWND的消息时等待HANDLE

时间:2014-11-08 00:00:08

标签: c++ winapi visual-c++ window

我有一个等待句柄(CreateEvent)和一个窗口句柄(CreateWindow)。在UI线程上,我想处理仅为该HWND的消息 ,直到发出等待句柄信号。

GetMessage会让我收到单个窗口句柄的消息,但它对等待句柄一无所知。

MsgWaitForMultipleObjectsEx会让我等待等待句柄或窗口消息,但发送到当前线程上任何窗口的消息都会解除阻塞 - 无法通过HWND进行过滤。

我不能把这两者串在一起。如果窗口的消息解除阻塞MsgWaitForMultipleObjectsEx调用并且我使用GetMessage用于其他HWND,则消息将保留在队列中,并且由于未处理的消息,下一个MsgWaitForMultipleObjectsEx调用立即返回。无限循环。

1 个答案:

答案 0 :(得分:0)

DWORD dwRet;
do
{
    dwRet = MsgWaitForMultipleObjectsEx(1, &hEvent, INFINITE, QS_ALLINPUT, 0);
    if (dwRet == (WAIT_OBJECT_0+1))
    {
        while (PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    // ...
}
while (dwRet != WAIT_OBJECT_0);