本文是讲述《数字图像处理》系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程及常用图片软件讲解.
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
);
添加代码如下,同时向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格式图片"中运行结果如下图所示:
PS:由于在完成该程序时VS2012在编译时总是提示错误:"error MSB6006:'cl.exe' exited with code 2",code 1是汉字问题,但code 2可能是路径环境被破坏.查找到相应位置Microsoft.CppCommon.targets的代码是"
它耗费了我大量时间,最后我决定放弃,准备装VC 6.0来完成MFC项目,但在安装它时又由于兼容问题,程序总是未响应,也不能安装.但是再次运行VS2012时上面的error MSB6006等问题被解决了,VS2012的MFC又能运行了.我怀疑可能由于在安装VC 6.0时修复了其中文件环境路径问题,百思不得其解???
希望该文章能够对大家有所帮助,同时如果文章中有错误或不足之处,还请大家海涵.后面讲述的"左边显示树状图片路径,右边显示图片"和"显示图片路径中的文件"可能对大家帮助更大,此篇仅是开篇.
(By:Eastmount 2014-2-12 夜2点 原创:http://blog.csdn.net/eastmount)