Windows API一日一练(15)PostQuitMessage函数

Post date: 2012/3/27 上午 07:18:26

分类: Direct3D2007-07-25 08:27 5672人阅读 评论(7) 收藏 举报

自然界面里,各种生物都是有其生命周期的。程序也是有其生命周期的,创建时就是它出生了,当它运行工作中就是成年期,最后少不了要死亡的,那么程序的死亡是怎么样出现的呢?像以前介绍函数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来处理退出应用程序。