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或窗口句柄)之间有区别吗?
您在第二个示例中遇到的问题是,在窗口被销毁后,您提供的窗口句柄GetMessage()
不再有效.每个后续调用都会返回一个错误,通知您(GetLastError()
给出ERROR_INVALID_WINDOW_HANDLE
),但代码不处理这种情况,因此永远会在忙循环中结束.
这就是为什么MSDN Library页面GetMessage()
建议不要使用while (GetMessage(...))
.