共用方式為


CScrollView 類別

CView具有捲動功能的 。

語法

class CScrollView : public CView

成員

受保護的建構函式

名稱 描述
CScrollView::CScrollView 建構 CScrollView 物件。

公用方法

名稱 描述
CScrollView::CheckScrollBars 指出卷動檢視是否具有水平和垂直滾動條。
CScrollView::FillOutsideRect 填滿卷動區域外檢視的區域。
CScrollView::GetDeviceScrollPosition 取得裝置單位中的目前卷動位置。
CScrollView::GetDeviceScrollSizes 取得目前的對應模式、大小總計,以及可捲動檢視的行和頁面大小。 大小以裝置單位為單位。
CScrollView::GetScrollPosition 取得邏輯單元中的目前捲動位置。
CScrollView::GetTotalSize 取得邏輯單元中卷動檢視的總大小。
CScrollView::ResizeParentToFit 導致檢視的大小指定其框架的大小。
CScrollView::ScrollToPosition 將檢視卷動至以邏輯單元指定的指定點。
CScrollView::SetScaleToFitSize 將捲動檢視放入縮放至調整模式。
CScrollView::SetScrollSizes 設定卷動檢視的對應模式、大小總計和水準和垂直捲動量。

備註

您可以覆寫訊息對應OnHScrollOnVScroll成員函式,在衍生自 CView 的任何類別中自行處理標準捲動。 但 CScrollView 會將下列功能新增至其 CView 功能:

  • 它會管理視窗和檢視區大小和對應模式。

  • 它會自動捲動以回應滾動條訊息。

  • 它會自動捲動以回應來自鍵盤、非捲動滑鼠或 IntelliMouse 滾輪的訊息。

若要自動捲動以回應來自鍵盤的訊息,請新增 WM_KEYDOWN 訊息,並測試 VK_DOWNVK_PREV 並呼叫 SetScrollPos

您可以藉由覆寫訊息對應 OnMouseWheelOnRegisteredMouseWheel 成員函式,自行處理滑鼠滾輪捲動。 因為這些成員函式支持 CScrollView的建議行為 WM_MOUSEWHEEL,輪轉訊息。

若要利用自動捲動,請從 CScrollView 衍生您的檢視類別,而不是從衍生。CView 第一次建立檢視時,如果您想要根據檔的大小計算可捲動檢視的大小,請從 或CView::OnUpdate的覆寫CView::OnInitialUpdate呼叫SetScrollSizes成員函式。 (您必須撰寫自己的程式碼來查詢檔案的大小。如需範例,請參閱 Scribble 範例。)

對成員函式的呼叫 SetScrollSizes 會設定檢視的對應模式、捲動檢視的總維度,以及水準和垂直捲動的數量。 所有大小都是以邏輯單元為單位。 檢視的邏輯大小通常是從儲存在檔案中的數據計算,但在某些情況下,您可能會想要指定固定大小。 如需這兩種方法的範例,請參閱 CScrollView::SetScrollSizes

您可以指定要以邏輯單元水準和垂直捲動的數量。 根據預設,如果使用者在滾動盒外按下滾動條軸, CScrollView 則會捲動「頁面」。如果使用者在滾動條的任一端按兩下滾動箭頭, CScrollView 則會捲動「線條」。根據預設,頁面是檢視大小總計的 1/10;一行是頁面大小的 1/10。 傳遞成員函式中的 SetScrollSizes 自定義大小,以覆寫這些預設值。 例如,您可以將水準大小設定為總大小寬度的一些分數,並將垂直大小設定為目前字型中線條的高度。

您可以自動將檢視調整為目前的視窗大小, CScrollView 而不是捲動。 在此模式中,檢視沒有滾動條,而且邏輯檢視會延展或縮小,以完全符合視窗的工作區。 若要使用此調整成適合的功能,請呼叫 CScrollView::SetScaleToFitSize。 (呼叫 SetScaleToFitSizeSetScrollSizes,但不是兩者。

OnDraw呼叫衍生檢視類別的成員函式之前,CScrollView自動調整其傳遞至 OnDrawCPaintDC裝置內容對象的檢視區原點。

若要調整卷動視窗的檢視區原點, CScrollViewCView::OnPrepareDC覆寫 。 這項調整是針對傳遞給OnDraw的裝置內容CScrollView自動調整,CPaintDC但您必須自行呼叫CScrollView::OnPrepareDC您使用的任何其他裝置內容,例如 CClientDC。 您可以覆寫 CScrollView::OnPrepareDC 來設定畫筆、背景色彩和其他繪圖屬性,但呼叫基類來執行縮放。

滾動條可以出現在相對於檢視的三個位置,如下列情況所示:

  • 您可以使用 和 WS_VSCROLL Windows 樣式來設定檢視WS_HSCROLL的標準視窗樣式滾動條。

  • 滾動條控制項也可以新增至包含檢視的框架,在此情況下,架構會將框架轉送和WM_VSCROLL訊息從框架視窗轉寄WM_HSCROLL至目前使用中的檢視。

  • 架構也會將訊息從 CSplitterWnd 分割器控件轉送至目前使用中的分割器窗格(檢視)。 當放置於具有共用滾動條的 CSplitterWnd 中時, CScrollView 物件會使用共用的滾動條,而不是建立自己的。

如需使用CScrollView的詳細資訊,請參閱 MFC 中可用的檔/檢視架構和衍生檢視類別。

繼承階層架構

CObject

CCmdTarget

CWnd

CView

CScrollView

需求

標頭: afxwin.h

CScrollView::CheckScrollBars

呼叫這個成員函式,以判斷滾動檢視是否具有水準和垂直線。

void CheckScrollBars(
    BOOL& bHasHorzBar,
    BOOL& bHasVertBar) const;

參數

bHasHorzBar
指出應用程式具有水平滾動條。

bHasVertBar
指出應用程式具有垂直滾動條。

CScrollView::CScrollView

建構 CScrollView 物件。

CScrollView();

備註

您必須呼叫 SetScrollSizesSetScaleToFitSize ,才能使用卷動檢視。

CScrollView::FillOutsideRect

呼叫 FillOutsideRect 以填滿出現在捲動區域外之檢視的區域。

void FillOutsideRect(
    CDC* pDC,
    CBrush* pBrush);

參數

pDC
要完成填滿的裝置內容。

pBrush
要填滿區域的筆刷。

備註

FillOutsideRect 卷動檢視的 OnEraseBkgnd 處理程式函式中使用,以避免過度重繪背景。

範例

BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
   CBrush br(GetSysColor(COLOR_WINDOW));
   FillOutsideRect(pDC, &br);
   return TRUE;                   // Erased
}

CScrollView::GetDeviceScrollPosition

當您需要捲動條中捲動盒的目前水平和垂直位置時呼叫 GetDeviceScrollPosition

CPoint GetDeviceScrollPosition() const;

傳回值

滾動盒的水準和垂直位置(以裝置單位為單位)作為 CPoint 物件。

備註

這個座標組會對應至卷動檢視左上角的檔位置。 這適用於將滑鼠裝置位置位移以卷動檢視裝置位置。

GetDeviceScrollPosition 會傳回裝置單位中的值。 如果您要邏輯單元,請改用 GetScrollPosition

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes 會取得目前的對應模式、大小總計,以及可捲動檢視的線條和頁面大小。

void GetDeviceScrollSizes(
    int& nMapMode,
    SIZE& sizeTotal,
    SIZE& sizePage,
    SIZE& sizeLine) const;

參數

nMapMode
傳回這個檢視的目前對應模式。 如需可能值的清單,請參閱 SetScrollSizes

sizeTotal
傳回裝置單位中卷動檢視的目前總大小。

sizePage
傳回目前水準和垂直方向捲動的數量,以回應滾動條軸中的滑鼠點選。 成員 cx 包含水平數量。 成員 cy 包含垂直數量。

sizeLine
傳回目前的水準和垂直數量,以回應滾動箭號中的滑鼠按兩下,在每個方向捲動。 成員 cx 包含水平數量。 成員 cy 包含垂直數量。

備註

大小以裝置單位為單位。 這個成員函式很少呼叫。

CScrollView::GetScrollPosition

當您需要捲動條中捲動盒的目前水平和垂直位置時呼叫 GetScrollPosition

CPoint GetScrollPosition() const;

傳回值

滾動盒的水準和垂直位置(以邏輯單位為單位)作為 CPoint 物件。

備註

這個座標組會對應至卷動檢視左上角的檔位置。

GetScrollPosition 傳回邏輯單元中的值。 如果您要裝置單位,請改用 GetDeviceScrollPosition

CScrollView::GetTotalSize

呼叫 GetTotalSize 以擷取卷動檢視目前的水準和垂直大小。

CSize GetTotalSize() const;

傳回值

邏輯單元中卷動檢視的總大小。 水準大小位於 cx 傳回值的成員中 CSize 。 垂直大小位於 成員中 cy

CScrollView::ResizeParentToFit

呼叫 ResizeParentToFit ,讓檢視的大小決定其框架視窗的大小。

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

參數

bShrinkOnly
要執行的重設大小類型。 如果適當的話,預設值 TRUE會壓縮框架視窗。 滾動條仍會顯示大型檢視或小型框架視窗。 的值 FALSE 會導致檢視一律完全調整框架視窗的大小。 這可能有點危險,因為框架視窗可能會太大,無法容納在多個檔介面 (MDI) 框架視窗或畫面內。

備註

這僅適用於 MDI 子框架視窗中的檢視。 在ResizeParentToFit衍生CScrollView類別的處理程式函式中使用OnInitialUpdate。 如需這個成員函式的範例,請參閱 CScrollView::SetScrollSizes

ResizeParentToFit 假設已設定檢視視窗的大小。 如果呼叫 時 ResizeParentToFit 尚未設定檢視視窗大小,您將會收到判斷提示。 若要確保這不會發生,請先進行下列呼叫,再呼叫 ResizeParentToFit

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

呼叫 ScrollToPosition 以卷動至檢視中的指定點。

void ScrollToPosition(POINT pt);

參數

pt
要捲動至的點,以邏輯單元表示。 成員 x 必須是正值(大於或等於0,最多等於檢視的總大小)。 y當對應模式為 MM_TEXT時,成員也是如此。 成員 y 在 以外的 MM_TEXT對應模式中為負數。

備註

檢視將會捲動,使這個點位於視窗的左上角。 如果檢視調整為符合,則不得呼叫此成員函式。

CScrollView::SetScaleToFitSize

SetScaleToFitSize當您要將檢視區大小自動調整為目前視窗大小時呼叫 。

void SetScaleToFitSize(SIZE sizeTotal);

參數

sizeTotal
要調整檢視的水準和垂直大小。 捲動檢視的大小是以邏輯單位來測量。 水準大小包含在成員中 cx 。 垂直大小包含在成員中 cycxcy 必須大於或等於 0。

備註

使用滾動條時,隨時只能顯示邏輯檢視的一部分。 但是,由於縮放到調整功能,檢視沒有滾動條,而且邏輯檢視會伸展或縮小,以完全符合視窗的工作區。 當視窗重設大小時,檢視會根據視窗的大小,以新的縮放比例繪製其數據。

您通常會在檢視成員函式的覆寫中放置 對的OnInitialUpdate呼叫SetScaleToFitSize。 如果您不想要自動調整,請改為呼叫 SetScrollSizes 成員函式。

SetScaleToFitSize 可用來實作「縮放調整」作業。 使用 SetScrollSizes 重新初始化捲動。

SetScaleToFitSize 假設已設定檢視視窗的大小。 如果呼叫 時 SetScaleToFitSize 尚未設定檢視視窗大小,您將會收到判斷提示。 若要確保這不會發生,請先進行下列呼叫,再呼叫 SetScaleToFitSize

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

即將更新檢視時呼叫 SetScrollSizes

void SetScrollSizes(
    int nMapMode,
    SIZE sizeTotal,
    const SIZE& sizePage = sizeDefault,
    const SIZE& sizeLine = sizeDefault);

參數

nMapMode
要為此檢視設定的對應模式。 可能的值包括:

對應模式 邏輯單元 正 y 軸延伸...
MM_TEXT 1 圖元 向下
MM_HIMETRIC 0.01 公厘 向上
MM_TWIPS 1/1440 in 向上
MM_HIENGLISH 0.001 in 向上
MM_LOMETRIC 0.1 公厘 向上
MM_LOENGLISH 0.01 in 向上

所有這些模式都是由 Windows 所定義。 兩種標準對應模式 MM_ISOTROPICMM_ANISOTROPIC不會用於 CScrollView。 類別庫提供 SetScaleToFitSize 將檢視調整為視窗大小的成員函式。 上述表格中的第三欄描述座標方向。

sizeTotal
卷動檢視的總大小。 成員 cx 包含水平範圍。 成員 cy 包含垂直範圍。 大小以邏輯單位表示。 cxcy 必須大於或等於 0。

sizePage
水平和垂直數量會隨著滾動條軸中的滑鼠按兩下而向各個方向捲動。 成員 cx 包含水平數量。 成員 cy 包含垂直數量。

sizeLine
水平和垂直數量會隨著滾動箭號中的滑鼠按兩下而向各個方向捲動。 成員 cx 包含水平數量。 成員 cy 包含垂直數量。

備註

在成員函式的 OnUpdate 覆寫中呼叫它,以在檔最初顯示或變更大小時調整卷動特性。

您通常會透過呼叫衍生文件類別所提供的文件成員函式,從 GetMyDocSize檢視的關聯檔取得大小資訊。 下列程式代碼顯示此方法:

CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());

或者,您可能有時需要設定固定大小,如下列程式代碼所示:

SetScrollSizes(nMapMode, CSize(100, 100));

您必須將對應模式設定為 或 以外的MM_ISOTROPICMM_ANISOTROPIC任何 Windows 對應模式。 如果您要使用不受限制的對應模式,請呼叫 SetScaleToFitSize 成員函式, SetScrollSizes而不是 。

範例

void CMyScrollView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/,
   CObject* /*pHint*/)
{
   // Implement a GetMyDocSize() member function in 
   // your document class; it returns a CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_LOENGLISH, pMyDoc->GetMyDocSize());
   ResizeParentToFit();   // Default bShrinkOnly argument
}

 

void CMyScrollView::OnInitialUpdate()
{
   CScrollView::OnInitialUpdate();

   // The GetMyDocSize() member function is implemented in 
   // your document class. The return type is CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_TEXT, pMyDoc->GetMyDocSize());
}

另請參閱

MFC 範例 DIBLOOK
CView
階層架構圖表
CSplitterWnd