2013-04-29 79 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