使用CScrollView建立捲軸

來源:互聯網
上載者:User

捲軸的作用在於當繪製的圖形超過客戶區的大小的時候,通過捲軸的移動來觀測整個圖形,VC中提供了CScrollView類來完成捲軸的繪製,在建立工程的時候的第六步,將基類選擇為CSrollView。如果之前已經選擇CView為基類,請將你的程式進行如下改動:(1)將CXXXView.cpp和CXXXView.h中的CView全部替換為CSrollView(XXX為工程名稱)(2)通過ClassWizard為CXXXView添加響應函數OnInitialUpdate(),並添加一下代碼:
    CSize sizeTotal;
    sizeTotal.cx=sizeTotal.cy=0;
    SetScrollSizes(MM_TEXT,SizeTotal);
這段代碼的作用在於完成捲軸的初始化,如果不添加編譯時間沒有問題但運行時出錯,SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault )四個參數的含義分別是:nMapMode指映射模式,sizeTotal代表捲軸的範圍,sizePage代表點擊捲軸空白處時捲軸移動的距離,sizeLine代表點擊端點處捲軸移動的距離。

    設定完成後,在OnDraw中把你繪圖使用的參數傳遞給SetScrollSizes(),確定捲軸的範圍,此處有一注意事項:在繪圖的過程中使用CDC *pDC直接調用繪製,不要使用CClientDC dc(this)的dc來進行繪製,否則將導致捲軸的移動時圖形沒有任何變化(曾經花了兩天時間才發現這個問題的解決方案,笨啊!)

建議最好添加如下代碼:

//這個很重要
void CProgramView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class

CScrollView::OnPrepareDC(pDC, pInfo);
}

void CProgramView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default

CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CProgramView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default

CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.