各位:
    小弟用 CSplitterWnd 切分出了 3 个视图,把窗体分成两列,左边是独立的一个视图,右边再横向分出了 2 个视图。现在的问题是,在运行的时候,用户可以拖动分割条来改变两边视图的大小,我希望是可以改变大小,但是有一个大小的限度,比如,当拖动分割条改变左边视图的宽度时,我希望最小不能小于 300 ,如果小于 300 就固定不能再拖动了。不知道如何写代码,希望大家给予指点,谢谢

解决方案 »

  1.   

    处理OnSize消息处理函数,加以限制,MoveWindow
      

  2.   

    首先谢谢楼上的。
    问题是到底是怎么写?我希望限定的是 Frame 里面某个视图的大小
    if (cx < 800) {
        .......???
    }
      

  3.   

    OnSize
    if (cx < 800)
     {
        cx = 800;
    }
      

  4.   

    CSplitterWnd::SetRowInfo /CSplitterWnd::SetColumnInfo
      

  5.   

    也可派生一个CSplitterWnd的子类,处理消息
    WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR,如果不满足你的条件,就回避标准的CSplitterWnd的处理过程。
      

  6.   

    OnSize
    if (cx < 800)
     {
        cx = 800;
    }这种方法是没有用的,我试过了if (cx < 800) {
        MoveWindow(0, 0, 800, cy);
    }
    如果是写在 MainFrame 的 OnSize 里面会造成严重的闪烁,写在视图的 OnSize 里面也没有用至于说 CSplitterWnd::SetRowInfo /CSplitterWnd::SetColumnInfo,好像也不能写在 MainFrame 里面吧,因为我觉得 MainFrame 的 OnSize 方法传入的 cx 和 cy 参数应该不是针对我正在移动分割条的那个视图的 cx 和 cy 吧。如果是写在视图的 OnSize 里面,是否是通过 
    CMainFrame *pMain = (CMainFrame *)AfxGetApp() -> GetMainWnd();
    pMain ->m_wndSplitter;
    来得到 CSplitterWnd 对象呢?我一运行就出错