分类

  • 软件天地

  • 用Visual C++中实现混合分割视图‖
    处理前和处理后的图像信息
    能,可以采用MDI的多文档
    而言相对复杂,而且如果要
    的位置也往往需要用鼠标人
    些应用程序,如果能够用分
    ,显示更加直观和方便。
    用程序中,通常要在屏幕上同时
    ,或者在每个窗口中分别显示图
    模式进行处理,但是多文档的程
    在屏幕上同时显示窗口,通常要
    为设定,过多的人为干预也降低
    割视图来实现屏幕绘图和显示,

    显示若干个窗口,以显示进行图像
    像的细节和概貌。为了实现上述功
    序设计和维护相对单文档应用程序
    调用窗口重叠函数进行管理,窗口
    了程序使用的效率。因此,对于某
    无疑会降低程序使用者的操作强度


     ”疚慕樯芰艘恢只旌戏?br>普通视图和基于CFormView
    里面又包含视窗,如图所示
    割视图的实现方法,即在Visual
    类的窗体视图,且视图之间存在
    为要涉设计的界面形式。
    C++中,同时出现基于CView类的
    着二次(或多次)再分割,即视窗

      

      界面内共含有一个框架
    窗 Info。视窗Left、 Righ
    这几个视窗的基类都是CVie
    示系统的当前信息和工作进
    和五个视窗,视窗Left、视窗Ri
    t和 Zoom分别显示左右图像窗口
    w;视窗Control用来 进行仪器
    程和状态,这两个视窗都从CFor
    ght、视窗Zoom、视窗Control和视
    的图像和经过高倍放大后的图像,
    控制和图像操作,视窗Info用来显
    mView派生出来。
      为了实现上述功能,首先用AppWizar
    为CZoomView,用来显放大的图像。
    d生成一单文档应用程序,并自定义生成的默认视类


      接下来,通过如下步骤,创建另外四个视窗:                                      

      1、用ClassWizard为应用程序创建一
    在该类中将所有CMDIChildWnd的地方替换
    CsplitterWnd类派生子类);
    个新类CFixedSplitter,基类为CMDIChildWnd,然后
    为CsplitterWnd(因为ClassWizard不支持直接从


      2、在CMainFrame类里声明分割视图的变量:                            

      CFixedSplitter Split
    terH1; file://水平分割视窗1
      CFixedSplitter SplitterH2; file:
    //水平分割视窗2
      CFixedSplitter SplitterV; file://垂直分割视窗

      3、用ClassWizard为应
    ,CControlView和CinfoVie
    应的对话框资源;注意这里
    WS_CHILD=On,WS_BORDER=O
    见的子窗口,如果这项工作

    用程序添加四个新类,其中CLef
    w从CFormView类中派生;用资源
    一定要通过交互操作将两对话框
    ff,WS_VISIBLE=Off,WS_CAPTI
    没有作,编译时虽然能够通过,

    tView和CrightView从Cview类派生
    管理器为两个CFormView类指定相
    的风格(属性)设置为
    ON=Off,即无标题、无边框、不可
    但运行时将会出现断言ASSERT错误


      4、在CMainFrame类的O
    nCreateClient函数中添加代码
    ,创建分割视图

      BOOL CMainFrame::OnC
    reateClient(LPCREATESTRUCT l
    pcs, CCreateContext* pContext)
      {                                                                            
      // TODO: Add your specialized co
    de here and/or call the base class
      BOOL rtn=SplitterV.CreateStatic(
    列;
    this,1,2); file://首先将窗口客户区分割为一行两

      file://将左客户区再分割为三行一列,并以上面分割的左视窗作为父窗口;    
      SplitterH1.CreateSta
    tic(&SplitterV, 3, 1, WS_CHI
    LD | WS_VISIBLE | WS_BORDER,
      SplitterV.IdFromRowCol(0,0));                    
      file://将右客户区再分割为两行一列,并以上面分割的右视窗作为父窗口;    
      SplitterH2.CreateSta
    tic(&SplitterV, 2, 1, WS_CHI
    LD | WS_VISIBLE | WS_BORDER,
      SplitterV.IdFromRowCol(0,1));                    
      file://创建各自视图,并调用RUNTI
    ME_CLASS运行库指定各视图的管理类
      SplitterH1.CreateVie
    w(0, 0, RUNTIME_CLASS(CViewL
    ), CSize(0, 0), pContext);
      SplitterH1.CreateVie
    w(1, 0, RUNTIME_CLASS(CViewR
    ), CSize(0, 0), pContext);
      SplitterH1.CreateView(2, 0, RUNT
    ;
    IME_CLASS(CControlView), CSize(0,0), pContext)

      SplitterH2.CreateVie
    w(0, 0, RUNTIME_CLASS(CZoomV
    iew), CSize(0, 0), pContext);
      SplitterH2.CreateView(1, 0, RUNT
    IME_CLASS(CInfoView), CSize(0, 0), pContext);
      file://设置水平和垂直分割条的初始位置                                  
      SplitterV.SetColumnI
    nfo(0,Ver_Sp_Pos,0); file://
    Ver_Sp_Pos为预定分割条的位置
      SplitterH1.SetRowInf
    o(0,Hor_Sp_Pos,0); file://Ho
    r_Sp_Pos为预定分割条的位置
      SplitterH1.SetRowInfo(1,Hor_Sp_Pos,0);  
      SplitterH2.SetRowInfo(0,576,0);                
      return rtn;                                                        
      file://return CFrameWnd::OnCreat
    则视图无法显示;
    eClient(lpcs, pContext); file://覆盖此函数,否

      }                                                                            

      这样编译运行后,程序
    的形状将会发生变化,呈现
    位置将随鼠标的移动发生变
    作:
    的界面基本上就有了模样。但是
    出拖动状态的图标,当按下鼠标
    化。如果程序需要禁止分割条的

    当鼠标移动到分割条位置始,鼠标
    左键并进行拖动操作时,分割条的
    移动操作,那么还需要继续以下操


      在CfixedSplitteWnd类中重载以下函数,以禁止鼠标拖动和光标变化:

      void CFixedSplitterWnd::OnLButto
    nDown(UINT nFlags, CPoint point)
      {                                                                            
      CWnd::OnLButtonDown(nFlags, poin
    t); file://最后修改成CWnd的函数
      file://CSplitterWnd:
    :OnLButtonDown(nFlags, point
    ); file://替换默认的函数
      }                                                                            

      BOOL CFixedSplitterW
    nd::OnSetCursor(CWnd* pWnd,
    UINT nHitTest, UINT message)
      {                                                                            
      return CWnd::OnSetCursor(pWnd, n
    HitTest, message);
      file://return CSplitterWnd::OnSe
    tCursor(pWnd, nHitTest, message);
      }                                                                            

      void CFixedSplitterW
    nd::OnMouseMove(UINT nFlags,
    CPoint point)
      {                                                                            
      CWnd::OnMouseMove(nFlags, point);            

      file://CSplitterWnd:
    :OnMouseMove(nFlags, point);
      }                                                                            

      接下来就可以象在多文
    自的文档内容,非常方便。
    倍放大的细节图像。通过在
    果用动画等形式显示在信息
    档重叠窗口一样,管理自己的各
    程序中创建了两个小的窗口显示
    控制窗体中进行操作,协调各视
    窗体中。
    自视图,每个视图可以分别显示各
    概貌图像,并用一个大窗口显示高
    图的工作进程,并将当前的运行结


    上一页 下一页




    map