关于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子窗体.当应用程序启动时,首先会显示父窗 ...
随机推荐
- Git修改用户名、邮箱和密码
$ git config --global --replace-all user.name "要修改的用户名" $ git config --global --replace-al ...
- 《C++反汇编与逆向分析技术揭秘》--数据类型
浮点数类型 IEEE标准从逻辑上采用一个三元组{S, E, M}来表示一个数N,它规定基数为2,符号位S用0和1分别表示正和负,尾数M用原码表示,阶码E用移码表示.根据浮点数的规格化方法,尾数域的 ...
- Python基础之:Python中的IO
目录 简介 linux输入输出 格式化输出 f格式化 format格式化 repr和str %格式化方法 读写文件 文件对象的方法 使用json 简介 IO就是输入和输出,任何一个程序如果和外部希望有 ...
- C# - 实现类型的比较
IComparable<T> .NET 里,IComparable<T>是用来作比较的最常用接口. 如果某个类型的实例需要与该类型的其它实例进行比较或者排序的话,那么该类型就可 ...
- canvas绘制图像轮廓效果
在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果. 发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...
- 从wav到Ogg Opus 以及使用java解码OPUS
PCM 自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码.PCM通过抽样.量化.编码三个步骤将连续变化的模拟信号转换为数字编码. 采样率 采样频率,也称为采样速度或 ...
- 【pytest官方文档】解读Skipping test functions,跳过测试用例详解
有时候,为了满足某些场景的需要,我们知道有些测试函数在这时候肯定不能执行,或者执行了也会失败.那么我们 可以选择去跳过这个测试函数,这样也就不会影响整体的测试函数运行效果,不至于在你运行的众多绿色通过 ...
- 一次死锁导致CPU异常飘高的整个故障排查过程
目录 一.问题详情 top 命令截图 联系腾讯云排查 检查系统日志发现异常 二. 问题解析 三.问题原因 最终结论 四.扩展 进程的几种状态 马后炮 如何快速清理僵尸进程(Z) 内核参数相关 如何查看 ...
- Day11_52_将Set集合转换为List集合
Set集合转换为List集合 ``` import java.util.*; public class SetReverseLsit { public static void main(String[ ...
- Python基础语法和数据类型最全总结
摘要:总结了Python最全基础语法和数据类型总结,一文带你学会Python. 本文分享自华为云社区<Python最全基础语法和数据类型总结>,原文作者:北山啦 . 人生苦短,我用Pyth ...