如何改變CSplitterWnd的大小

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.