我有一个等待句柄(CreateEvent
)和一个窗口句柄(CreateWindow
)。在UI线程上,我想处理仅为该HWND的消息 ,直到发出等待句柄信号。
GetMessage
会让我收到单个窗口句柄的消息,但它对等待句柄一无所知。
MsgWaitForMultipleObjectsEx
会让我等待等待句柄或窗口消息,但发送到当前线程上任何窗口的消息都会解除阻塞 - 无法通过HWND进行过滤。
我不能把这两者串在一起。如果窗口的消息解除阻塞MsgWaitForMultipleObjectsEx
调用并且我使用GetMessage
用于其他HWND,则消息将保留在队列中,并且由于未处理的消息,下一个MsgWaitForMultipleObjectsEx
调用立即返回。无限循环。
答案 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);