代码之家  ›  专栏  ›  技术社区  ›  Spice

WinAPI文档自相矛盾?

  •  1
  • Spice  · 技术社区  · 6 年前

    所以我一直在浏览Windows文档,只是为了阅读一些东西,更广泛地了解WinAPI是如何工作的等等,然而,我还是忍不住注意到,文档在某些情况下似乎自相矛盾,我需要一些确定的方法来做事情 真正地

    第一个站点( Window Messages

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

    (如果你向下滚动,它就在 已发布消息与已发送消息

    doc解释说WM\u QUIT消息导致函数返回0,这反过来会导致while循环中断和应用程序终止。否则,函数将返回一个非零值,导致while循环继续。

    The one for the GetMessage() function) 显式声明以避免编写与前面解释的代码类似的代码。这个站点说GetMessage()函数可以在出现错误时返回-1的值,并且使用这样的代码

    while (GetMessage( lpMsg, hWnd, 0, 0)) ...
    

    如果函数返回-1,则会导致应用程序继续运行,即使它应该处理错误并适当终止。消息循环的有效实现应该是这样的。。。

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

    MSG={};
    {
    调度消息(&M);味精);
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Weather Vane    6 年前

    你不是在比较同类。文件上说 -1 如果 hWnd

    在第一种情况下,循环正在通过 NULL

    while (GetMessage(&msg, NULL, 0, 0))
    

    所以呢 -1 无法返回。但在第二个例子中

    while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
    

    变量 正在传递,因此可能存在错误。