windows编程中关于“关闭窗口无法退出进程”的解决方法

一般会出现如下两种情况

1、WinMain函数中,最后阶段接收消息队列循环中,调用的GetMessage函数参数提供错误
如:

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

这个错误往往是由于程序员疏忽大意造成的,个别编译器使用时会有自动补全(提示)功能,会提示GetMessage函数的第二个参数是一个HWND型的参数,按照习惯,容易直接写成hwnd,这是不对的,一般情况下,第二个参数会置为空,即NULL;

2、消息循环本身出现逻辑错误
如:

 while (TRUE) 
 { 
  if(GetMessage (&msg, NULL, 0, 0)) 
  { 
if(msg.message==WM_QUIT) { break; } 
  TranslateMessage (&msg) ; 
DispatchMessage (&msg) ;
  }
 }

while循环的判断部分始终为真,程序即使接受退出消息,也不会退出进程,这是逻辑错误,也是编程习惯的问题,一般建议直接将GetMessage函数的返回值作为条件语句放入while中,以减少错误。

所以,正确的写法应该写为:

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

原文地址:https://www.cnblogs.com/zlgxzswjy/p/4804874.html