第19章 多文档界面

在Windows中,多文档界面(MDI)是针对处理文档的应用程序的一套规范。

1、MDI框架里面的文档时没有自己菜单的,主窗口上的菜单会应用于这些子菜单。

2、MDI框架里面的文档只能有一个活动窗口,它会排在其他文档窗口的上面

3、MDI文档窗口最小化后,变成位于工作区底部的一个带图标的小标题栏,最大化后文档窗口的标题栏会小时,文件名将附加在其主窗口标题栏的应用程序名之后,它的系统菜单图标会出现在主窗口顶级菜单的最前面,关闭按钮将出现在主窗口顶级菜单的最右边。

4、MDI程序应该创建一个基于类MDICLIENT的"客户窗口"

CLIENTCREATESTRUCT clientCreate;
		
		clientCreate.hWindowMenu  = GetMenu(hWnd);
		clientCreate.idFirstChild = IDN_FIRSTCHILD;
		hWndClient = CreateWindow(TEXT("MDICLIENT"), 
			NULL, 
			WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,
			0,0,0,0,
			hWnd,
			(HMENU)1,hInst,(PTSTR)&clientCreate);

5、CreateMDIWindow,用于在一个独立的执行线程中创建子窗口,基本上该函数很少用到。


6、框架窗口向客户窗口发送WM_MDICREATE的消息来创建子窗口。

MDICREATESTRUCT mdiCreate;
				mdiCreate.szClass = szHelloClass;
				mdiCreate.szTitle = TEXT("hello");
				mdiCreate.hOwner = hInst;
				mdiCreate.x = CW_USEDEFAULT;
				mdiCreate.y = CW_USEDEFAULT;
				mdiCreate.cx = CW_USEDEFAULT;
				mdiCreate.cy = CW_USEDEFAULT;
				mdiCreate.style = 0;
				mdiCreate.lParam = 0;
				HWND hWndClild = (HWND) SendMessage(hWndClient, WM_MDICREATE, 0, (LPARAM)&mdiCreate);


7、WM_MDIACTIVE,框架发送该消息给客户窗口,客户窗口不仅发送该消息给被激活的子窗口,也会发送给从活动状态进入后台的子窗口,通知他们这个变化

8、两种设置窗口菜单方式:注册窗口类的时候,WNDCLASSEX.lpszMenuName;创建窗口的时候: hWnd = CreateWindow(szFrameClass, szAppName, WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL,hMenuInit, hInstance, NULL);

8、加载快捷键 LoadAccelerator (在应用程序加载的资源的时候使用),翻译快捷键TranslateAccelerator(在消息循环中使用),翻译MDI程序特殊功能快捷键

9、WM_MDIGETACTIVE :获取活动子窗口

10、子菜单排序设置消息,WM_MDITLE(平铺)、WM_MDICASCADE(层叠)、WM_DMIICONARRANGE(排列图标)

2、MDI框架默认窗口过程DefFramePrcoc,子窗口默认窗口过程DefMdiChildProc。

其中,有好几条消息是必须传递给DefMdiChildProc,而不管子窗口对它们做了什么:WM_CHILDACTIVE、WM_GETMINMAXINFO、WM_MENUCHAR、WM_MOVE、WM_SETFOCUS、WM_SIZE、WM_SYSCOMMAND

3、在MDI应用程序中,不要用SetMenu函数改变菜单。

4、菜单清理:Windows会在菜单所依属的窗口被销毁时销毁菜单,但是不依属于某一个窗口的菜单需要被显示销毁 DestroyMenu.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值