MFC多文档视图界面(MDI)搭建图像处理框架程序总结

MFC多文档视图界面(MDI)搭建图像处理框架程序总结

前言:本科毕设时,为了进行演示曾按照网上的方法搭建了一个基于MFC多文档视图界面(MDI)的图像处理框架程序。但是由于对于windows编程的原理不甚了解,过程中遇到了很多细节上的问题,因此整理一下整个过程,便于以后利用。以后有机会详细了解windows程序的运行机制等。

用Visual C++工程向导创建一个名为“CImageProcess”的多文档/视图框架程序,最终的应用程序界面如下图。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第1张图片

在建立工程时可以选择不建立默认的文档和视图类,自行使用“类生成向导”建立支持不同格式的文档和视图类,如下图。对于本例,选择建立CScrollView类和CDocument类,名为“CBmpView”类和“CBmpDoc”类。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第2张图片

然后在CImageProcess.cpp中增加头文件CBmpView.h和CBmpDoc.h,CBmpView.h中也要添加CBmpDoc.h。
这个时候的程序还不支持任何文档格式,在本例中我希望该程序能够支持bmp格式的图片。为此首先要在Resource.h中定义对应bmp格式字符串的宏IDR_BMPTYPE,如下图。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第3张图片

并在XXX.rc2资源文件中增加对应bmp文档格式即IDR_BMPTYPE宏的字符串:

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第4张图片

然后就可以建立对应bmp格式的文档模板,修改CCImageProcessApp::InitInstance()函数。如下图
MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第5张图片

因为从文档模板new CMultiDocTemplate中的参数可以看出,CBmpDoc和CBmpView分别为对应bmp文件的文档类和视图类。为了让程序支持bmp文件的读取和显示,我们需要重载CBmpDoc文档类和CBmpView视图类。

首先需要在CBmpView.h中声明文档指针CBmpDoc* GetDocument(),然后在CBmpView.cpp中定义GetDocument()函数。如下图

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第6张图片
MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第7张图片

而CBmpView::OnDraw(CDC* pDC)则利用第三方类CDib来完成图形的绘制,许多其他用到的CDib类的文件中也需要添加头文件CDib.h。为了完善滚动条的出现,以及窗口的显示等可以在CBmpView::OnInitialUpdate()进行加载操作并获取尺寸信息。为了在不同函数间传递位图,可以在CBmpView视图类中添加一个CDib的成员变量CDIB DibToDraw,专门由于绘图显示。这样也能解决拖动子窗口时内存占用暴涨的bug。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第8张图片

至此基本完成了框架程序的搭建。

为了使程序在打开时不自动新建一个文档视图,可以在CImageProcess.cpp中增加语句如下

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第9张图片

为了优化打开多个窗口时的显示效果,可以在ChildFram.h中添加virtual void ActivateFrame(int nCmdShow = -1)函数,然后在该函数的定义中添加移动窗口的语句。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第10张图片

窗口的宽度和高度等信息可以在CImgProcApp::InitInstance()中用语句获得。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第11张图片

为了增加新的菜单项,首先修改.rc资源文件中menu部分,在Resource.h中增加新菜单项对应的宏,然后在CCImageProcessApp类中增加对应菜单项的响应函数定义及实现。最后在CImageProcessApp.cpp中将宏和响应函数联系起来,如下图。

MFC多文档视图界面(MDI)搭建图像处理框架程序总结_第12张图片

你可能感兴趣的:(C,mfc,mdi,多文档视图界面,图像处理框架程序)