2013-08-07 47 views
10

我對win32編程中消息循環的工作方式有點困惑。在我WinMain我總是把以下內容:win32應用程序是否有一個消息循環?或者它是每個窗口一個消息循環?

while (GetMessage (&msg, NULL, 0, 0) > 0) 
{ 
    TranslateMessage (&msg); 
    DispatchMessage (&msg); 
} 

這是一個死循環語句幾乎一直運行到您的應用程序停止。這是否意味着每個應用程序有一個消息循環,而不是每個窗口?

+3

每個線程一個。 – lapk

+4

每個線程需要它的一個。您可以擁有該線程提供的任何數量的窗口。 – chris

+0

明白了。多謝你們! – bodacydo

回答

12

About Messages and Message Queues

應用程序與多個線程可以包括在創建一個窗口中的每個線程一個消息循環。

請注意,一個消息隊列CAN可以支持多個窗口...... GetMessage的第二個參數是您要觀看消息的窗口的句柄。如果NULL那麼線程的所有窗口。

作爲第二個說明,可以創建一個沒有窗口的消息隊列(至少從Windows 2000開始)。它的文檔中描述了一種用於PostThreadMessage

在線程該消息將被張貼,如下所示強制系統來創建消息隊列調用PeekMessage

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) 
+0

很酷。謝謝回答! – bodacydo