自然介面裡,各種生物都是有其生命週期的。程式也是有其生命週期的,建立時就是它出生了,當它運行工作中就是成年期,最後少不了要死亡的,那麼程式的死亡是怎麼樣出現的呢?像以前介紹函數GetMessage裡是使用一個迴圈不斷地檢測訊息,周止復始的,是不可能出現死亡的,但它會檢測到訊息WM_QUIT就退出來。那現在問題是誰發送WM_QUIT訊息出來呢?這就是PostQuitMessage函數所做的工作。當你點擊視窗右上方的關閉時,Windows就會把視窗從系統裡刪除,這時就會發出訊息WM_DESTROY給視窗訊息處理函數WindowProc,WindowProc收到這條訊息後,最需要做的一件事情就是調用PostQuitMessage發出退出訊息,讓訊息迴圈結束。
函數PostQuitMessage聲明如下:
WINUSERAPI
VOID
WINAPI
PostQuitMessage(
__in int nExitCode);
nExitCode是退出標識碼,它被放到WM_QUIT訊息的參數wParam裡。
調用這個函數的例子如下:
#001 //
#002 // 目的: 處理主視窗的訊息.
#003 //
#004 // 蔡軍生 2007/07/12 QQ:9073204
#005 //
#006 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
#007 {
#008 int wmId, wmEvent;
#009 PAINTSTRUCT ps;
#010 HDC hdc;
#011
#012 switch (message)
#013 {
#014 case WM_COMMAND:
#015 wmId = LOWORD(wParam);
#016 wmEvent = HIWORD(wParam);
#017 // 菜單選項命令響應:
#018 switch (wmId)
#019 {
#020 case IDM_ABOUT:
#021 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
#022 break;
#023 case IDM_EXIT:
#024 DestroyWindow(hWnd);
#025 break;
#026 default:
#027 return DefWindowProc(hWnd, message, wParam, lParam);
#028 }
#029 break;
#030 case WM_PAINT:
#031 hdc = BeginPaint(hWnd, &ps);
#032 //
#033 EndPaint(hWnd, &ps);
#034 break;
#035 case WM_DESTROY:
#036 PostQuitMessage(0);
#037 break;
#038 default:
#039 return DefWindowProc(hWnd, message, wParam, lParam);
#040 }
#041 return 0;
#042 }
第36行就是調用函數PostQuitMessage來處理退出應用程式。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/caimouse/archive/2007/07/25/1706634.aspx
if(msg.message==WM_QUIT)
{
PostMessage(g_Hwnd, WM_CLOSE, 0, 0);
break;
}
WM_DESTROY->WM_QUIT->WM_CLOSE