peekmessage(创build窗口循环)

我只是开始学习Windows编程,我遵循YouTube上的教程,但我得到了这个错误,我不知道为什么,我只是正确地按照他所做的,他没有得到这个错误。 这里是代码。

//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循环。 谢谢。

MSG结构的message成员是一个字段,而不是一个方法。 您应该访问它而不是调用它:

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