Windows API一日一练(19)DestroyWindow函数

Post date: 2012/3/27 上午 07:19:49

分类: Direct3D2007-07-31 08:10 6579人阅读 评论(5) 收藏 举报

以前已经介绍过直接点击关闭按钮来关闭应用程序,但想删除一个窗口对象,需要用到什么函数的呢?比如创建了30个窗口,想把第12个窗口关闭删除掉,那就需要使用函数DestroyWindow。当调用DestroyWindow函数后,操作系统就会进行一系列的删除动作,先发送WM_DESTROY消息,接着发送WM_NCDESTROY消息。如果这个窗口还有子窗口或者是其它窗口的所有者,就需要给所有子窗口发送删除消息。

函数DestroyWindow声明如下:

WINUSERAPI

BOOL

WINAPI

DestroyWindow(

__in HWND hWnd);

hWnd是要删除的窗口句柄。

调用这个函数的例子如下:

#001 //

#002 // 函数: WndProc(HWND, UINT, WPARAM, LPARAM)

#003 //

#004 // 目的: 处理主窗口的消息.

#005 //

#006 // 蔡军生 2007/07/12 QQ:9073204

#007 //

#008 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

#009 {

#010 int wmId, wmEvent;

#011 PAINTSTRUCT ps;

#012 HDC hdc;

#013

#014 switch (message)

#015 {

#016 case WM_COMMAND:

#017 wmId = LOWORD(wParam);

#018 wmEvent = HIWORD(wParam);

#019 // 菜单选项命令响应:

#020 switch (wmId)

#021 {

#022 case IDM_ABOUT:

#023 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

#024 break;

#025 case IDM_EXIT:

#026 DestroyWindow(hWnd);

#027 break;

#028 default:

#029 return DefWindowProc(hWnd, message, wParam, lParam);

#030 }

#031 break;

#032 case WM_PAINT:

#033 hdc = BeginPaint(hWnd, &ps);

#034 //

#035 EndPaint(hWnd, &ps);

#036 break;

#037 case WM_DESTROY:

#038 PostQuitMessage(0);

#039 break;

#040 default:

#041 return DefWindowProc(hWnd, message, wParam, lParam);

#042 }

#043 return 0;

#044 }

第26行是当收到菜单按钮退出命令的消息,就调用函数DestroyWindow,然后它发出消息WM_DESTROY给第37行那里进行处理。