peekmessage(创建窗口循环)

时间:2013-04-29 08:25:03

标签: c++ windows

我刚开始学习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循环。 THX。

1 个答案:

答案 0 :(得分:7)

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