c – GetMessage()会在主消息循环中返回-1吗?

前端之家收集整理的这篇文章主要介绍了c – GetMessage()会在主消息循环中返回-1吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
根据MSDN Library中的 GetMessage API,当出现错误时它可能返回-1.该文档提供了应避免的常见错误代码片段:
while (GetMessage( lpMsg,hWnd,0)) ...

文件说:

The possibility of a -1 return value
means that such code can lead to fatal
application errors. Instead,use code
like this:

BOOL bRet;
while( (bRet = GetMessage( &msg,0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}

我的问题是,在每个示例代码中,包括从Microsoft Visual Studio创建的默认应用程序,主消息循环如下所示:

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

请注意,上面的GetMessage的第二个参数是NULL.如果上面的代码有效,这是否意味着此处的GetMessage将永远不会返回-1,因此不需要处理返回值-1?

解决方法

鉴于VS默认情况下会给你错误代码,似乎没有人关心,这很可能会导致当前版本的Windows没有问题.

有些未来版本的GetMessage可能会返回-1.但是,由于现在错误代码必须存在于如此多的现有应用程序中,这将破坏大量现有代码.鉴于微软致力于向后兼容,我认为他们不太可能改变许多程序所依赖的GetMessage的行为.

尽管如此,您仍应遵循文档.

猜你在找的C&C++相关文章