您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:164 来源:vckbase.com

本文章共3847字,分3页,当前第2页,快速翻页:
 
四、命令的流向
框架窗口在收到WM_COMMAND等通知消息后,应该给当前激活的MDI窗口提供处理机会。
case WM_COMMAND:

switch (LOWORD (wParam))

{

	//针对框架的命令

	case ID_ONE:		

		//...

		return 0;

	//针对MDI子窗口管理的命令		

	case IDM_WINDOW_TILE: 

		SendMessage (hwndClient, WM_MDITILE, 0, 0) ;

		return 0 ;

 

	//针对子窗口的命令又子窗口去处理	              

	default:

		hwndChild = (HWND) SendMessage (hwndClient,

                                               WM_MDIGETACTIVE, 0, 0) ;

		if (IsWindow (hwndChild))

			SendMessage (hwndChild, WM_COMMAND, wParam, lParam) ;

               

               break ;        //..and then to DefFrameProc

}

break ;  //跳出针对WM_COMMAND的case分支,又DefFrameProc处理剩下的命令
五、子窗口的管理
逆风者
1.概述
给MDI客户区窗口发控制消息即可
如:
case WM_COMMAND:

switch (LOWORD (wParam))

{

	case IDM_WINDOW_TILE:

		SendMessage (hwndClient, WM_MDITILE, 0, 0) ;

		return 0 ;

               

	case IDM_WINDOW_CASCADE:

		SendMessage (hwndClient, WM_MDICASCADE, 0, 0) ;

		return 0 ;

               

	case IDM_WINDOW_ARRANGE:

		SendMessage (hwndClient, WM_MDIICONARRANGE, 0, 0) ;			

		return 0;

               

        //...

        //...

}

break;
2.当前子窗口的关闭
关闭当前激活窗口时,先向该窗口发送查询消息:WM_QUERYENDSESSION。
子窗口的消息处理循环中响应此消息,作关闭前的一些处理,若能关闭,返回真
否则返回假。
框架窗口中根据此返回值决定是否关闭窗口。

如果用户直接按下子窗口的关闭按钮,则WM_CLOSE消息直接发送到了子窗口消息处理函数。

例如:
框架窗口命令处理中:

case IDM_FILE_CLOSE:          

//获得当前激活窗口

hwndChild = (HWND) SendMessage (hwndClient, WM_MDIGETACTIVE, 0, 0);

//询问通过后,销毁窗口

if (SendMessage (hwndChild, WM_QUERYENDSESSION, 0, 0))

     SendMessage (hwndClient, WM_MDIDESTROY, (WPARAM) hwndChild, 0);

return 0;
子窗口的消息处理函数中:
LRESULT CALLBACK HelloWndProc (HWND hwnd, UINT message, 

                               WPARAM wParam, LPARAM lParam)

{

     switch (message)

     {

	//...

	//...



     case WM_QUERYENDSESSION:

     case WM_CLOSE:

          if (IDOK != MessageBox (hwnd, TEXT ("OK to close window?"),

                                  TEXT ("Hello"), 

                                  MB_ICONQUESTION | MB_OKCANCEL))

               return 0 ;

               

          break ;   // i.e., call DefMDIChildProc

     }

     return DefMDIChildProc (hwnd, message, wParam, lParam) ;

}
3.关闭所有子窗口
当使用命令方式关闭所有子窗口时,需要枚举所有子窗口进行关闭。
例:
框架窗口响应命令:
case IDM_WINDOW_CLOSEALL:    

	//针对所有子窗口执行CloseEnumProc

	EnumChildWindows (hwndClient, CloseEnumProc, 0) ;

	return 0 ;
枚举函数:
BOOL CALLBACK CloseEnumProc (HWND hwnd, LPARAM lParam)

{

     if (GetWindow (hwnd, GW_OWNER))         // Check for icon title

          return TRUE ;

     

     SendMessage (GetParent (hwnd), WM_MDIRESTORE, (WPARAM) hwnd, 0) ;

     

     if (!SendMessage (hwnd, WM_QUERYENDSESSION, 0, 0))

          return TRUE ;

     

     SendMessage (GetParent (hwnd), WM_MDIDESTROY, (WPARAM) hwnd, 0) ;

     return TRUE ;

}
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 下一页>>
相关文章

基于 SSL 的 ASP.NET Web 应用测试自动化
层叠式窗体控件指南
连接 COM 与 .NET 的桥梁(一)——预备知识
在Visual C 中定制AppWizard (一)
VC中调用EXECL模板生成报表
Brew 后台应用开发
浅谈PDFlib中文输出(二)如何在PDFlib中使
用 C 创建简单的 Win32 服务程序
DataGrid的客户端分页
真正的全动态报表:RDLC ReportViewer
KVIP考勤系统
一个生成公章图片的简易工具
检测:.NET中强大的检测选项让你有信心建立
谈谈软件项目管理的重要性
简单快速的哈夫曼编码
自己编的SQL服务端加客户端
多功能标签CLabelEx
IE 控件一些高级使用方法
用VC 创建自定义向导程序
如何在 Windows NT、Windows 2000 和 Windo

相关评论


本文章所属分类:首页 VC++

  热门关键字: