由于CExampleDoc和CExampleView支持的是对应TXT文件的文档类和视图类,为了使程序支持BMP文件的显示,我们还需要为BMP信建文档类CBMPDoc和视图类CBMPView。
在example.cpp中包含头文件:
再在CExampleApp::InitInstance函数添加一个对应BMP格式的文档模板:
这个时候再点击程序的"新建"菜单,将弹出如图7.3的对话框让用户选择新建文件的具体类型,这就是在应用程序中包含多个文档模板后出现的现象。
这个时候再点击"打开"菜单,将弹出如图7.4的对话框让用户选择打开文件的具体类型,这也是在应用程序中包含多个文档模板后出现的现象。
对于新添加的视图类CBMPView,我们需要重载其GetDocument()函数:
而CBMPView::OnDraw则利用第三方类CDib来完成图形的绘制:
我们打开李连杰主演电影《霍元甲》的剧照,将呈现如图7.5的界面,这证明程序已经支持位图文件了。
其实,在这个程序中,我们已经可以同时打开位图和文本文件了(图7.6)。
在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 同时打开位图和文本的界面 |
本文介绍如何在MFC应用程序中添加对BMP文件的支持,包括创建新的文档类和视图类,以及修改应用程序实例初始化函数以添加文档模板。




7

被折叠的 条评论
为什么被折叠?



