您的位置:首页 > 其它

如何改变CSplitterWnd的大小

2008-01-27 16:01 387 查看
如何改变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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐