共用方式為


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