关于mfc CSplitterWnd的几点理解

1.首先是CsplitterWnd的关键的几个参数

	// implementation attributes which control layout of the splitter
	int m_cxSplitter, m_cySplitter;         // size of splitter bar
	int m_cxBorderShare, m_cyBorderShare;   // space on either side of splitter
	int m_cxSplitterGap, m_cySplitterGap;   // amount of space between panes
	int m_cxBorder, m_cyBorder;             // borders in client area


m_cxSplitter, m_cySplitter就是分隔条的粗细。当这两个值比m_cxSplitterGap或者m_cySplitterGap小或者相等的时候,才能完全显示m_cxSplitter, m_cySplitter所设定大小的分隔条,否则显示分隔条的大小以m_cxSplitterGap或者m_cySplitterGap的大小为准。

m_cxSplitterGap, m_cySplitterGap就是分割窗体面板(各个view)之间的间隔,并且间隔占用的空间根据行列方向而定。如果是横向排列相邻的两个子面板,那么这个间隔占用空间由右边的子窗体提供;如果是纵向排列相邻的两个子窗体,那么这个间隔占用空间由下面的子窗体提供。

m_cxBorder, m_cyBorder;就是各个分割窗体面板(各个view)的边界的大小。

m_cxBorderShare, m_cyBorderShare就是紧邻分隔条其中一边与这一边子窗体边界之间的预留空间大小,如果m_cxBorderShare值为正,则预留空间在分隔条的左边,如果m_cxBorderShare值为负则在右边。对于纵向,m_cyBorderShare道理一样。

这四对变量之间的关系就是m_cxSplitterGap, m_cySplitterGap就是单纯的两个分割子窗体之间的间隔,不会跟子窗体有交,不受其他参数的影响。m_cxSplitter, m_cySplitter就是单纯的分隔条的大小,可能会跟分割子窗体有交,也就是被子窗体覆盖部分。

 

	m_cxSplitterGap = m_cySplitterGap = 25;
	m_cxBorder      = m_cyBorder      = 0;
	m_cxBorderShare = m_cyBorderShare = 5;
	m_cxSplitter    = m_cySplitter    = 10;


 可得到如下

                  

上面的图示在SplitterGap比其他参数大的情况下。可以看出,BorderShare为正的时候,横向就是从子窗体的右边开始到相邻分隔条之间的间隔,纵向就是上面的子窗体的下边界到相邻分隔条之间的高度,反之亦然。

把m_cxSplitterGap, m_cySplitterGap改成比其他参数小的情况如下:

                

	m_cxSplitterGap = m_cySplitterGap = 3;
	m_cxBorder      = m_cyBorder      = 0;
	m_cxBorderShare = m_cyBorderShare = 5;
	m_cxSplitter    = m_cySplitter    = 10;


这时候的界面是

                 

 

2.关于子窗体view大小的理解,有如下创建代码

         m_wndSplitternd.CreateView(0,0,RUNTIME_CLASS(CXYZSliceView),CSize(lv_width,lv_height),pContext);
	m_wndSplitternd.CreateView(0,1,RUNTIME_CLASS(CXYZSliceView),CSize(lv_width,lv_height),pContext); 
	m_wndSplitternd.CreateView(1,0,RUNTIME_CLASS(CXYZSliceView),CSize(lv_width,lv_height),pContext); 
	m_wndSplitternd.CreateView(1,1,RUNTIME_CLASS(CLiverDemoView),CSize(lv_width,lv_height),pContext);


那么所创建的view的大小区域一定是1中的图的黑色部分背景的大小,因为view的大小主要受m_cxSplitterGap和m_cySplitterGap的影响。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值