AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

深入浅出MFC文档/视图架构之实例剖析

51自学网 2015-08-30 http://www.wanshiok.com

 

  由于CExampleDoc和CExampleView支持的是对应TXT文件的文档类和视图类,为了使程序支持BMP文件的显示,我们还需要为BMP信建文档类CBMPDoc和视图类CBMPView。

  在example.cpp中包含头文件:

#include "BMPDocument.h"
#include "BMPView.h"

  再在CExampleApp::InitInstance函数添加一个对应BMP格式的文档模板:

pDocTemplate = new CMultiDocTemplate(
 //IDR_EXAMPLTYPE,
 IDR_BMPTYPE,
 RUNTIME_CLASS(CBMPDocument),
 RUNTIME_CLASS(CChildFrame), // custom MDI child frame
 RUNTIME_CLASS(CBMPView));
AddDocTemplate(pDocTemplate);

  这个时候再点击程序的"新建"菜单,将弹出如图7.3的对话框让用户选择新建文件的具体类型,这就是在应用程序中包含多个文档模板后出现的现象。


图7.3 包含多个文档模板后的"新建"

  这个时候再点击"打开"菜单,将弹出如图7.4的对话框让用户选择打开文件的具体类型,这也是在应用程序中包含多个文档模板后出现的现象。


图7.4 包含多个文档模板后的"打开"

  对于新添加的视图类CBMPView,我们需要重载其GetDocument()函数:

class CBMPView : public CView
{
 …
 CBMPDocument* GetDocument(); //头文件中声明
 …
}
//重载CBMPView::GetDocument函数
CBMPDocument* CBMPView::GetDocument()
{
 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBMPDocument)));
 return (CBMPDocument*)m_pDocument;
}

  而CBMPView::OnDraw则利用第三方类CDib来完成图形的绘制:

void CBMPView::OnDraw(CDC* pDC)
{
 CBMPDocument* pDoc = GetDocument();
 // TODO: add draw code here
 CDib dib;
 dib.Load(pDoc->GetPathName());
 dib.SetPalette(pDC);
 dib.Draw(pDC);
}

  我们打开李连杰主演电影《霍元甲》的剧照,将呈现如图7.5的界面,这证明程序已经支持位图文件了。


图7.5 打开位图的界面

  其实,在这个程序中,我们已经可以同时打开位图和文本文件了(图7.6)。


图7.6 同时打开位图和文本的界面

 

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:深入浅出MFC文档/视图架构之相互关系  下一篇:VC程序中树型控件节点拖动的完美实现