⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用visual c++中实现混合分割视图.htm

📁 GDI编程的参考资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                  color=#00ff00>1</FONT>条评论&nbsp;&nbsp;点击<FONT 
                  color=#ff0000>2743</FONT>次</TD></TR>
              <TR>
                <TD style="FONT-SIZE: 14px" 
                  width="100%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>  在图像处理等多窗口应用程序中,通常要在屏幕上同时显示若干个窗口,以显示进行图像处理前和处理后的图像信息,或者在每个窗口中分别显示图像的细节和概貌。为了实现上述功能,可以采用MDI的多文档模式进行处理,但是多文档的程序设计和维护相对单文档应用程序而言相对复杂,而且如果要在屏幕上同时显示窗口,通常要调用窗口重叠函数进行管理,窗口的位置也往往需要用鼠标人为设定,过多的人为干预也降低了程序使用的效率。因此,对于某些应用程序,如果能够用分割视图来实现屏幕绘图和显示,无疑会降低程序使用者的操作强度,显示更加直观和方便。<BR><BR>  本文介绍了一种混合分割视图的实现方法,即在Visual 
                  C++中,同时出现基于CView类的普通视图和基于CFormView类的窗体视图,且视图之间存在着二次(或多次)再分割,即视窗里面又包含视窗,如图所示为要涉设计的界面形式。<BR><BR>
                  <CENTER><IMG src="用Visual C++中实现混合分割视图.files/166.gif" 
                  border=0></CENTER><BR><BR>  界面内共含有一个框架和五个视窗,视窗Left、视窗Right、视窗Zoom、视窗Control和视窗 
                  Info。视窗Left、 Right和 
                  Zoom分别显示左右图像窗口的图像和经过高倍放大后的图像,这几个视窗的基类都是CView;视窗Control用来 
                  进行仪器控制和图像操作,视窗Info用来显示系统的当前信息和工作进程和状态,这两个视窗都从CFormView派生出来。<BR>为了实现上述功能,首先用AppWizard生成一单文档应用程序,并自定义生成的默认视类为CZoomView,用来显放大的图像。 
                  <BR><BR>  接下来,通过如下步骤,创建另外四个视窗:<BR><BR>   
                  1、用ClassWizard为应用程序创建一个新类CFixedSplitter,基类为CMDIChildWnd,然后在该类中将所有CMDIChildWnd的地方替换为CsplitterWnd(因为ClassWizard不支持直接从CsplitterWnd类派生子类);<BR><BR>  2、在CMainFrame类里声明分割视图的变量:<BR>CFixedSplitter 
                  SplitterH1; file://水平分割视窗1<BR>CFixedSplitter SplitterH2; 
                  file://水平分割视窗2<BR>CFixedSplitter SplitterV; 
                  file://垂直分割视窗<BR><BR>   
                  3、用ClassWizard为应用程序添加四个新类,其中CLeftView和CrightView从Cview类派生,CControlView和CinfoView从CFormView类中派生;用资源管理器为两个CFormView类指定相应的对话框资源;注意这里一定要通过交互操作将两对话框的风格(属性)设置为WS_CHILD=On,WS_BORDER=Off,WS_VISIBLE=Off,WS_CAPTION=Off,即无标题、无边框、不可见的子窗口,如果这项工作没有作,编译时虽然能够通过,但运行时将会出现断言ASSERT错误;<BR><BR>  4、在CMainFrame类的OnCreateClient函数中添加代码,创建分割视图<BR><BR>BOOL 
                  CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, 
                  CCreateContext* pContext)<BR>{<BR>  // TODO: Add your 
                  specialized code here and/or call the base class<BR>  BOOL 
                  rtn=SplitterV.CreateStatic(this,1,2); 
                  file://首先将窗口客户区分割为一行两列;<BR>  file://将左客户区再分割为三行一列,并以上面分割的左视窗作为父窗口;<BR>  SplitterH1.CreateStatic(&amp;SplitterV, 
                  3, 1, WS_CHILD | WS_VISIBLE | WS_BORDER, 
                  <BR>  SplitterV.IdFromRowCol(0,0)); 
                  <BR>  file://将右客户区再分割为两行一列,并以上面分割的右视窗作为父窗口; 
                  <BR>  SplitterH2.CreateStatic(&amp;SplitterV, 2, 1, WS_CHILD | 
                  WS_VISIBLE | WS_BORDER, 
                  <BR>  SplitterV.IdFromRowCol(0,1));<BR>  file://创建各自视图,并调用RUNTIME_CLASS运行库指定各视图的管理类<BR>  SplitterH1.CreateView(0, 
                  0, RUNTIME_CLASS(CViewL), CSize(0, 0), 
                  pContext);<BR>  SplitterH1.CreateView(1, 0, 
                  RUNTIME_CLASS(CViewR), CSize(0, 0), 
                  pContext);<BR>  SplitterH1.CreateView(2, 0, 
                  RUNTIME_CLASS(CControlView), CSize(0,0), 
                  pContext);<BR>  SplitterH2.CreateView(0, 0, 
                  RUNTIME_CLASS(CZoomView), CSize(0, 0), 
                  pContext);<BR>  SplitterH2.CreateView(1, 0, 
                  RUNTIME_CLASS(CInfoView), CSize(0, 0), 
                  pContext);<BR>  file://设置水平和垂直分割条的初始位置<BR>  SplitterV.SetColumnInfo(0,Ver_Sp_Pos,0); 
                  file://Ver_Sp_Pos为预定分割条的位置<BR>  SplitterH1.SetRowInfo(0,Hor_Sp_Pos,0); 
                  file://Hor_Sp_Pos为预定分割条的位置<BR>  SplitterH1.SetRowInfo(1,Hor_Sp_Pos,0);<BR>  SplitterH2.SetRowInfo(0,576,0);<BR>  return 
                  rtn; <BR>  file://return CFrameWnd::OnCreateClient(lpcs, 
                  pContext); 
                  file://覆盖此函数,否则视图无法显示;<BR>}<BR><BR>  这样编译运行后,程序的界面基本上就有了模样。但是当鼠标移动到分割条位置始,鼠标的形状将会发生变化,呈现出拖动状态的图标,当按下鼠标左键并进行拖动操作时,分割条的位置将随鼠标的移动发生变化。如果程序需要禁止分割条的移动操作,那么还需要继续以下操作:<BR><BR>  在CfixedSplitteWnd类中重载以下函数,以禁止鼠标拖动和光标变化:<BR><BR>void 
                  CFixedSplitterWnd::OnLButtonDown(UINT nFlags, CPoint point) 
                  <BR>{<BR>  CWnd::OnLButtonDown(nFlags, point); 
                  file://最后修改成CWnd的函数<BR>  file://CSplitterWnd::OnLButtonDown(nFlags, 
                  point); file://替换默认的函数<BR>}<BR><BR>  BOOL 
                  CFixedSplitterWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT 
                  message) <BR>{<BR>  return CWnd::OnSetCursor(pWnd, nHitTest, 
                  message);<BR>  file://return CSplitterWnd::OnSetCursor(pWnd, 
                  nHitTest, message);<BR>}<BR><BR>void 
                  CFixedSplitterWnd::OnMouseMove(UINT nFlags, CPoint point) 
                  <BR>{<BR>  CWnd::OnMouseMove(nFlags, 
                  point);<BR>  file://CSplitterWnd::OnMouseMove(nFlags, 
                  point);<BR>}<BR><BR>  接下来就可以象在多文档重叠窗口一样,管理自己的各自视图,每个视图可以分别显示各自的文档内容,非常方便。程序中创建了两个小的窗口显示概貌图像,并用一个大窗口显示高倍放大的细节图像。通过在控制窗体中进行操作,协调各视图的工作进程,并将当前的运行结果用动画等形式显示在信息窗体中。 
                  <BR><BR>  本程序在Windows98下Visual C++6.0环境中调试通<BR></TD></TR>
              <TR>
                <TD height=8></TD></TR>
              <TR>
                <TD>【本文共有<FONT color=#ffff00>1</FONT>条评论信息】</TD></TR>
              <TR>
                <TD>
                  <HR color=red SIZE=1>
                </TD></TR>
              <TR>
                <TD><IMG 
                  src="用Visual C++中实现混合分割视图.files/pot.gif">&nbsp;2005-7-24 
                  4:24:53&nbsp;&nbsp;本站网友【<A href="mailto:"><FONT 
                  color=#ffff00>simahongwen</FONT></A>】发表评论406:<FONT 
                  color=#ffff00>有点小问题</FONT></TD></TR>
              <TR>
                <TD>由CMDIChildWnd派生的新类CFixedSplitter里边的构造函数和析构函数都是保护成员,应在头文件中改为public,否则在CMainFrame构造时要出错。</TD></TR>
              <TR>
                <TD height=12></TD></TR>
              <TR>
                <TD align=right>【<A 
                  href="http://www.czvc.com/review.asp?id=334#send">我来说两句</A>】&nbsp;&nbsp;【<A 
                  href="http://www.czvc.com/send.asp?id=334&amp;type=1">推荐信息</A>】&nbsp;&nbsp;【<A 
                  href="javascript:window.print()">打印本页</A>】&nbsp;&nbsp;【<A 
                  href="javascript:window.close()">关闭窗口</A>】</TD></TR></TBODY></TABLE></TD>
          <TD width="1%">&nbsp;</TD></TR>
        <TR>
          <TD colSpan=3 height=8></TD></TR></TBODY></TABLE></TD>
    <TD width=5 
  background="用Visual C++中实现混合分割视图.files/back2.gif">&nbsp;</TD></TR></TBODY></TABLE>
<TABLE height=5 cellSpacing=0 cellPadding=0 width=759 align=center border=0>
  <TBODY>
  <TR>
    <TD width="100%" 
  background="用Visual C++中实现混合分割视图.files/back2.gif"></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=8 width=759 align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle height=30>Copyright &copy; <A 
      href="http://www.czvc.com/index.asp" target=_self><FONT 
      color=#ffff00>CZVC.com</FONT></A> 2002-2006 <A 
      href="mailto:info@czvc.com"><FONT color=#ffff00>一剑</FONT></A> 
      [QQ:28077188] All Rights 
Reserved.<BR>本站由北京市通信公司提供网络支持</TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -