Windows API一日一練(15)PostQuitMessage函式
阿新 • • 發佈:2019-02-19
自然介面裡,各種生物都是有其生命週期的。程式也是有其生命週期的,建立時就是它出生了,當它執行工作中就是成年期,最後少不了要死亡的,那麼程式的死亡是怎麼樣出現的呢?像以前介紹函式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來處理退出應用程式。