项目过程中有定制视图的需求,具体为打开程序默认双视图并且共用一个文档。在网上找了许多类似的资料,都不尽完善。本文直接从达到目的的角度叙述,实现原理不再多说。

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多视图共用一文档实现的更多相关文章

  1. 用VC++MFC做文本编辑器(单文档模式)

    用VC++MFC做文本编辑器(单文档模式) 原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: < xmlna ...

  2. 如何优雅的写UI——(2)MFC下基于CFormView的文档视图程序

    在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...

  3. 孙鑫MFC学习笔记13:文档

    1.CArchive类保存内存数据 2.CAchive类重载了>>与<<操作符,类似C++文件流 3.在OnNewDocument中通过SetTitle设置标题 4.字符串资源 ...

  4. VC++/MFC中调用CHM帮助文档的方法

    转载:http://blog.csdn.net/hediping9811/article/details/23341387 (1)用Word编辑好帮助文档,并保存为网页格式,如mhtml格式. (2) ...

  5. 在MFC中怎么获得Excel文档中已经使用了的行数和列数

    _Worksheet ws;Range range; range = ws.GetUsedRange();//获得Worksheet已使用的范围range = range.GetRows();   / ...

  6. MFC中调用chm帮助文档(使用相对路径)

    主要就一句话: ShellExecute(NULL,L"Open",path,NULL,NULL,SW_SHOWMAXIMIZED); 常用的显示方式是SW_SHOWNORMAL和 ...

  7. 理解MFC 文档、视图、框架[转]

    理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...

  8. MFC文档、视图和框架

    文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档        文档对象用于管理和维护数据,包括保存数据.取出数据以及 ...

  9. 深入分析MFC文档视图结构(项目实践)

    k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer ...

随机推荐

  1. Unity3D入门之JavaScript动态创建对象

    接着上一篇Unity3D入门文章,这里继续使用JavaScript脚本语言. 调试:Unity集成了MonoDevelop编辑器,在代码某行的左侧点击,即可下一个断点.然后先关闭Unity编辑器,在M ...

  2. [假期总结]Self

    8月底返校,这一周也没有勤学苦练.假期3周的时间学习了nodejs. 1.nodejs的学习 学习了一本书上的例程,搭建了个博客.这种程度等于是能够动手开发的阶段,前路还很漫长. 2.个人网站的建设 ...

  3. JS代码片段

    1. 对比cookie // cookie array function getCookieArrayByStr(str) { var cookies = str.split("; &quo ...

  4. sqlserver 出现 因为文件组 'PRIMARY' 已满 的解决办法 有可能是磁盘剩余空间不足 导致的

    一般虚拟主机提供商是通过限制数据库文件的大小来实现提供定制的数据库空间的.当你把从虚拟数据库空间备份下来的文件恢复到自己的服务器上时,这个限制还是存在的.找到数据库文件 给增加个数据文件就好了 解决办 ...

  5. 教程-最全ASCII 码对照表

    第一部分由 00H 到 1FH 共 32 个,一般用来通讯或作为控制之用,有些字符可显示于屏幕,有些则无法显示在屏幕上,但能看到其效果(例如换行字符.归位字符). 第二部分是由 20H 到 7FH 共 ...

  6. 继承BaseAdapter实现Filterable的adapter类完整示例

    转载:http://www.lai18.com/content/1631130.html 目标:自定义ListView项布局通常需要自己实现Adapter,并通过搜索关键字筛选部分数据.且关键字变长变 ...

  7. CentOS6.5配置MySQL主从同步

    原文地址:http://www.cnblogs.com/zhongshengzhen/   修改主MySQL的配置 [root@localhost etc] vi /etc/my.cnf 添加以下配置 ...

  8. 如何在线缩小jpg图片的大小

    直接使用在线PS保存成更小格式,即可! 在线PS网址:http://www.webps.cn/ 打开图片 点击保存 直接拖动滑动条就可以改变图片大小

  9. cocos2d-x Touch

    转自:http://codingnow.cn/cocos2d-x/783.html 游戏跟视频最大的区别就是互动,玩家可以操控游戏中的角色,现在的移动设备几乎人手一台,基本上全部都是基于触屏操作的,今 ...

  10. MVC4网站发布到windows server 2003服务器

    在windows server 2003上部署MVC4的网站,需要进行以下工作 用VS2013新建项目 在创建项目的时候选择的矿建为.NET Framework4,然后选择[ASP.NET MVC4 ...