登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

CSplitterWnd  

2008-12-29 10:45:54|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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号。

  评论这张
 
阅读(1092)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018