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

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

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

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

图一

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

图二

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

图三

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

图四

然后就可以建立对应bmp格式的文档模板,修改CCImageProcessApp::InitInstance()函数。如下图
图五

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

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

图六
图七

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

图八

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

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

图九

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

图十

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

图十一

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

图十二

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值