CSplitterWnd

1.Create方法和CreateStatic方法之间的区别

Create动态拆分:

    动态拆分是对同一个视图进行分隔,各个分隔窗口内容相同,但各自独立控制视野范围,可以显示同一文档的不同部分,允许分隔的窗口内有一个分隔条,可用鼠标拖拽分隔条调整各窗口大小和数目,但不超过 2行×2列。

CreateStatic静态拆分:

静态拆分的窗口个数一开始就是固定的,各窗口可以显示不同的视图对象,每个窗口的活动完全独立,有属于自己的水平 滚动条和垂直滚动条,分隔条可以移动但不能消失,静态拆分的窗口个数上限是 16行×16列。

2.隐藏某视图

CSplitterWnd可以很方便地创建分割器窗口。要隐藏分割器窗口中的某个视图,只需调用GetPane函数得到视图指针,然后调用ShowWindow函数隐藏窗口。但是这样做只隐藏了视图窗口,没有隐藏分割条;当程序框架尺寸变化后,程序会自动调用RecalcLayout函数,从而使得显示效果不正常。CSplitterWnd没有提供设置分割条尺寸的public函数,通过分析CSplitterWnd的源码得知,它里面有几个没有公开的受保护的成员变量:

m_cxSplitter, m_cySplitter, m_cxBorderShare, m_cyBorderShare, m_cxSplitterGap, m_cySplitterGap, m_cxBorlder, m_cyBorlder

通过重新构造m_cxSplitterGap,m_cySplitterGap变量的值,就可以实现改变分割条尺寸的功能。

解决方案:

1.从CSplitterWnd派生一个新类CMySplitterWnd;

2.在.h文件中添加成员变量和函数如下:

       int m_cx;

       int m_cy;

       void HideSplitter();

       void ShowSplitter();

3.在.cpp文件中添加实现代码如下:

void CMySplitterWnd::HideSplitter()

{

       m_cx=m_cxSplitterGap;//save previous cx

       m_cy=m_cxSplitterGap;//save previous cy

       m_cxSplitterGap=0;

       m_cySplitterGap=0;

}

void CMySplitterWnd::ShowSplitter()

{

       m_cxSplitterGap=m_cx;

       m_cySplitterGap=m_cy;

}

4.使用新类CMySplitterWnd生成分割器窗口,在需要的时候调用HideSplitter、ShowSplitter函数即可。

解决方案2:

//保存分割条的位置

m_wndSplitter1.GetColumnInfo(0,scx,smcx);

//设置分割条在最左边

m_wndSplitter1.SetColumnInfo(0,0,0);

LeftView->ShowWindow(SW_HIDE);

RightView->ShowWindow(SW_MAXIMIZE);

m_wndSplitter1.HideSplitter();

m_wndSplitter1.RecalcLayout();

3.

virtual BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );

virtual BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );

virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );

AFX_IDW_PANE_FIRST 是默认nID,用于一层分割时。多层分割需要父窗口调用int IdFromRowCol( int row, int col ) const;函数得到row行col列的窗口id号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值