MFC多文档应用程序同时显示两个视图
本文是对网络上各种资料进行了梳理,并在VisualC++6.0下进行了实验测试。
1. 在MFC多文档应用程序中同时显示两个视图,其中一个视图显示电路原理图,另外一个显示仿真结果。
2. 两个视图需要同时显示,但是并非分割显示,而是通过切换(切换功能尚未实现)
在多文档应用程序中,视图类是由CMultiDocTemplate来负责管理的。自动生成的MFC框架中在C**App类的InitInstance()函数中,有以下的语句:
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
4
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
5
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
6
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
7
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
8
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
由于有两个视图需要显示,所以需要创建两个CMultiDocTemplate对象来管理,其中每个对象管理不同的View对象
为了方便在其他类中引用,我在C**App类中增
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
然后在InitInstance()函数替换原有创建CMultiDocTemplate对象指针的语句,这里我的代码是:
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
10
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
11
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
12
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
13
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
而此时就有了两个视图,而MFC应用程序默认是只打开一个视图的,所以这时运行程序就会出现一个要求选择显示哪个视图的对话框
为了自动显示,我们需要重写C**App类的OnFileNew()函数
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![MFC多文档应用程序同时显示两个视图 MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
根据MSDN2001,需要在C**App类的消息响应中添加一句话才能使该函数被响应
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
4
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
5
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
注:MSDN2001:
CWinApp::OnFileNew
You must add an
ON_COMMAND( ID_FILE_NEW, OnFileNew )
statement to your
到目前为止,程序还只能显示一个view,另外一个view还没有被显示出来。
我们需要在C**Doc类中添加一些东西
在OnNewDocument()函数中我们添加如下
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
然后添加成员函数:
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![MFC多文档应用程序同时显示两个视图 MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![MFC多文档应用程序同时显示两个视图 MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
11
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
12
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
14
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
16
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
17
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
18
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
此时再运行则可以一下子显示两个view了,不是重叠的。但是原理图view显示不完整,因为不是全窗口大小。我把它设置了一下
在CChildFrame类中改写虚函数ActivateFrame(int nCmdShow) ,nCmdShow默认值就是-1
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![MFC多文档应用程序同时显示两个视图 MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![MFC多文档应用程序同时显示两个视图 MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
5
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
6
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
7
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
8
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
9
![MFC多文档应用程序同时显示两个视图](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
这样显示的窗口就最大化了
后面会继续更新,补充用tab键或其它方法在两个视图之间切换
本文参考的网址和文档:
http://topic.csdn.net/u/20111019/09/b54b0574-162d-4f80-8209-660070ac3feb.html
http://hi.baidu.com/liyy011/blog/item/150ce08080b449d2bd3e1e19
http://topic.okbase.net/200612/2006122710/2831427.html
http://blog.csdn.net/zhuimengzh/article/details/6976011
MSDN2001
侯捷著,《深入浅出MFC》
http://www.cppblog.com/cs-xiaolee/archive/2011/12/01/161292.html
相关文章
- 使用SVN进行文档管理和部门知识库建设的建议
- Python读取本地HTML中的canvas以图片形式存入Word文档
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
- Word处理控件Aspose.Words功能演示:使用 C++ 在 Word 文档 (DOC/DOCX) 中插入表格
- 深入实践Spring Boot2.3.2 文档建模
- 《Apache Zookeeper 官方文档》翻译邀请
- OSSIM文档
- vuex最简单、最直白、最全的入门文档
- LDP - Linux文档工程的简介,包括帮助,向导和文档
- DOM= Document Object Model,文档对象模型---以对象管理组织(OMG)的规约为基础的
- UITabBar Appkit (SwiftUI Appkit中文手册文档)
- 1.2SwiftUI构建支持文档的应用程序(SwiftUI中文文档手册)
- AppKit 中文文档目录
- JS在HTML文档引入位置
- SCCB协议官方文档翻译
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
- PyQt QScintilla API 中文文档(1)
- Java使用spire进行word文档的替换