MFC多视图共用一文档实现
项目过程中有定制视图的需求,具体为打开程序默认双视图并且共用一个文档。在网上找了许多类似的资料,都不尽完善。本文直接从达到目的的角度叙述,实现原理不再多说。
1.在自己的App类中定义public变量
CMultiDocTemplate * m_pDocTemplate; CMultiDocTemplate * m_pNewDocTemplate;
然后在App类中 Initlnstance找到RUNTIME_CLASS代码段,在之后加上
m_pNewDocTemplate=new CMultiDocTemplate(IDR_PracTrain_HotelTYPE,
RUNTIME_CLASS(CPracTrain_HotelDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CPracTrain_HotelView));
AddDocTemplate(m_pNewDocTemplate);
其中各类名对应自己的工程中的类名。
2.在App类中重载OnFileNew
首先在头文件中定义afx_msg void OnFileNew();
然后修改消息映射ON_COMMAND(ID_FILE_NEW,OnFileNew)
最后在重载的函数中贴上代码
POSITION ps=m_pDocManager->GetFirstDocTemplatePosition();
CDocTemplate *pDocTemplate=m_pDocManager->GetNextDocTemplate(ps);
pDocTemplate->OpenDocumentFile(NULL);
3.在Doc类中重载OnNewDocument
在Doc类中重载函数afx_msg CFrameWnd* EkCreateNewWindow( CDocTemplate* pTemplate,CDocument* pDocument )
在OnNewDocument中贴上
CPracTrain_HotelApp*p_app = (CPracTrain_HotelApp*)AfxGetApp();
EkCreateNewWindow(p_app->m_pNewDocTemplate, this );
在MainFrm.cpp末加上
CFrameWnd* CPracTrain_HotelDoc::EkCreateNewWindow( CDocTemplate* pTemplate,CDocument* pDocument )
{
ASSERT_VALID( pTemplate );
ASSERT_VALID( pDocument );
CFrameWnd* pFrame =
pTemplate->CreateNewFrame(pDocument, NULL );
CRect rect;
GetClientRect(pFrame->m_hWnd,&rect);
pFrame->MoveWindow(,,rect.Width(),rect.Height());
if( pFrame == NULL )
{TRACE0( "Warning: failed to create new frame.\n" );
return NULL;
}
ASSERT_KINDOF( CFrameWnd, pFrame );
pTemplate->InitialUpdateFrame( pFrame, pDocument ); return pFrame;
}
编译完成就达到需求效果了。
MFC多视图共用一文档实现的更多相关文章
- 用VC++MFC做文本编辑器(单文档模式)
用VC++MFC做文本编辑器(单文档模式) 原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: < xmlna ...
- 如何优雅的写UI——(2)MFC下基于CFormView的文档视图程序
在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...
- 孙鑫MFC学习笔记13:文档
1.CArchive类保存内存数据 2.CAchive类重载了>>与<<操作符,类似C++文件流 3.在OnNewDocument中通过SetTitle设置标题 4.字符串资源 ...
- VC++/MFC中调用CHM帮助文档的方法
转载:http://blog.csdn.net/hediping9811/article/details/23341387 (1)用Word编辑好帮助文档,并保存为网页格式,如mhtml格式. (2) ...
- 在MFC中怎么获得Excel文档中已经使用了的行数和列数
_Worksheet ws;Range range; range = ws.GetUsedRange();//获得Worksheet已使用的范围range = range.GetRows(); / ...
- MFC中调用chm帮助文档(使用相对路径)
主要就一句话: ShellExecute(NULL,L"Open",path,NULL,NULL,SW_SHOWMAXIMIZED); 常用的显示方式是SW_SHOWNORMAL和 ...
- 理解MFC 文档、视图、框架[转]
理解文档/视图框架 出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...
- MFC文档、视图和框架
文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档 文档对象用于管理和维护数据,包括保存数据.取出数据以及 ...
- 深入分析MFC文档视图结构(项目实践)
k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer ...
随机推荐
- SGU223 - Little Kings(状态压缩DP)
题目大意 给定一个N*N(n<=10,k<=n*n)大小的棋盘,要求你在棋盘上放置k个国王,使得不会相互攻击,如果棋盘上某个格子放置了一个国王,那么与他相邻的八个格子都是他的攻击范围,问有 ...
- Chrome 浏览器跨域和安全访问问题 使用 chrome的命令行标记:disable-web-security 参数联调线上数据
做前端的,用Ajax获取数据,是常有的事情,同域下自然没问题了,如果是不同域获取数据,浏览器就有个同源策略的限制. 如图: Origin * is not allowed by Access-Cont ...
- asp.net 分析器错误消息: 文件.aspx.cs”不存在错误
发布webapplication时后老是报告分析器错误消息: 文件.aspx.cs”不存在错误,差点抓狂,后来在网上搜到原因是: <%@ Page Language="C#" ...
- [OC Foundation框架 - 17] copy语法
一个对象使用copy或mutableCopy方法可以创建对象的副本 1.copy 需要实现NSCopying协议 创建出来的是不可变副本,如NSString, NSArray, NSDictionar ...
- .Net 项目常见疑难杂症
1.A项目引用 B项目 B项目引用C.dll 同时 A也必须引用 C.dll 则 A中引用的C的版本 必须和 B中引用C的版本相同 否则就会出现下面这类问题:解决办法 :同步A B项目中引用C的版本一 ...
- 【P3O是什么】P3O认证之项目组合、项目群和项目办公室
如何区分项目组合办公室与项目群和项目办公室? P3O®(Portfolio,Programmed and Project Offices-项目组合.项目群和项目办公室)是由英国商务部 OGC 于200 ...
- Nape刚体body.align();
(转载http://tomyail.com/blog/1065) Body的类型: BodyType.DYNAMIC(默认):用来模拟现实世界的刚体,拥有质量并且一旦加入Nape的空间(Space)里 ...
- HDU 5500 Reorder the Books 贪心
Reorder the Books Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- 关于unity3d播放flash动画,使用插件uniswf
主要就是代码了. 1.using UnityEngine; using System.Collections; using pumpkin.swf; using System.Collections. ...
- Android背景渐变色效果
Android设置背景色可以通过在res/drawable里定义一个xml,如下: [代码]xml代码: 1 <?xml version="1.0" encoding=&qu ...