第19章 多文档界面

来源:互联网 发布:android软件开发工具包 编辑:程序博客网 时间:2024/06/07 07:09

在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.

0 0
原创粉丝点击