CSplitterWnd实现隐藏分割条的功能
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函数即可。
//备注:如果直接运行会出错,需将想隐藏边框的视图隐藏。————–By Lonkil
原文地址:http://blog.csdn.net/cx0928/archive/2004/10/11/131833.aspx
2 条评论
//备注:如果直接运行会出错,需将想隐藏边框的视图隐藏。————–By Lonkil
我尝试了你上面的方法,但没有成功。
我一调用HideSplitter()就出现异常,然后我发现是:m_cxSplitterGap=0;m_cySplitterGap=0;的错。然后我稍微改动了一下就没事了:m_cxSplitterGap=1;m_cySplitterGap=1.关于出现这个异常的原因我尚不清楚。我真诚的希望您发现了原因告诉我一声。我的邮箱wjh_monkey@163.com。联系电话:13619257507.