스크롤 기능이 있는 A 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 |
스크롤 보기의 매핑 모드, 총 크기 및 가로 및 세로 스크롤 크기를 설정합니다. |
설명
메시지 매핑 OnHScroll 및 OnVScroll 멤버 함수를 재정의하여 파생된 클래스에서 CView 직접 표준 스크롤을 처리할 수 있습니다. 그러나 CScrollView 기능에 다음 기능을 CView 추가합니다.
창 및 뷰포트 크기 및 매핑 모드를 관리합니다.
스크롤 막대 메시지에 대한 응답으로 자동으로 스크롤됩니다.
키보드, 스크롤하지 않는 마우스 또는 IntelliMouse 휠의 메시지에 대한 응답으로 자동으로 스크롤됩니다.
키보드의 메시지에 대한 응답으로 자동으로 스크롤하려면 메시지를 추가하고 WM_KEYDOWN 테스트 VK_PREV 한 VK_DOWN후 호출SetScrollPos합니다.
메시지 매핑 OnMouseWheel 및 OnRegisteredMouseWheel 멤버 함수를 재정의하여 마우스 휠 스크롤을 직접 처리할 수 있습니다. 이러한 멤버 함수는 CScrollView휠 회전 메시지에 권장 WM_MOUSEWHEEL되는 동작을 지원합니다.
자동 스크롤을 활용하려면 .CScrollView CView 뷰를 처음 만들 때 문서 크기에 따라 스크롤 가능한 보기의 크기를 계산하려면 재정의 CView::OnInitialUpdate 에서 멤버 함수를 호출 SetScrollSizes 합니다CView::OnUpdate. (문서의 크기를 쿼리하려면 사용자 고유의 코드를 작성해야 합니다. 예를 들어 Scribble 샘플을 참조 하세요.)
멤버 함수에 대한 SetScrollSizes 호출은 뷰의 매핑 모드, 스크롤 보기의 총 차원 및 가로 및 세로로 스크롤할 크기를 설정합니다. 모든 크기는 논리 단위입니다. 보기의 논리적 크기는 일반적으로 문서에 저장된 데이터에서 계산되지만 경우에 따라 고정 크기를 지정할 수 있습니다. 두 방법의 예는 다음을 참조하세요 CScrollView::SetScrollSizes.
논리 단위로 가로 및 세로로 스크롤할 크기를 지정합니다. 기본적으로 사용자가 스크롤 상자 CScrollView 바깥쪽의 스크롤 막대 샤프트를 클릭하면 "페이지"를 스크롤합니다. 사용자가 스크롤 막대 CScrollView 의 양쪽 끝에서 스크롤 화살표를 클릭하면 "선"을 스크롤합니다. 기본적으로 페이지는 총 보기 크기의 1/10입니다. 줄은 페이지 크기의 1/10입니다. 멤버 함수에서 사용자 지정 크기를 전달하여 이러한 기본값을 재정의 SetScrollSizes 합니다. 예를 들어 가로 크기를 전체 크기의 너비의 일부 분수로 설정하고 세로 크기를 현재 글꼴의 선 높이로 설정할 수 있습니다.
스크롤하는 CScrollView 대신 보기의 크기를 현재 창 크기로 자동으로 조정할 수 있습니다. 이 모드에서는 보기에 스크롤 막대가 없으며 논리 뷰가 확장되거나 축소되어 창의 클라이언트 영역에 정확히 맞습니다. 이 크기 조정 기능을 사용하려면 를 호출 CScrollView::SetScaleToFitSize합니다. (둘 다 SetScaleToFitSize 호출하거나 SetScrollSizes둘 다 호출하지는 않습니다.)
OnDraw 파생 뷰 클래스의 멤버 함수를 호출 CScrollView 하기 전에 전달되는 디바이스 컨텍스트 개체의 CPaintDC 뷰포트 원본을 자동으로 조정합니다OnDraw.
스크롤 창 CScrollView 의 뷰포트 원본을 조정하려면 재정의합니다 CView::OnPrepareDC. 이 조정은 전달OnDraw되는 CScrollView 디바이스 컨텍스트에 대해 CPaintDC 자동으로 수행되지만 사용하는 다른 디바이스 컨텍스트(예: CClientDC.)에 대해 자신을 호출 CScrollView::OnPrepareDC 해야 합니다. 재정의하여 펜, 배경색 및 기타 그리기 특성을 설정할 수 있지만 기본 클래스를 호출하여 크기 조정을 수행할 수 CScrollView::OnPrepareDC 있습니다.
스크롤 막대는 다음과 같은 경우와 같이 뷰를 기준으로 세 곳에 표시할 수 있습니다.
Windows 스타일과
WS_VSCROLLWindows 스타일을 사용하여 보기에 표준 창 스타일 스크롤 막대를WS_HSCROLL설정할 수 있습니다.스크롤 막대 컨트롤은 보기를 포함하는 프레임에 추가할 수도 있습니다. 이 경우 프레임워크는 프레임 창에서 현재 활성 보기로 전달 및
WM_VSCROLL메시지를 전달합니다WM_HSCROLL.또한 프레임워크는 분할자 컨트롤에서
CSplitterWnd현재 활성 분할자 창(보기)으로 스크롤 메시지를 전달합니다. 공유 스크롤 막대를 사용하여CSplitterWnd배치하는 경우 개체는 자체 스크롤 막대를 만드는 대신 공유 스크롤 막대CScrollView를 사용합니다.
사용에 CScrollView대한 자세한 내용은 MFC에서 사용할 수 있는 문서/보기 아키텍처 및 파생 뷰 클래스를 참조하세요.
상속 계층 구조
CScrollView
요구 사항
머리글: afxwin.h
CScrollView::CheckScrollBars
스크롤 보기에 가로 막대와 세로 막대가 있는지 확인하려면 이 멤버 함수를 호출합니다.
void CheckScrollBars(
BOOL& bHasHorzBar,
BOOL& bHasVertBar) const;
매개 변수
bHasHorzBar
애플리케이션에 가로 스크롤 막대가 있음을 나타냅니다.
bHasVertBar
애플리케이션에 세로 스크롤 막대가 있음을 나타냅니다.
CScrollView::CScrollView
CScrollView 개체를 생성합니다.
CScrollView();
설명
스크롤 보기를 사용하려면 먼저 호출 SetScrollSizes SetScaleToFitSize 해야 합니다.
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;
Return Value
스크롤 상자의 가로 및 세로 위치(디바이스 단위)를 개체로 사용합니다 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;
Return Value
스크롤 상자의 가로 및 세로 위치(논리 단위)를 개체로 사용합니다 CPoint .
설명
이 좌표 쌍은 보기의 왼쪽 위 모서리가 스크롤된 문서의 위치에 해당합니다.
GetScrollPosition 는 논리 단위의 값을 반환합니다. 디바이스 단위를 원하는 경우 대신 사용합니다 GetDeviceScrollPosition .
CScrollView::GetTotalSize
스크롤 보기의 현재 가로 및 세로 크기를 검색하려면 호출 GetTotalSize 합니다.
CSize GetTotalSize() const;
Return Value
스크롤 보기의 총 크기(논리 단위)입니다. 가로 크기는 cx 반환 값의 멤버에 있습니다 CSize . 세로 크기가 멤버에 있습니다 cy .
CScrollView::ResizeParentToFit
보기의 크기가 프레임 창의 크기를 지정하도록 하려면 호출 ResizeParentToFit 합니다.
void ResizeParentToFit(BOOL bShrinkOnly = TRUE);
매개 변수
bShrinkOnly
수행할 크기 조정의 종류입니다. 기본값인 FALSE 으로 인해 뷰는 항상 프레임 창의 크기를 정확하게 조정합니다. 프레임 창이 너무 커서 MDI(여러 문서 인터페이스) 프레임 창이나 화면에 맞지 않을 수 있으므로 다소 위험할 수 있습니다.
설명
MDI 자식 프레임 창의 보기에만 권장됩니다. 파생 클래스의 OnInitialUpdate 처리기 함수에 CScrollView 사용합니다ResizeParentToFit. 이 멤버 함수의 예제는 다음을 참조하세요 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 포함됩니다. 세로 크기는 멤버에 cy 포함됩니다. cy 둘 다 cx 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.01mm | 상승 |
MM_TWIPS |
1/1440 in | 상승 |
MM_HIENGLISH |
0.001 in | 상승 |
MM_LOMETRIC |
0.1mm | 상승 |
MM_LOENGLISH |
0.01 in | 상승 |
이러한 모든 모드는 Windows에서 정의됩니다. 두 가지 표준 매핑 모드 및 MM_ISOTROPIC MM_ANISOTROPIC.에 사용되지 CScrollView않습니다. 클래스 라이브러리는 뷰를 SetScaleToFitSize 창 크기로 크기 조정하기 위한 멤버 함수를 제공합니다. 위 표의 열 3에서는 좌표 방향을 설명합니다.
sizeTotal
스크롤 보기의 총 크기입니다. 멤버에 cx 가로 익스텐트 포함 멤버에 cy 세로 범위가 포함됩니다. 크기는 논리 단위입니다. cy 둘 다 cx 0보다 크거나 같아야 합니다.
sizePage
스크롤 막대 샤프트에서 마우스 클릭에 대한 응답으로 각 방향으로 스크롤할 가로 및 세로 크기입니다. 멤버에 cx 가로 크기가 포함됩니다. 멤버에 cy 세로 크기가 포함됩니다.
sizeLine
스크롤 화살표에서 마우스 클릭에 대한 응답으로 각 방향으로 스크롤할 가로 및 세로 크기입니다. 멤버에 cx 가로 크기가 포함됩니다. 멤버에 cy 세로 크기가 포함됩니다.
설명
예를 들어 문서가 처음 표시되거나 크기가 변경될 때 스크롤 특성을 조정하려면 멤버 함수 재정의 OnUpdate 에서 호출합니다.
일반적으로 파생 문서 클래스와 함께 제공하는 문서 멤버 함수를 GetMyDocSize호출하여 뷰의 연결된 문서에서 크기 정보를 가져옵니다. 다음 코드에서는 이 방법을 보여 줍니다.
CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());
또는 다음 코드와 같이 고정 크기를 설정해야 하는 경우도 있습니다.
SetScrollSizes(nMapMode, CSize(100, 100));
매핑 모드를 제외한 MM_ISOTROPIC MM_ANISOTROPIC모든 Windows 매핑 모드로 설정해야 합니다. 제한되지 않은 매핑 모드를 사용하려면 대신 멤버 함수SetScrollSizes를 SetScaleToFitSize 호출합니다.
예시
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());
}