【数字图像处理】 二.MFC单文档分割窗口显示图片

news/2024/11/23 5:39:48/

本文是讲述《数字图像处理》系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程及常用图片软件讲解.

一. CSplitterWnd静态分割窗口

1.CSplitterWnd类基础知识
(该部分引用:百度百科麦田里的稻草人博客)
CSplitterWnd类提供一个分离器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗口ID的任何CWnd对象.

CSplitterWnd::Create
BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT,UINT nID = AFX_IDW_PANE_FIRST
);

Create:创建一个动态的分隔器窗口并将它与一个CSplitterWnd对象连接.参数:
pParentWnd表示切分窗口的父框架窗口;
nMaxRows,nMaxCols是创建切分窗口的最大列数和行数(动态创建的分割窗口的窗格数目不能超过2x2);
sizeMin指出显示一个窗格所需的最小尺寸;
pContext指向一个CCreateContext结构的指针(多数情况这个值可以是传递给父框架窗口的pContext);
dwStyle指定窗口的风格;
nID此窗口的子窗口ID(如果分隔器窗口不是嵌套另一分隔器窗口中,则ID可以是AFX_IDW_PANE_FIRST).

CSplitterWnd::CreateStatic
BOOL CreateStatic( CWnd* pParentWnd,int nRows,int nCols,DWORD dwStyle = WS_CHILD | WS_VISIBLE,UINT nID = AFX_IDW_PANE_FIRST
);

CreateStatic:创建一个静态的分隔器窗口并将它与一个CSplitterWnd对象连接.参数:
pParentWnd表示切分窗口的父框架窗口;
nRows行数.该值不能超过16;

nCols列数.这个值必须不超过16;
dwStyle指定窗口的风格;
nID此窗口的子窗口ID(如果分隔器窗口不是嵌套另一分隔器窗口中,则ID可以是AFX_IDW_PANE_FIRST).

CSplitterWnd::CreateView
virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext 
);

CreateView:在一个分隔器窗口中创建一个窗格.参数:
row指定用来放置新视的分隔器窗口行;
col指定用来放置新视的分隔器窗口列(最多创建16*16窗口);
pViewClass指定新视的CRuntimeClass;
sizeInit指定新视的初始尺寸;
pContext 指向用来创建此视的创建环境的指针(该pContext被传递给创建此分隔器窗口的父框架的重载的OnCreateClient成员函数).

2.CSplitterWnd类创建静态分割窗口
(1).创建MFC单文档工程应用程序,工程名称"MFCPic".
(2).向CMainFrame类中添加一个公有成员变量,类型为CSplitterWnd,变量名为m_wndSplitter.在"类视图"右键"CMainFrame",选择"添加"->"添加变量".
(3).利用"类向导"为CMainFrame类添加OnCreateClient事件."项目"->"类向导"如下图选择"CMainFrame"类,添加虚函数OnCreateClient.

添加代码如下,同时向CMainFrame.cpp中添加#include "MFCPicView.h",向MFCPicView.h中添加#include "MFCPicDoc.h",否则会出现"XXXDoc missing ';' before '*'"错误提示:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{// TODO: 在此添加专用代码和/或调用基类CRect rect;GetClientRect(&rect);  //获取客户区坐标(左上 右下)if(!m_wndSplitter.CreateStatic(this,1,2))  return FALSE;      //创建静态分割器窗口 1行*2列if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMFCPicView),CSize(450,250),pContext))return FALSE;      //创建位置(0,0)if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMFCPicView),CSize(rect.Width()/4,rect.Height()),pContext))return FALSE;      //创建位置(0,1)SetActiveView((CMFCPicView*)m_wndSplitter.GetPane(0,0));return TRUE;//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}

(4).可以设置RUNTIME_CLASS为自定义的类.如可以实现左边是带有按钮的窗口,右边是操作后显示的图片."项目"->"新建类"为工程添加一个新类,在Class type中选择MFC class,在对话框Name中输入"CRightView",并在Base class(基类)下拉列表中自定义设置为CEditView,同时修改第二个窗格的代码修改如下:
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CRightView),CSize(250,250),pContext))
同时,向CMainFrame源文件中添加#include "RightView.h".我把该上述代码类似的嵌入至"【数字图像处理】 一.MFC详解显示BMP格式图片"中运行结果如下图所示:

补充两篇文章供大家及自己学习和作为在线笔记:
a.单文档分割成多个窗口并设置分割线的文章http://blog.csdn.net/ziren235/article/details/1381652
b.MFC静态分割窗口带资源的文章http://blog.csdn.net/guoguojune/article/details/8586750

二. 闲话

PS:由于在完成该程序时VS2012在编译时总是提示错误:"error MSB6006:'cl.exe' exited with code 2",code 1是汉字问题,但code 2可能是路径环境被破坏.查找到相应位置Microsoft.CppCommon.targets的代码是"<CL Condition="'%(ClCompile.PrecompiledHeader)'..."同时还提示"error LINK1158:无法运行 'rc.exe'|'link.exe'|'ml.exe'".在网上查找baidu.google.msdn等都没有很好的解决方案,而且运行"vs2012\VC\bin"下的cl.exe会提示缺少dll,下载也没有用;重新修复或安装VS2012都不能修复该错误,真心无语.但是C#工程可以运行,就是MFC不能运行.
耗费了我大量时间,最后我决定放弃,准备装VC 6.0来完成MFC项目,但在安装它时又由于兼容问题,程序总是未响应,也不能安装.但是再次运行VS2012时上面的error MSB6006等问题被解决了,VS2012的MFC又能运行了.我怀疑可能由于在安装VC 6.0时修复了其中文件环境路径问题,百思不得其解???

 希望该文章能够对大家有所帮助,同时如果文章中有错误或不足之处,还请大家海涵.后面讲述的"左边显示树状图片路径,右边显示图片"和"显示图片路径中的文件"可能对大家帮助更大,此篇仅是开篇.
(By:Eastmount 2014-2-12 夜2点 原创:http://blog.csdn.net/eastmount)


http://www.ppmy.cn/news/476072.html

相关文章

Web前端,CSS中关于背景颜色、背景图片、背景平铺、背景位置、背景相关属性连写

前言 持续总结输出中&#xff0c;今天分享的是Web前端&#xff0c;CSS中关于背景颜色、背景图片、背景平铺、背景位置、背景相关属性连写 1、背景颜色 background-color(bgc) 颜色取值: 关键字、rgb表示法、rgba表示法、十六进制… 代码参考: <!DOCTYPE html> <…

给麦田PT做的新主题:Flower

麦田PT——西北农林科技大学IPV6资源分享平台 网址: http://pt.nwsuaf6.edu.cn/

啊哈c语言读后感500字,《麦田里的守望者》读后感读书笔记500字五篇

《《麦田里的守望者》读后感读书笔记500字五篇》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《《麦田里的守望者》读后感读书笔记500字五篇(5页珍藏版)》请在人人文库网上搜索。 1、麦田里的守望者读后感读书笔记500字五篇麦田里的守望者是很多朋友喜欢的作品&#…

塞林格《麦田里的守望者》读后感

高晓松在某期《晓说》中提到过这部作品&#xff0c;好像是在第二十三期“大师照亮八十年代”中&#xff0c;说他很喜欢这部小说&#xff0c;还说他的唱片公司“太合麦田”起名就源于此&#xff0c;于是满怀期待的开始看。 如果以前没听说过这部小说&#xff0c;可能真不会认为它…

华为手机里的“麦田守望者”

为了一个理由&#xff0c; 有人英勇地死去&#xff0c; 为了一个理由&#xff0c; 有人坚韧地生存。 华为手机里的“麦田守望者” 文 | 史中 &#xff08;零&#xff09;秋日故事 2020年10月&#xff0c;秋日的深圳暖阳轻抚&#xff0c;一位老大爷缓缓走进华为体验店。 “女儿说…

麦田里的守望者——读后理解

16岁霍尔顿多次在学校被开除&#xff0c;讨厌学校里、生活中的一些忸怩作态的人&#xff0c;对上课无兴趣。一个学期结束后他5门功课挂了4门&#xff0c;要被学校开除。 一天晚上和同寝室的同学打了一架后&#xff0c;深夜离开学校&#xff0c;住进小旅馆&#xff0c;仍然看不…

看了《麦田里的守望者》

看了《麦田里的守望者》 《麦田里的守望者》是一本外国的小说&#xff0c;高中时就听说过它&#xff0c;后来几次听人提起过那个出名的“麦田里的守望者”的意境。前天下午在一个澡堂里没事干&#xff0c;拿起翻了几十页。接着两个晚上&#xff0c;在床上很顺溜的把它的二百二…

《麦田里的守望者》感

前天去借书的时候&#xff0c;只剩下另外一个版本了&#xff0c;果然好的版本已经被借走了&#xff0c;我这次阅读的这个&#xff0c;不能说不好&#xff0c;也有其特色。此处就不论此事说了&#xff0c;还是想说书的质量&#xff0c;不单单是内在的质量&#xff0c;其它质量真…