首页 文章

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

提问于
浏览
1

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

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

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

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

1 回答

  • 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);
    

相关问题