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函数即可。 
|