点击窗口X按钮后,程序收到WM_CLOSE消息,此处可以拦截程序的退出。如果不做任何操作,DefWindowProc将返回WM_DESTROY消息,之后发送WM_QUIT消息。
参考这篇:
WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解
故在消息循环中做如下更改即可达到目的。
case WM_CLOSE:
MessageBeep(0);
if (IDYES==MessageBox(hwnd,TEXT("是否退出?"),TEXT("退出"),MB_YESNO|MB_ICONQUESTION))
{
break;//跳出switch,执行DefWindowProc,退出
}
else
{
return 0;//返回消息,不退出
}
case WM_DESTROY:
PostQuitMessage(0);
return 0 ;
case WM_QUIT:
return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam);
}