如何改变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;
}