關於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的影響。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章