如何改變CSplitterWnd的大小
今天在寫一個程式,介面中我使用CSplitterWnd將視窗分為上下兩個視窗,但是在程式縮放、最大化時,放大和縮小的都是分割條下面的視窗,可我需要的是放大縮小分割條上面的視窗。
我截獲了CChildFrame的WM_SIZE訊息,在這裡重新計算分割條兩個視窗的大小,使分割條下面的視窗高度保持不變。在運行時發現,隨著應用程式的縮放,下面的視窗變的越來越大,研究後發現是計算時沒有減去分割條的高度,所以導致每次縮放都有一個誤差。知道原因後,解決就比較簡單了。
首先,在OnSize中,儲存當前窗戶區的大小,然後比較上次儲存的大小,得到x,y軸上的位移,將分割條上面的視窗高度加上位移量即可。代碼如下所示:
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
if ( m_hSplitterWnd.GetSafeHwnd() != NULL && m_bIsViewCreated )
{
int y = cy - m_sizeClient.cy;
int nHeight0, nMinHeight0;
int nHeight1, nMinHeight1;
m_hSplitterWnd.GetRowInfo( 0, nHeight0, nMinHeight0 );
m_hSplitterWnd.GetRowInfo( 1, nHeight1, nMinHeight1 );
m_hSplitterWnd.SetRowInfo( 0, nHeight0 + y, nMinHeight0 );
m_hSplitterWnd.SetRowInfo( 1, nHeight1, nMinHeight1 );
m_hSplitterWnd.RecalcLayout();
}
m_sizeClient.cx = cx;
m_sizeClient.cy = cy;
}