簡體   English   中英

WinAPI - 帶有自己回調的消息循環

[英]WinAPI - message loop with own callback

通常的WinAPI消息循環看起來像這樣:

MSG msg;
while (GetMessage(&msg, hwnd, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

是否允許不調用DispatchMessage(),而是自己處理消息? 如果沒有,我怎么能在避免全局變量和線程問題的同時很好地處理這種行為?

編輯:我基本上想要使用自己的回調函數,它沒有WndProc簽名。 但我想不出一種在不使用靜態或全局變量的情況下從WndProc中調用該函數的方法。 [這需要鎖定,我認為這不是你可以用回調函數做的最好的事情,它可能會被頻繁調用。]

謝謝你的幫助。

是否允許不調用DispatchMessage(),而是自己處理消息? 如果沒有,我怎么能在避免全局變量和線程問題的同時很好地處理這種行為?

如果您計划在GUI中使用多個線程,那么創建窗口的每個線程都需要管理它自己的消息隊列。

從此頁面: http//msdn.microsoft.com/en-us/library/ms810439.aspx

消息循環的更改

具有多個線程的應用程序必須在每個創建窗口的線程中包含消息循環。 窗口的消息循環和窗口過程必須由創建窗口的線程處理。 如果消息循環不駐留在創建窗口的同一線程中,則DispatchMessage函數將不會獲取該窗口的消息。 因此,窗口將出現,但不會顯示激活,也不會重新繪制,移動,接收鼠標消息,或者通常按預期工作。

您可以對那里的消息做出反應,但您仍然需要/想要調用DispatchMessage並實際處理正常wndproc中的消息。 我很樂意多說一些關於避免全局和/或線程問題的內容,但如果沒有關於你想要避免的更多細節,就很難評論。

是的,如果您願意,您可以自己處理此消息。 我通常將結果字段設置為0,但Windows僅將此字段用於一些消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM