如果我添加了窗口句柄或NULL值,是否有区别

Lio*_*ing 3 windows null winapi handle

我有一点问题.我将首先向您展示一个例子,然后我会告诉您问题所在.

例:

while(GetMessage(&msg, NULL, 0, 0)){
   TranslateMessage(&msg);
   DispatchMessage(&msg);
}
Run Code Online (Sandbox Code Playgroud)

该示例正常工作,但如果"GetMessage"函数中的参数2更改为窗口的句柄名称,则如下所示:

例2:更改后

while(GetMessage(&msg, Hwnd, 0, 0)){
   TranslateMessage(&msg);
   DispatchMessage(&msg);
}
Run Code Online (Sandbox Code Playgroud)

退出程序时会出现一点问题.程序仍在程序列表中运行.并且需要选择它然后单击结束进程按钮来终止程序

现在,add(NULL或窗口句柄)之间有区别吗?

Bri*_*xon 5

您在第二个示例中遇到的问题是,在窗口被销毁后,您提供的窗口句柄GetMessage()不再有效.每个后续调用都会返回一个错误,通知您(GetLastError()给出ERROR_INVALID_WINDOW_HANDLE),但代码不处理这种情况,因此永远会在忙循环中结束.

这就是为什么MSDN Library页面GetMessage()建议不要使用while (GetMessage(...)).

  • @LionKing:是的,不要随便指定一个窗口句柄. (2认同)