如何改变CSplitterWnd的大小

本文介绍了一种方法来调整MFC中的CSplitterWnd窗口大小,通过修改分割条上方窗口的高度,使得其能够在窗口缩放时保持相对稳定。作者在CChildFrame的WM_SIZE消息处理函数中实现了这一功能。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值