生活的天平本不平衡,只有通过努力改变其偏向。

CSplitterWnd实现隐藏分割条的功能

2005-10-11

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

作者:lonkil | 分类目录:编程开发 | 标签:

2 条评论

  1. lonkil 说道:

    //备注:如果直接运行会出错,需将想隐藏边框的视图隐藏。————–By Lonkil

  2. 吴建凰 说道:

    我尝试了你上面的方法,但没有成功。
    我一调用HideSplitter()就出现异常,然后我发现是:m_cxSplitterGap=0;m_cySplitterGap=0;的错。然后我稍微改动了一下就没事了:m_cxSplitterGap=1;m_cySplitterGap=1.关于出现这个异常的原因我尚不清楚。我真诚的希望您发现了原因告诉我一声。我的邮箱wjh_monkey@163.com。联系电话:13619257507.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>