关于MDI多文档程序的一些思考
MDI程序的框架

客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口。框架窗口和各个子文档窗口都是自定义的窗口类。
MDI程序中的一些要点
- 窗口中的菜单资源是属于框架窗口,也就是说如果要改变菜单需要面向框架窗口操作。如果需要更改菜单可以向客户窗口发送WM_MDISETMENU消息。
SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenu, (LPARAM) hMenuWindow) ;
当子文档窗口在活动状态与非活动状态中切换时,失去活动状态的窗口先收到WM_MDIACTIVATE消息(wParam值为其句柄),接着获得活动状态窗口会受到WM_MDIACTIVATE消息(lParam的值为句柄)
子文档窗口并不需要处理WM_CLOSE,WM_DESTROY消息,这些消息是由默认的DefMDIChildProc函数处理。
框架窗口的WM_CLOSE消息交给DefFrameProc()函数,其会发送WM_DESTROY消息给窗口过程然后我们可以在调用PostQuitMessage()函数。
如果想关闭子文档窗口可以向客户窗口发送WM_MDIDESTROY消息
当子文档窗口最大化后,如果点击子文档窗口的关闭或者最小化,此消息是属于菜单消息,(WM_COMMAND,接着会将此消息当做框架窗口不想处理的消息发送给对应的子文档窗口,然而子文档窗口也不处理该消息。)//最后此消息接着被框架窗口所处理,又因为框架窗口不能处理此消息所以会将该消息传送给DefFrameProc()函数处理。

关于MDI多文档程序的一些思考的更多相关文章
- qt 单文档程序关闭时在delete ui处出现segmentation fault
做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...
- MFC单文档程序结构
MFC单文档程序结构三方面: Doc MainFrame View
- MFC学习(七) 单文档程序
1 MFC单文档程序的主要类 (1)文档类(Document) 即应用程序处理的数据对象,文档一般从 MFC 中 CDocument 中派生.CDocument 类用于相应数据文件的读取以及存储 Cv ...
- VC-基础:MFC单文档程序架构解析
MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在 ...
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
(一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...
- MFC单文档程序架构解析
MFC单文档程序架构解析 MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一 ...
- MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误
今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目 ...
- Qt 的MDI 多文档窗口
一.MDI简介 MDI就是多文档界面(Multi-document Interface,MDI)应用程序 MDI就是在主窗口里创建多个同类型的MDI子窗口,这些MDI子窗口在主窗口里显示,并共享主窗口 ...
- MDI多文档窗体--在一个窗体中装载多个窗体
创建MDI窗体之前,首先要明确两个概念:父窗体和子窗体,在MDI窗体中,起到容器作用的窗体被称为“父窗体”, 可放在父窗体中的其他窗体被称为子窗体,也成为MDI子窗体.当应用程序启动时,首先会显示父窗 ...
随机推荐
- MyBatis、Spring、SpringMVC 源码下载地址
MyBatis.Spring.SpringMVC 源码下载地址 github mybatis https://github.com/fengyu415/MyBatis-Learn.git spring ...
- certutil绕过
一般进内网过后我都会使用certutil下载文件,但在最近打一台内网机子的时候出现了certutil拒绝访问的情况,在本地搭建了一个环境尝试绕过certutil下载文件. 安装杀软更新到最新版本,开启 ...
- vue 快速入门 系列 —— 初步认识 vue
其他章节请看: vue 快速入门 系列 初步认识 vue vue 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架. 所谓渐进式,就是你可以一步一步.有阶段 ...
- WebGPU[4] 纹理三角形
代码见:https://github.com/onsummer/my-dev-notes/tree/master/webgpu-Notes/04-texture-triangle 原创,发布日 202 ...
- JavaScript 中对象解构时指定默认值
待解构字段为原始值 正常情况下, const obj = { a: 1, b: 2, }; const { a, b } = obj; console.log(a, b); // 1 2 当被解构字段 ...
- Fastbin attack 总结
Fastbin attack 本文参考了ctf-wiki 和glibc 要了解fastbin attack,我们先要了解fastbin的机制.由于libc2.26后加入了tcache机制,我们这里就只 ...
- 关于 下载 nfs-utils时的 gssproxy conflicts with selinux-policy-3.13.1-102.el7.noarch 错误
使用 yum install nfs-utils -y 时 出现如下错误: 错误:gssproxy conflicts with selinux-policy-3.13.1-102.el7.noarc ...
- 3. Mybatis Insert
案例: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC &qu ...
- TEX Quotes UVA-272
TEX is a typesetting language developed by Donald Knuth. It takes source text together with a few ...
- Day15_87_通过反射机制获取某个特定的方法
通过反射机制获取某个特定的方法 反射是通过 方法名+形参列表来区分各个方法的(形参列表要用class类型.加.class) 示例代码 import java.lang.reflect.Method; ...