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

标签 c++ windows winapi

根据GetMessage API来自 MSDN Library,它可能会在出现错误时返回 -1。该文档提供了应避免的常见错误的代码片段:

while (GetMessage( lpMsg, hWnd, 0, 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, hWnd, 0, 0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}

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

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

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

最佳答案

您应该遵循 GetMessage() 的 MSDN 文档中指定的规则。这样做很轻松,而且您的代码中不会散布大量消息循环。

Visual Studio 团队与 Windows 团队是分开的,他们犯了和其他人一样的错误!

事实上,我无法想象 GetMessage() 会返回一个错误,但这是错误处理的本质——这并不意味着您不应该正确处理错误。

关于c++ - GetMessage() 会在主消息循环中返回 -1 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288285/

相关文章:

如果未定义最小值,则 C++ 字符串不能接受新字符

windows - 使用 SetWindowsHookEx 的进程范围的钩子(Hook)

基于体系结构的 C# 结构行为

c++ - 具有初始化列表的类启动 std::array 成员变量

c++ - 如果在堆上创建 vector ,是否意味着我可以从任何其他函数访问它?怎么样?

c++ - 如果未使用方法本身,则忽略方法中的 undefined symbol

c++ - 用于 Win32 Windows 应用程序的简单 C++ 框架?

windows - 具有不可重定向输出的实用程序 (Windows)

c++ - 无法删除 GDI+ 图像

c++ - exe的基地址?