1. 程式人生 > >Windows API一日一練(15)PostQuitMessage函式

Windows API一日一練(15)PostQuitMessage函式

自然介面裡,各種生物都是有其生命週期的。程式也是有其生命週期的,建立時就是它出生了,當它執行工作中就是成年期,最後少不了要死亡的,那麼程式的死亡是怎麼樣出現的呢?像以前介紹函式GetMessage裡是使用一個迴圈不斷地檢測訊息,周止復始的,是不可能出現死亡的,但它會檢測到訊息WM_QUIT就退出來。那現在問題是誰傳送WM_QUIT訊息出來呢?這就是PostQuitMessage函式所做的工作。當你點選視窗右上角的關閉時,Windows就會把視窗從系統裡刪除,這時就會發出訊息WM_DESTROY給視窗訊息處理函式WindowProcWindowProc收到這條訊息後,最需要做的一件事情就是呼叫
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來處理退出應用程式。