1. MFC程序的死亡相对于初生来说要简单的多,主要是以下几步:
1.使用者通过点击File/Close或程序窗口右上角的叉号发出WM_CLOSE消息。
2.程序没有设置WM_CLOSE处理程序,交给默认处理程序。
3.默认处理函数对于WM_CLOSE的处理方式为调用::DestoryWindow,并因而发出WM_DESTORY消息。
4.默认的WM_DESTORY处理方式为调用::PostQuitMessage,发出WM_QUIT。
5.CWinApp::Run收到WM_QUIT后结束内部消息循环,并调用ExinInstance函数,它是CWinApp的一个虚拟函数,可以由用户重载。
6.最后回到AfxWinMain,执行AfxWinTerm,结束程序。
---------------------------------------------------
有时你看到有的程序当点右上角的叉的时候没有关闭程序而是最小化了,就是因为它重载了OnClose,把默认的发送Destory消息给删掉了
2.
WM_CLOSE是关闭窗口的
WM_DESTROY是销毁窗口
windows的一般处理是PostQuitMessage(0) 即发送一个WM_QUIT消息,即退出消息循环
WM_CLOSE 消息处理中,请示用户关闭应用程序,
如果不关闭,则可以不做任何处理;
如果要关闭,则需要调用 DestroyWindow (DestroyWindow先把窗口破坏掉,使用户看不到窗口。但是窗口破坏后,应用程序并没有结束,于是DestroyWindow再接再励,送出了一个WM_DESTROY消息)
调用DestroyWindow,则会发出另外一个消息 WM_DESTROY
WM_DESTROY 消息处理中,则调用PostQuitMessage(0)
调用PostQuitMessage(0),则会又发出另外一个消息WM_QUIT
由WM_QUIT消息来结束消息循环,才能真下退出应用程序。
WM_QUIT消息非常特殊,她使GetMessage函数返回0,从而结束了消息循环,
应用程序从此结束
3.
case WM_CLOSE:
if(IDYES != MessageBox(NULL, "你确定要退出吗?", "警告",MB_YESNO|MB_ICONWARNING))
{
//Ï£ÍûÈüÌÐø´°¿ÚÏÔʾ£¬ÏÂÃæµÄ·½·¨ÎÞЧ
ShowWindow(hwnd, SW_SHOW);
SetForegroundWindow(hwnd);
//UpdateWindow(hwnd);
return 0;
}
还有,记得执行完你的语句后,要return
break的话,在结束你的窗口函数的时候,如果有 return DefWindowProc (hwnd, message, wParam, lParam) ;
那么用默认的处理函数处理wm_close
那么你又白做了