2013-04-29 81 views
1

我剛開始學習windows編程,我按照YouTube上的教程,但我得到了這個錯誤,我不知道爲什麼,我只是正確地按照他做的,他沒有得到這個錯誤。這裏是代碼。peekmessage(創建窗口循環)

//Main application loop 
     MSG msg = {0}; 
     while(WM_QUIT != msg.message()) 
     { 
      if(PeekMessage(&msg, NULL, NULL, NULL, PM_Remove)) 
      { 
       //Translate message 
       TranslateMessage(&msg); 

       //Dispatch message 
       DispatchMessage(&msg); 
      } 
     } 

,這裏是錯誤:

error C2064: term does not evaluate to a function taking 0 arguments 
fatal error C1903: unable to recover from previous error(s); stopping compilation 

,當我點擊它,他們都指向while循環。謝謝。

+0

你遵循什麼教程? – Default 2013-04-29 08:58:05

+0

遲早你應該讀一本書。 – john 2013-04-29 09:44:16

回答

7

messageMSG結構的成員是一個字段,而不是一個方法。您應該訪問它,而不是調用它:

while (WM_QUIT != msg.message) { 
    // ... 
} 

您的代碼段中還存在其他問題。首先,C++是區分大小寫的語言,因此PeekMessage()的最後一個參數應該是PM_REMOVE而不是PM_Remove

此外,如果消息隊列爲空,則PeekMessage()不會阻止,因此您的代碼最終會消耗100%運行的CPU核心。您可以使用GetMessage()來代替,該塊,如果沒有可用消息,並允許你免除WM_QUIT明確的測試:

MSG msg = { 0 }; 
while (GetMessage(&msg, NULL, 0, 0)) { 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 
+1

另外'PM_Remove'應該是'PM_REMOVE'也許告訴他那個... – 2013-04-29 08:28:57

+0

@Roger,真,回答相應更新。 – 2013-04-29 08:30:39

+0

thx爲答案。這解決了我的錯誤。謝謝。 – 2013-04-29 08:39:03