我在我的程序中如下创建了一个三行一列的分割窗体视图(都是从CScrollView派生),我希望最下面一个视图能固定大小,不能通过分割条改变大小,并且在我滚动鼠标滚轮时不滚动。 我该如何做呢?请大家赐教 m_splitter.CreateStatic( this, 3, 1 );
m_splitter.CreateView(0,0,RUNTIME_CLASS(CAINShowView),
Ainrc,pContext);
m_splitter.CreateView(1,0,RUNTIME_CLASS(CDINShowView),
Dinrc,pContext);
m_splitter.CreateView(2,0,RUNTIME_CLASS(CTimeShowView),
Timerc,pContext);
m_pAinView=(CAINShowView*)m_splitter.GetPane(0,0); 
m_pDinView=(CDINShowView*)m_splitter.GetPane(1,0); 
m_pTimeView=(CTimeShowView*)m_splitter.GetPane(2,0); 
m_splitter.SetScrollStyle(WS_HSCROLL);//水平滚动,共用一个水平滚动条
RecalcLayout();

解决方案 »

  1.   

    virtual void RecalcLayout();    // call after changing sizes

    static void DeferClientPos(AFX_SIZEPARENTPARAMS* lpLayout,
    CWnd* pWnd, int x, int y, int cx, int cy, BOOL bScrollBar);
    static void LayoutRowCol(CSplitterWnd::CRowColInfo* pInfoArray,
    int nMax, int nSize, int nSizeSplitter);
    上天入地,弄了很久,必须修改RecalLayout函数才行,具体的自己跟踪进去看。
      

  2.   

    qiangv 大侠,您好:
        首先感谢你的回复,我在该多文档子窗口中重载了该虚函数(RecalcLayout)可是我拖动分割条时,并没有进入到此函数中,我那边不对呢,我想将最低下(第三行)的窗口固定大小(用 m_splitter.SetRowInfo(2,40,40);好像不行),并不想跟随其它两个窗口一起滚动,请您具体讲一下好吗?
        再次感谢!
      

  3.   

    SetRowInfo只是设置其初始的大小
    并不能限制其不变大或变小。不变大或变小的思路是,在重新计算的时候,如果面板的大小不是我们想要的大小,就将其调整回来,不让它变。virtual   void   RecalcLayout(); 
    继承这个,不进去,怎么可能~
    你映射什么的有错误么?
      

  4.   

    派生一个splitter,把它的MouseMove、Up、Down都短路掉,即成固定的splitter然后先用派生的固定的splitter建立一个两行一列的切分,上面一行是下面的高度的两倍
    然后再用普通的splitter在前面分好的splitter的上面一行里嵌套再建立一个两行一列的切分,即可
      

  5.   

    dazedase 这个例子我也想要,[email protected]
    谢谢了
      

  6.   

    不显示滚动条好像在OnInitialUpdate()中用一条语句:
     SetScrollSizes(MM_TEXT, CSize(0));