- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用VisualC中实现混合分割视图
用Visual C++中实现混合分割视图
在图像处理等多窗口应用程序中,通常要在屏幕上同时显示若干个窗口,以显示进行图像处理前和处理后的图像信息,或者在每个窗口中分别显示图像的细节和概貌.为了实现上述功能,可以采用MDI的多文档模式进行处理,但是多文档的程序设计和维护相对单文档应用程序而言相对复杂,而且如果要在屏幕上同时显示窗口,通常要调用窗口重叠函数进行管理,窗口的位置也往往需要用鼠标人为设定,过多的人为干预也降低了程序使用的效率.因此,对于某些应用程序,如果能够用分割视图来实现屏幕绘图和显示,无疑会降低程序使用者的操作强度,显示更加直观和方便.
本文介绍了一种混合分割视图的实现方法,即在Visual C++中,同时出现基于CView类的普通视图和基于CFormView类的窗体视图,且视图之间存在着二次(或多次)再分割,即视窗里面又包含视窗,如图所示为要涉设计的界面形式.
界面内共含有一个框架和五个视窗,视窗Left、视窗Right、视窗Zoom、视窗Control和视窗 Info.视窗Left、 Right和 Zoom分别显示左右图像窗口的图像和经过高倍放大后的图像,这几个视窗的基类都是CView;视窗Control用来 进行仪器控制和图像操作,视窗Info用来显示系统的当前信息和工作进程和状态,这两个视窗都从CFormView派生出来.为了实现上述功能,首先用AppWizard生成一单文档应用程序,并自定义生成的默认视类为CZoomView,用来显放大的图像.接下来,通过如下步骤,创建另外四个视窗用ClassWizard为应用程序创建一个新类CFixedSplitter,基类为CMDIChildWnd,然后在该类中将所有CMDIChildWnd的地方替换为CsplitterWnd因为ClassWizard不支持直接从CsplitterWnd类派生子类由CMDIChildWnd派生的新类CFixedSplitter里边的构造函数和析构函数都是保护成员,应在头文件中改为public,否则在CMainFrame构造时要出错.在CMainFrame类里声明分割视图的变量CFixedSplitter SplitterH1;//水平分割视窗1CFixedSplitter SplitterH2;//水平分割视窗2CFixedSplitter SplitterV;//垂直分割视窗用ClassWizard为应用程序添加四个新类,其中CLeftView和CrightView从Cview类派生,CControlView和CinfoView从CFormView类中派生;用资源管理器为两个CFormView类指定相应的对话框资源;注意这里一定要通过交互操作将两对话框的风格(属性)设置为WS_CHILD=On,WS_BORDER=Off,WS_VISIBLE=Off,WS_CAPTION=Off,即无标题、无边框、不可见的子窗口,如果这项工作没有作,编译时虽然能够通过,但运行时将会出现断言ASSERT错误在CMainFrame类的OnCreateClient函数中添加代码,创建分割视图BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
BOOL rtn=SplitterV.CreateStatic(this,1,2); //首先将窗口客户区分割为一两列/将左客户区再分割为三行一列,并以上面分割的左视窗作为父窗口SplitterH1.CreateStatic(SplitterV, 3, 1, WS_CHILD | WS_VISIBLE | WS_BORDER,?SplitterV.IdFromRowCol(0,0));?
//将右客户区再分割为两行一列,并以上面分割的右视窗作为父窗口plitterH2.CreateStatic(SplitterV, 2, 1, WS_CHILD | WS_VISIBLE | WS_BORDER,?SplitterV.IdFromRowCol(0,1));
//创建各自视图,并调用RUNTIME_CLASS运行库指定各视图的管理类SplitterH1.CreateView(0, 0, RUNTIME_CLASS(CViewL), CSize(0, 0), pContext);
SplitterH1.CreateView(1, 0, RUNTIME_CLASS(CViewR), CSize(0, 0), pContext);
SplitterH1.CreateView(2, 0,
文档评论(0)