MFC

CView 클래스

디버그정 2008. 8. 30. 20:38

CView

 

CView 클래스는 사용자정의 클래스를 위한 기본적인 기능들을 제공한다. 뷰는 도큐먼트에 부착되어있어서 사용자와 도큐먼트간의 중계자로써의 역할을 한다: 뷰는 스크린 또는 프린터상에 도큐먼트의 형상을 보여주고, 사용자입력을 해석하여 도큐먼트에 전달한다.

 

뷰는 프레임 윈도우의 자식 윈도우이다. 하나 이상의 뷰는 스플릿터 윈도우의 경우처럼 하나의 프레임 윈도우를 공유할 있다. 클래스와 프레임 윈도우 클래스, 도큐먼트 클래스간의 관계는 CDocTemplate 객체에 의해 설립된다. 사용자가 새로운 윈도우를 열거나 기존의 것을 스플릿터로 나누면 프레임워크는 새로운 뷰를 생성하여 이것을 도큐먼트에 붙인다.

 

뷰는 오직 하나의 도큐먼트에만 붙을 있다. 그러나, 도큐먼트는 번에 여러 개의 뷰를 가질 있다. 예를 들면, 도큐먼트가 스플릿터 윈도우에서 보여지거나 또는 다중 문서 인터페이스(MDI) 응용 프로그램에서 다수의 차일드 윈도우에서 보여지는 경우를 있다. 여러분은 하나의 도큐먼트 타입에 여러 개의 다른 타입의 뷰를 가지는 응용 프로그램을 만들 있다. 워드 프로세서의 경우 문서 전체를 완전히 보여주는 뷰와 문서의 부분별 제목만을 보여주는 개요 뷰를 만들 있다. 이러한 여러 가지 타입의 뷰는 서로 다른 프레임 윈도우에 존재할 있고, 또는 스플릿터 윈도우를 사용하여 하나의 프레임 윈도우에 서로 다른 영역에 보여줄 수도 있다.

 

뷰는 메뉴, 툴바, 또는 스크롤 바의 명령뿐만 아니라 키보드 입력, 마우스 입력, 또는 드래그 드롭을 통한 입력과 같은 여러가지 형태의 입력을 다룰 책임이 있다. 뷰는 프레임 윈도우에서 전송된 명령을 넘겨받는다. 만약 뷰에서 주어진 명령을 처리하지 않으면, 이것은 뷰와 연결된 도큐먼트로 전송된다. 모든 명령들과 마찬가지로, 뷰는 메시지 맵을 통하여 메시지를 다룬다.

 

뷰는 도큐먼트의 자료를 저장하지 않은 수정하여 보여줄 책임이 있다. 도큐먼트는 자료에 대한 상세한 정보를 뷰에 제공한다. 뷰는 도큐먼트의 데이터 멤버를 직접 액세스할 있고, 또한 클래스에서 호출할 있도록 도큐먼트 클래스의 멤버 함수를 만들 있다.

 

도큐먼트의 데이터가 변경되면, 변화의 표시에 대한 책임이 있는 뷰는 문서에 대해 CDocument::UpdateAllViews 호출하여 모든 뷰에서 OnUpdate 멤버 함수를 호출하도록 한다. OnUpdate 기본 구현은 뷰의 전체 클라이언트 영역을 무효화한다. 도큐먼트에서 수정된 부분에 해당하는 클라이언트 영역만을 무효화하기위해 함수를 오버라이드할 있다.

 

CView 사용하기 위해서는, CView에서 클래스를 상속받아서 화면 출력을 담당하는 OnDraw 멤버 함수를 작성해야 한다. 또한 OnDraw 프린팅과 프린트 미리보기를 수행할 있다. 프레임워크는 도큐먼트의 미리보기와 프린팅을 위한 프린트 루프를 처리한다.

 

뷰는 CWnd::OnHScroll CWnd::OnVScroll 멤버 함수를 통해 스크롤- 메시지를 처리한다. 여러분은 이러한 함수내에서 스크롤- 메시지 처리를 구현할 있고, 또는 CView에서 상속받은 CScrollView 클래스를 사용하여 스크롤 기능을 처리할 있다.

 

CScrollView 이외에도 Microsoft Foundation Class Library CView에서 상속받은 9개의 클래스를 제공한다:

 

u  CCtrlView, 트리, 리스트, 리치 에디트 컨트롤을 가진 도큐먼트- 구조를 허용하는

u  CDaoRecordView, 다이얼로그 박스 컨트롤에 데이터베이스 레코드를 출력하는

u  CEditView, 간단한 멀티라인 텍스트 에디터를 제공하는 . 도큐먼트의 뷰로써만 아니라 다이얼로그 박스의 컨트롤로써 CEditView 객체를 사용할 있다.

u  CFormView, 다이얼로그 템플릿 리소스에 기반을 두고 다이얼로그 박스 컨트롤을 가지는 스크롤이 가능한

u  CListView, 리스트 컨트롤을 가지고 도큐먼트- 구조의 사용이 가능한

u  CRecordView, 다이얼로그 박스 컨트롤에 데이터베이스 레코드를 출력하는

u  CRichEditView, 리치 에디트 컨트롤을 가지고 도큐먼트- 구조의 사용이 가능한

u  CScrollView, 스크롤 기능을 자동으로 제공하는

u  CTreeView, 트리 컨트롤을 가지고 도큐먼트- 구조의 사용이 가능한

 

CView 클래스는 프레임워크에 의해 프린트 미리보기에서 사용되는 CPreviewView라는 이름의 파생클래스를 가진다. 클래스는 툴바, 한쪽 또는 두쪽 미리보기, 미리보기 이미지를 크게하는 확대와 같은 프린트 미리보기 윈도우에서 갖는 독특한 특징에 대한 지원을 제공한다. 만약 여러분만의 프린트 미리보기 인터페이스(예를 들어, 프린트 미리보기 화면에서 텍스트 편집 기능) 제공하기를 원하지 않는다면, CPreviewView 어떠한 멤버 함수도 오버라이드할 필요는 없다. CView 사용에 대한 자세한 정보는 Visual C++ Programmer's Guide에서 Document/View Architecture Topics and Printing 참조하라. 또한, 프린트 미리보기를 관용화하려면 Technical Note 30 참조하라.

 

#include <afxwin.h>

 

See Also   CWnd, CFrameWnd, CSplitterWnd, CDC, CDocTemplate, CDocument

 

 

 

 

 

CView Class Members

Operations

 

DoPreparePrinting

프린터 다이얼로그 박스를 보여주고 프린터 디바이스 컨텍스트를 생성한다. OnPreparePrinting 멤버 함수를 오버라이드 하려면 호출하라.

GetDocument

뷰와 연결된 도큐먼트를 반환한다.

 

OLE Overridables

 

OnDragEnter

아이템이 처음으로 뷰의 드래그 드롭 영역에 드래그될 호출된다.

OnDragLeave

드래그된 아이템이 뷰의 드래그 드롭 영역을 벗어날 호출된다.

OnDragOver

아이템이 뷰의 드래그 드롭 영역 위로 드래그될 호출된다.

OnDrop

아이템이 뷰의 드래그 드롭 영역으로 드래그되었을 호출된다. 디폴트 핸들러.

OnDropEx

아이템이 뷰의 드래그 드롭 영역으로 드래그되었을 호출된다. 핸들러.

OnDragScroll

커서가 윈도우의 스크롤 영역으로 드래그되었는지를 판단할 호출된다.

OnInitialUpdate

뷰가 처음으로 도큐먼트에 부가될 호출된다.

OnScrollBy

활성화된 in-place OLE 아이템을 포함하는 뷰가 스크롤될 호출된다.

OnScroll

OLE 아이템이 뷰의 경계선을 넘어 드래그될 호출된다.

 

Overridables

 

IsSelected

도큐먼트 아이템이 선택되었는지를 테스트한다. OLE 지원을 요구한다.

OnActivateView

뷰가 활성화되었을 호출된다.

OnActivateFrame

뷰를 포함하는 프레임 윈도우가 활성 또는 비활성 되었을 호출된다.

OnBeginPrinting

프린트 작업이 시작될 호출된다; 그래픽 디바이스 인터페이스(GDI) 리소스를 할당하기 위해 오버라이드한다.

OnDraw

도큐먼트의 이미지를 화면, 프린트, 프린트 미리보기로 표현할 호출된다. 반드시 코드 작성해야한다.

OnEndPrinting

프린트 작업이 끝날 호출된다; GDI 리소스를 해제하기위해 오버라이드한다.

OnEndPrintPreview

프린트 미리보기가 끝날 호출된다.

OnPrepareDC

화면 표시를 위해 OnDraw 멤버 함수를 호출하기 또는 프린트, 프린트 미리보기를 위해 OnPrint 멤버 함수를 호출하기 전에 호출된다.

OnPreparePrinting

도큐먼트가 프린트 또는 프린트 미리보기 전에 호출된다. Print 다이얼로그 박스를 초기화하려면 오버라이드 한다.

OnPrint

도큐먼트의 페이지를 프린트 또는 미리보기를 위해 호출한다.

OnUpdate

뷰에게 도큐먼트가 수정되었음을 알릴 호출된다.

 

Constructors

 

CView

CView 객체를 생성한다.

 

 

CView::DoPreparePrinting

BOOL DoPreparePrinting( CPrintInfo* pInfo );

 

Return Value

프린팅 또는 프린트 미리보기를 시작할 있으면 0 아닌 ; 그렇지 않으면 0.

 

Parameters

pInfo   현재 프린트 작업을 기술한 CPrintInfo 구조체의 포인터.

 

Remarks

프린트 다이얼로그 박스를 불러내어 프린터 디바이스 컨텍스트를 생성하기 위해 OnPreparePrinting 오버라이드 것으로부터 함수를 호출하라.

 

함수의 행동을 프린팅에서 호출되었는지 아니면 프린트 미리보기에서 호출되었는지(이것은 pInfo 파라미터의 m_bPreview 멤버에 의해 결정된다) 따라 결정된다. 만약 파일이 프린트중이면, 함수는 pInfo 가리키는 CPrintInfo 구조체에 있는 값들을 이용하여 프린트 다이얼로그 박스를 불러낸다; 사용자가 다이얼로그 박스를 닫은 , 함수는 사용자가 다이얼로그 박스에서 설정한 것을 기반으로 프린터 디바이스 컨텍스트를 생성하고 pInfo 파리미터를 통하여 디바이스 컨텍스트를 반환한다. 디바이스 컨텍스트는 도큐먼트를 출력하는데 사용된다.

 

만약 파일이 미리보기 중이라면, 함수는 현재 프린터 설정을 이용하여 프린터 디바이스 컨텍스트를 생성한다; 디바이스 컨텍스트는 미리보기 동안에 프린터를 시뮬레이션하는데 사용된다.

 

See Also   CPrintInfo, CView::OnPreparePrinting

 

CView::GetDocument

CDocument* GetDocument( ) const;

 

Return Value

뷰와 연관된 CDocument 객체의 포인터. 만약 뷰가 도큐먼트와 연관되어있지 않다면 NULL.

 

Remarks

뷰에 해당하는 도큐먼트의 포인터를 얻으려면 함수를 호출하라. 이것은 사용자가 도큐먼트의 멤버 함수를 사용할 있도록 해준다.

 

See Also   CDocument

 

CView::OnDragEnter

virtual DROPEFFECT OnDragEnter( COleDataObject* pDataObject, DWORD dwKeyState, CPoint point );

 

Return Value

열거형 타입의 DROPEFFECT로부터의 . 이것은 사용자가 객체를 지점에 드롭했을 발생할 있는 드롭의 타입을 지정한다. 드롭의 타입은 보통 dwKeyState 의해 나타내지는 현재 상태에 의존한다. DROPEFFECT 값에 대한 상태의 표준 맵핑은 다음과 같다:

 

l  DROPEFFECT_NONE   데이터 객체는 윈도우에 드롭될 없다.

l  MK_CONTROL | MK_SHIFT 위한 DROPEFFECT_LINK   객체와 서버 사이에 링크를 생성한다.

l  MK_CONTROL 위한 DROPEFFECT_COPY   드롭될 객체의 복사본을 생성한다.

l  MK_ALT 위한 DROPEFFECT_MOVE   드롭될 객체의 본사본을 생성하고 원본 객체를 삭제한다. 뷰가 데이터 객체를 받아들일 있을 , 이것이 전형적인 기본 드롭 효과이다.

 

자세한 정보는 MFC Advanced Concepts sample OCLIENT 참조하라.

 

Parameters

pDataObject   뷰의 드롭 영역안으로 드래그되고 있는 COleDataObject 객체의 포인터.

dwKeyState   수정자 키의 상태를 저장한다. 이것은 다음 것들의 조합으로 이루어진다: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTON, 그리고 MK_RBUTTON.

point   뷰의 클라이언트 영역에 대한 현재 마우스의 상대적 위치.

 

Remarks

드롭 타겟 윈도우의 스크롤되지 않은 영역에 마우스가 처음 들어올 프레임윈도우에 의해 호출된다. 기본 구현은 아무것도 행하지 않으며 DROPEFFECT_NONE 반환한다.

 

나중에 OnDragOver 멤버 함수를 호출하는 것에 대비하려면 함수를 오버라이드하라. 데이터 객체에서 요구되는 어떤 데이터도 OnDragOver 멤버 함수에서 다시 사용될 때를 대비하여 지금 얻어야 한다. 뷰는 사용자에게 비주얼한 피드백을 때마다 항상 갱신되어야만 한다. 보다 자세한 정보는 Visual C++ Programmer's Guide에서 Drag and Drop: Implementing a Drop Target 항목을 참조하라.

 

See Also   CView::OnDragOver, CView::OnDrop, CView::OnDropEx, CView::OnDragLeave, COleDropTarget::OnDragEnter

 

CView::OnDragLeave

virtual void OnDragLeave( );

 

Remarks

마우스가 드래그하는 동안 윈도우의 유효한 드롭 영역 밖으로 나갈 프레임워크에 의해 호출된다.

 

만약 현재 뷰가 OnDragEnter 또는 OnDragOver 동안에 행해진 작업(예를 들어, 객체가 드래그되거나 드롭되는 동안에 사용자에게 비주얼한 피드백을 제거하는 ) 새롭게할 필요가 있으면 함수를 오버라이드하라.

 

See Also   CView::OnDragEnter, CView::OnDragOver, CView::OnScroll, COleDropTarget::OnDragLeave

 

CView::OnDragOver

virtual DROPEFFECT OnDragOver( COleDataObject* pDataObject, DWORD dwKeyState, CPoint point );

 

Return Value

열거형 타입의 DROPEFFECT로부터의 . 이것은 사용자가 객체를 드롭하였을 일어나는 드롭의 타입을 지정한다. 드롭의 타입은 종종 dwKeyState 의해 지정되는 현재 상태에 의존한다. 키상태를 DROPEFFECT 값에 맵핑하는 표준 방법은 다음과 같다:

 

l  DROPEFFECT_NONE   데이터 객체는 윈도우에 드롭할 없다.

l  MK_CONTROL | MK_SHIFT 위한 DROPEFFECT_LINK   객체와 이것의 서버사이에 연결을 생성한다.

l  MK_CONTROL 위한 DROPEFFECT_COPY   드롭된 객체의 복사본을 생성한다.

l  MK_ALT 위한 DROPEFFECT_MOVE   드롭된 객체의 복사본을 생성하고 원본 객체를 삭제한다. 이것은 뷰가 데이터 객체를 받아들을 있을 , 전형적인 디폴트 드롭 효과이다.

 

보다 자세한 정보는 MFC Advanced Concepts sample OCLIENT 참조하라.

 

Parameters

pDataObject   드롭 목표로 드롭되는 COleDataObject 객체의 포인터.

dwKeyState   수정자 키의 상태를 저장한다. 이것은 다음 것들의 조합으로 이루어진다: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTON, 그리고 MK_RBUTTON.

point   뷰의 클라이언트 영역에 대한 현재 마우스의 상대적 위치.

 

Remarks

마우스가 드래그하면서 드롭 목표 윈도우 위로 움직일 프레임워크에 의해 호출된다. 기본 구현은 아무것도 행하지 않으며 DROPEFFECT_NONE 반환한다.

 

드래그 동작을 하는 동안에 사용자에게 비주얼한  피드백을 주려면 함수를 오버라이드하라. 함수는 연속적으로 호출되므로, 가능한 최대로 최적화된 코드를 담고 있어야 한다. 보다 자세한 정보는 Visual C++ Programmer's Guide에서 Drag and Drop: Implementing a Drop Target 관한 항목을 참조하라.

 

See Also   CView::OnDragEnter, CView::OnDrop, CView::OnDropEx, CView::OnDragLeave, COleDropTarget::OnDragOver

 

CView::OnDrop

virtual BOOL OnDrop( COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point );

 

Return Value

드롭이 성공하면 0 아닌 ; 그렇지 않으면 0.

 

Parameters

pDataObject   드롭 목표 지점으로 드롭되는 COldDataObject 포인터.

dropEffect   사용자가 필요로하는 드롭 효과.

 

l  DROPEFFECT_COPY   드롭되는 객체의 복사본을 생성한다.

l  DROPEFFECT_MOVE   현재 마우스 위치로 데이터 객체를 이동시킨다.

l  DROPEFFECT_LINK   데이터 객체와 현재 서버 사이에 연결을 생성한다.

 

point   뷰의 클라이언트 영역에 대한 현재 마우스의 상대적 좌표.

 

Remarks

사용자가 유효한 드롭 목표 지점으로 데이터를 놓았을 프레임워크에 의해 호출된다. 기본 구현은 아무 것도 행하지 않고, FALSE 반환한다.

 

뷰의 클라이언트 영역으로OLE 드롭 효과를 구현하려면 함수를 오버라이드하라. 데이터 객체는 pDataObject 통해 클립보드의 데이터 타입과 특정 위치에 드롭된 데이터를 검사할 있다.

 

주의   클래스안에 OnDropEx 오버라이드하였다면 프레임워크는 함수를 호출하지 않는다.

 

See Also   CView::OnDragEnter, CView::OnDragOver, CView::OnDropEx, CView::OnDragLeave, COleDropTarget::OnDrop

 

CView::OnDropEx

virtual DROPEFFECT OnDropEx( COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point );

 

Return Value

point 의해 지정된 위치에 드롭을 시도한 결과로 나타나는 드롭 효과. 이것은 반드시 dropEffectList 의해 지정된 값들 중의 하나이다. 드롭 효과는 Remark 부분에서 다룬다.

 

Parameters

pDataObject   드롭 타겟안으로 드롭되는 COleDataObject 포인터.

dropDefault   사용자가 선택한 현재 상태에 근거한 디폴트 드롭 동작의 효과. DROPEFFECT_NONE 있다. 드롭 효과는 Remarks 부분에서 다룬다.

dropList   드롭 소스가 지원하는 드롭 효과의 리스트. 드롭 효과 값은 비트 연산 OR(|) 조합으로 이루어진다. 드롭 효과는 Remarks 부분에서 다룬다.

point   뷰의 클라이언트 영역에 대한 현재 마우스의 상대적 위치.

 

Remarks

사용자가 데이터 객체를 유효한 드롭 타겟으로 놓은 프레임워크에 의해 호출된다. 기본 구현은 아무것도 하지 않으며 프레임워크가 OnDrop 핸들러를 호출하도록 쓰레기값(-1) 반환한다.

 

오른쪽 버튼의 드래그 드롭의 효과를 구현하려면 함수를 오버라이드하라. 전형적인 오른쪽 버튼의 드래그 드롭은 오른쪽 마우스 버튼을 놓을 선택 메뉴를 나타낸다.

 

OnDropEx 오버라이드는 오른쪽 마우스 버튼을 검색해야 한다. 여러분은 GetKeyState 사용할 있고, 또는 OnDragEnter 핸들러에서 오른쪽 마우스 버튼의 상태를 저장할 있다.

 

l  만약 오른쪽 마우스 버튼이 눌려지면, 오버라이드한 함수는 드롭 소스에 의해 지원되는 드롭 효과를 제공하기위해 팝업 메뉴를 보여주어야 한다..

¡  드롭 소스가 지원하는 드롭 효과를 결정하기위해 dropList 검사한다. 팝업 메뉴에서만 이러한 동작 가능하다.

¡  dropDefault 근거하여 디폴트 동작을 설정하려면 SetMenuDefaultItem 사용하라.

¡  마지막으로, 팝업 메뉴에서 사용자의 선택에 따라 동작을 실행하라.

l  만약 오른쪽 마우스 버튼이 눌려지지 않았다면, 오버라이드한 함수는 표준 드롭 요청으로써 이러한 작업을 수행한다. dropDeafult 명시된 드롭 효과를 사용하라. 다른 방법으로는, OnDrop 이러한 드롭 동작을 다루었다는 것을 나타내는 쓰레기값(-1) 반환하도록 오버라이드할 있다.

 

특정 위치에 드롭된 데이터와 클립보드 데이터 포맷을 위해 COleDataObject 검사하려면 pDataObject 사용하라.

 

드롭 효과는 드롭 연산과 관련된 동작을 보여준다. 아래와 같은 드롭 효과가 있다:

 

l  DROPEFFECT_NONE   드롭을 없다.

l  DROPEFFECT_COPY   복사 연산이 실행될 것이다.

l  DROPEFFECT_MOVE   옮기기 연산이 실행될 것이다.

l  DROPEFFECT_LINK   원래 데이터와 드롭된 데이터 사이에 연결(바로가기) 만든다.

l  DROPEFFECT_SCROLL   목표 지점에서 드래그 스크롤 동작이 일어났거나 일어나려한다는 것을 나타낸다.

 

디폴트 메뉴 명령 설정에 대한 자세한 정보는, CMenu::GetSafeHmenu Win32 documentation에서 SetMenuDefaultItem 참조하라.

 

See Also   CView::OnDragEnter, CView::OnDragOver, CView::OnDrop, CView::OnDragLeave, COleDropTarget::OnDropEx

 

CView::OnDragScroll

virtual DROPEFFECT OnDragScroll( DWORD dwKeyState, CPoint point );

 

Return Value

열거형 DROPEFFECT으로부터의 . 위치에 사용자가 객체를 드롭시켰을 일어나는 드롭의 형태를 지시한다. 드롭의 형태는 보통 dwKeyState 지정되는 현재 상태에 의존한다. 상태를 DROPEFFECT 값에 반영하는 표준적인 값들은 다음과 같다:

 

l  DROPEFFECT_NONE   데이터 객체는 윈도우에 드롭될 없다.

l  MK_CONTROL | MK_SHIFT 위한 DROPEFFECT_LINK   객체와 서버 사이에 연결을 생성한다.

l  MK_CONTROL 위한 DROPEFFECT_COPY   드롭될 객체의 복사본을 생성한다.

l  MK_ALT 위한 DROPEFFECT_MOVE   드롭될 객체의 본사본을 생성하고 원본 객체를 삭제한다.

l  DROPEFFECT_SCROLL   드래그 스크롤 동작이 타겟 뷰에서 일어났거나 일어나려함을 알린다.

 

보다 자세한 정보는 MFC Advanced Concepts sample OCLIENT 참조하라.

 

Parameters

dwKeyState   수정자 키의 상태를 저장한다. 이것은 다음 것들의 조합으로 이루어진다: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTON, 그리고 MK_RBUTTON.

point   화면에 대한 마우스 커서의 상대적 위치(픽셀 단위)

 

Remarks

point 스크롤 영역에 있는지를 검사하기위해 OnDragEnter 또는 OnDragOver 호출하기 전에 프레임워크에의해 호출된다. 이벤트에 특별한 행동을 부여하고 싶다면 함수를 오버라이드하라. 기본 구현은 커서가 윈도우의 경계 안쪽인 디폴트 스크롤 영역으로 드래그되어 들어올 , 윈도우를 자동으로 스크롤한다. 보다 자세한 정보는, Visual C++ Programmer's Guide에서 Drag and Drop: Implementing a Drop Target 항목을 참조하라.

 

See Also   CView::OnDragEnter, CView::OnDragOver, CView::OnDrop, CView::OnDragLeave, COleDropTarget::OnDragScroll

 

CView::OnInitialUpdate

virtual void OnInitialUpdate( );

 

Remarks

뷰가 도큐먼트에 처음으로 부가되고, 아직 처음으로 디스플레이 되기 전에 프레임워크에 의해 호출된다. 함수의 디폴트 구현은 아무런 hint 정보없이 OnUpdate 멤버 함수를 호출한다(, lHint 파라미터에 디폴트로 0 값을, pHint 파라미터에는 NULL 사용). 도큐먼트에 관한 정보를 필요로 하는 번의 초기화를 하려면 함수를 오버라이드하라. 예를 들어, 만약 어플리케이션이 고정된 크기의 도큐먼트를 가진다면, 도큐먼트의 크기에 근거하여 뷰의 스크롤 제한을 초기화할 있다. 만약, 어플리케이션이 크기가 변하는 도큐먼트를 지원한다면, 도큐먼트가 변할때만다 OnUpdate 함수를 사용하여 스크롤 제한을 갱신하라.

 

See Also   CView::OnUpdate

 

CView::OnScrollBy

BOOL CView::OnScrollBy( CSize sizeScroll, BOOL bDoScroll = TRUE );

 

Return Value

만약 뷰가 스크롤 있으면 0 아닌 ; 그렇지 않으면 0.

 

Parameters

sizeScroll   수평과 수직 방향으로 스크롤되는 픽셀 .

bDoScroll   뷰의 스크롤이 일어났는지를 결정한다. 만약 TRUE이면, 스크롤이 수행된다; FALSE이면 스크롤이 되지 않는다.

 

Remarks

사용자가 OLE 아이템을 현재 테두리를 넘어서서 드래그한다든지 또는 수평 수직 방향 스크롤바를 조작한다든지 해서 문서의 현재 화면 너머의 영역을 보려할 프레임워크에 의해 호출된다. 디폴트 구현은 아무것도 되어있지 않다. 상속받은 클래스에서 함수는 뷰가 사용자가 요구한 방향으로 스크롤이 가능한지를 판단한 , 필요하다면 새로운 영역을 갱신한다. 함수는 실제 스크롤 요구를 수행할 CWnd::OnHScroll CWnd::OnVScroll 의해 자동으로 호출된다.

 

CView::OnScroll

virtual BOOL CView::OnScroll( UINT nScrollCode, UINT nPos, BOOL bDoScroll = TRUE );

 

Return Value

만약 bDoScroll TRUE이고 뷰가 실제로 스크롤되었다면, 반환값은 0 아닌 ; 그렇지 않으면 0. 만약 bDoScroll FALSE이면, 실제로 스크롤을 하지 않았더라도 bDoScroll TRUE였을 때의 값을 반환한다.

 

Parameters

nScrollCode   사용자의 스크롤 요구를 나타내는 스크롤 코드. 이파라미터는 부분으로 구성된다: 수평 방향 스크롤의 타입을 결정하는 하위 바이트와 수직 방향 스크롤의 타입을 결정하는 상위 바이트:

 

l  SB_BOTTOM   바닥까지 스크롤.

l  SB_LINEDOWN   아래로 스크롤.

l  SB_LINEUP     아래로 스크롤.

l  SB_PAGEDOWN   페이지 아래로 스크롤.

l  SB_PAGEUP   페이지 위로 스크롤.

l  SB_THUMBTRACK   스클로 박스를 지정된 위치로 드래그. 현재 위치는 nPos 지정된다.

l  SB_TOP   위로 스크롤.

 

nPos   만약 스크롤 코드가 SB_THUMBTRACK 경우 스크롤 박스의 현재 위치를 담고 있다; 그렇지 않은 경우에는 사용되지 않는다. 초기 스크롤 범위에 의존하여, nPos 음수일 있고, 필요하면 int형으로 형변환을 시켜주어야 한다.

bDoScroll   실제로 지정된 스크롤이 일어났는지를 결정환다. 만약 TRUE이면, 스크롤이 실행되어야 한다; 만약 FALSE이면, 스크롤은 일어나지 않는다.

 

Remarks

스크롤이 가능한지를 판단하기위해 프레임워크에 의해 호출된다.

 

한가지 경우로는, 함수는 뷰가 스크롤 메시지를 받았을 bDoScroll TRUE 설정된 채로 프레임워크에 의해 호출된다. 이러한 경우에는 반드시 뷰를 스크롤 시켜주어야 한다. 다른 경우에서는, 함수는 스크롤이 실제로 일어나기 전에  OLE 아이템이 드롭 대상 자동 스크롤 영역안에 드래그 bDoScroll FALSE 설정된 채로 호출된다. 이러한 경우, 뷰를 스크롤 해서는 안된다.

 

See Also   CView::OnScrollBy, COleClientItem

 

CView::OnActivateView

virtual void OnActivateView( BOOL bActivate, CView* pActivateView, CView* pDeactiveView );

 

Parameters

bActivate   뷰가 활성화되었는지 비활성화되었는지를 가리킨다.

pActivateView   활성화되는 객체의 포인터.

pDeactiveView   비활성화되는 객체의 포인터.

 

Remarks

뷰가 활성화되거나 비활성화될 프레임워크에 의해 호출된다. 함수의 디폴트 구현은 활성화되는 뷰에 포커스를 주는 것이다. 만약 뷰가 활성화 또는 비활성화될 특정 작업을 하고 싶다면 함수를 오버라이드하라. 예를 들어, 만약 활성 뷰와 비활성 뷰를 구분하기 위해 특별한 비주얼한 표시를 하고 싶다면, bActivate 파라미터를 살펴본 뷰의 외양을 갱신하면 것이다.

 

만약 어플리케이션의 메인 프레임 윈도우가 활성화 뷰의 변화없이 활성화된다면, pActivateView pDeactiveView 파라미터는 동일한 뷰를 가리킨다(예를 들어, 하나의 어플리케이션 사이에서 이쪽 뷰에서 다른쪽 뷰로 포커스가 이동한다든지 또는 MDI 차일드 윈도우 사이에서 포커스가 이동하는 경우가 아니라, 어플리케이션 사이에서 포커스가 옮겨온 경우.). 필요한 경우, 뷰는 팔레트를 다시 인식시킨다.

 

이러한 파라미터는 CFrameWnd::SetActiveView 호출되었을 CFrameWnd::GetActiveView 반환할 뷰와는 다르다. 이것은 대부분 스플릿트 윈도우에서 발생한다.

 

See Also   CWnd::OnActivate, CFrameWnd::SetActiveView, CFrameWnd::GetActiveView

 

CView::OnActivateFrame

virtual void OnActivateFrame( UINT nState, CFrameWnd* pFrameWnd );

 

Parameters

nState   프레임 윈도우가 활성화 또는 비활성화 되었는지를 나타낸다. 다음과 같은 값을 가질 있다:

 

l  WA_INACTIVE   프레임 윈도우가 비활성화 되었다.

l  WA_ACTIVE   마우스 클릭이 아닌 방법으로 프레임 윈도우가 활성화 되었다(예를 들어, 윈도우를 선택하기 위해 키보드를 사용한 경우).

l  WA_CLICKACTIVE   마우스 클릭에 의해 프레임 윈도우가 활성화 되었다.

 

pFrameWnd   활성화되어야 프레임 윈도우에 대한 포인터.

 

Remarks

뷰를 담고 있는 프레임 윈도우가 활성화 또는 비활성화 되었을 프레임워크에 의해 호출된다. 뷰와 관련된 프레임 윈도우가 활성화 또는 비활성화 되었을 특정 동작을 수행하려면 함수를 오버라이드하라. 예를 들어, CFormView 컨트롤들의 포커스를 저장하거나 회복시킬 있다.

 

See Also   CWnd::OnActivate, CFormView

 

CView::OnBeginPrinting

virtual void OnBeginPrinting( CDC* pDC, CPrintInfo* pInfo );

 

Parameters

pDC   프린터 디바이스 컨텍스트의 포인터.

pInfo    현재 프린터 작업을 기술하는 CPrintInfo 구조체의 포인터.

 

Remarks

OnPreparePrinting 호출되고 , 프린트와 프린트 미리보기 작업에 앞서서 프레임워크에 의해 호출된다. 함수의 기본 구현은 아무런 일도 하지 않는다. 프린트를 위해 특별한 GDI 리소스( 또는 폰트와 같은) 할당하려면 함수를 오버라이드하라. GDI 객체를 사용하는 각각의 페이지에 대한 OnPaint 멤버 함수에서 디바이스 컨텍스트로 보낼 GDI 객체를 선택한다. 화면 표시와 프린트를 수행하기 위해 동일한 객체를 사용한다면, 각각의 디스플레이에 필요한 GDI 리소스에 대해 각각의 변수를 사용하라; 이것은 프린트를 하는 동안에 화면을 갱신할 있도록 한다.

 

프린터 디바이스 컨텍스트의 특성에 의존하는 초기화 작업을 수행할 때도 함수를 사용할 있다. 예를 들어, 도큐먼트를 프린트하는데 필요한 용지의 수는 사용자가 프린트 다이얼로그 박스에서 사용자가 지정한 설정(용지 길이 ) 의존한다. 이러한 경우, 일반적으로 사용하는 방법인, OnPreparePrinting 멤버 함수 내에 도큐먼트 길이를 저장할 없다; 이러한 경우 프린터 디바이스 컨텍스트가 다이얼로그 박스 설정에 근거하여 생성될 때까지 기다려야 한다. OnBeginPrinting 프린터 디바이스 컨텍스트를 나타내는 CDC 객체에 엑세스할 있게 해주는 처음으로 오버라이드 있는 함수이고, 그럼으로써 함수로부터 도큐먼트의 길이를 설정할 있다. 만약 도큐먼트 길이가 때에 지정되지 않았다면, 스크롤 바는 프린트 미리보기 동안에 나타나지 않는다.

 

See Also   CView::OnEndPrinting, CView::OnPreparePrinting, CView::OnPrint

 

CView::OnDraw

virtual void OnDraw( CDC* pDC ) = 0;

 

Parameters

pDC   도큐먼트의 이미지를 표현하기 위해 사용되는 디바이스 컨텍스트의 포인터.

 

Remarks

도큐먼트의 이미지를 표현하기 위해 프레임워크에 의해 호출된다. 프레임워크는 화면 출력, 프린트, 프린트 미리보기를 수행하기위해 함수를 호출하고, 이것은 각각의 경우에 다른 디바이스 컨텍스트를 넘긴다. 여기에는 아무런 기본 구현이 없다.

 

도큐먼트를 뷰로 디스플레이하려면 반드시 함수를 오버라이드해야 한다. pDC 파라미터가 가리키는 CDC 객체를 이용하여 그래픽 디바이스 인터페이스(GDI) 만들 있다. 그리기를 하기 전에 , 폰트등과 같은 GDI 리소스를 선택할 있고, 그리기 후에 그것들을 다시 원래 상태로 돌려놓을 있다. 종종 그리기 코드는 디바이스에 독립적일 있다; , 어떤 종류의 디바이스가 이미지를 디스플레이하는 지에 대한 정보가 필요가 없다.

 

그리기를 최적화하려면, 주어진 사각형이 그려져야하는 지를 판단하기 위해 디바이스 컨텍스트의 멤버 함수 RectVisible 호출하라. 일반적인 화면 출력과 프린트를 구별할 필요가 있다면, 디바이스 컨텍스트의 IsPrinting 멤버 함수를 사용하라.

 

See Also   CDC::IsPrinting, CDC::RectVisible, CView::OnPrint, CWnd::OnCreate, CWnd::OnDestroy, CWnd::PostNcDestroy

 

CView::OnEndPrinting

virtual void OnEndPrinting( CDC* pDC, CPrintInfo* pInfo );

 

Parameters

pDC   프린터 디바이스 컨텍스트의 포인터.

pInfo   현재 프린트 작업을 기술하는 CPrintInfo 구조체의 포인터.

 

Remarks

문서를 프린트 또는 미리보기한 후에 프레임워크에 의해 호출된다. 기본 구현은 아무런 일도 하지 않는다. OnBeginPrinting멤버 함수에서 할당한 GDI 리소스를 해제하려면 함수를 오버라이드하라.

 

See Also   CView::OnBeginPrinting

 

CView::OnEndPrintPreview

virtual void OnEndPrintPreview( CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView );

 

Parameters

pDC   프린터 디바이스 컨텍스트의 포인터.

pInfo    현재 프린터 작업을 기술하는 CPrintInfo 구조체의 포인터.

point   미리보기 모드에서 마지막으로 보여지는 페이지에 있는 .

pView   미리보기에서 사용되는 객체의 포인터.

 

Remarks

사용자가 프린트 미리보기 모드에서 빠져나갈 프레임워크에 의해 호출된다. 함수의 기본 구현은 OnEndPrinting 멤버 함수를 호출하고, 프린트 미리보기가 시작하기 전의 상태로 메인 프레임 윈도우를 복구한다. 미리보기 모드가 끝날 특정 동작을 수행하려면 함수를 오버라이드 하라. 예를 들어, 미리보기 모드와 일반 디스플레이 모드를 서로 번갈아 도큐먼트에서 사용자의 위치를 저장하기를 원한다면, pInfo 파라미터가 가리키는 CPrintInfo 구조체의 멤버인 m_nCurPage point 파라미터에 의해 기술되는 위치로 스크롤할 있다.

 

항상, 전형적으로 함수의 끝에서, 오버라이드된 함수로부터 기본 클래스의 OnEndPrintPreview 호출하라.

 

See Also   CPrintInfo, CView::OnEndPrinting

 

CView::OnPrepareDC

virtual void OnPrepareDC( CDC* pDC, CPrintInfo* pInfo = NULL );

 

Parameters

pDC   도큐먼트의 이미지를 표현하기위해 사용되는 디바이스 컨텍스트의 포인터.

pInfo   프린트나 프린트 미리보기를 위해 OnPrepareDC 호출되었다면 현재 프린트 작업을 표시하는 CPrintInfo 구조체를 가리킨다. , m_nCurPage 프린트될 페이지를 지정한다. 파라미터는 OnPrepareDC 화면 디스플레이를 위해 호출되었다면 NULL이다.

 

Remarks

OnDraw 멤버 함수가 호출되기 전에 화면 표시를 위해, 또한 OnPrint 멤버 함수가 호출되기 전에 프린트나 프린트 미리보기하는 동안 프레임워크에 의해 호출된다. 만약 함수가 화면 표시를 위해 호출되었다면, 기본 구현은 아무런 일도 하지 않는다. 그러나, 함수는 상속받은 클래스에서는, 예를 들어 CScrollView, 디바이스 컨텍스트의 특성에 맞게 오버라이드 되다; 따라서, 여러분이 오버라이드할 시작 부분에 기본 클래스의 동작을 호출해야만 한다.

만약 함수가 프린트를 위해 호출되었다면, 기본 구현은 pInfo 파라미터에 저장되어있는 정보를 검사한다. 만약 도큐먼트의 길이가 지정되어있지 않다면, OnPrepareDC 도큐먼트가 페이지 길이로 가정하여 페이지가 출력되면 프린트를 종료한다. 함수는 프린트 루프를 구조체의 m_bContinuePrinting 멤버를 FALSE 설정함으로써 프린트 루프를 중단시킨다.

 

OnPrepareDC 다음 이유중 하나로 오버라이드하라:

 

l  특정 페이에 필요한 디바이스 컨텍스트의 속성을 조정하기 위해. 예를 들어, 만약 맵핑 모드나 디바이스 컨텍스트의 다른 특성을 설정할 필요가 있다면, 함수 내에서 행하라.

l  프린트 시간 페이지 매김을 수행하기위해. 일반적으로 OnPreparePrinting 멤버 함수를 사용하여 프린트가 시작할 도큐먼트의 길이를 지정한다. 그러나, 만약 사전에 도큐먼트의 길이를 알지 못하면(예를 들어, 데이터베이스에 결정되지 않은 수의 레코드를 출력할 ), 프린트 되는 동안 도큐먼트가 끝까지 왔는지를 검사하려면 OnPreparePrinting 오버라이드 하라. 프린트될 도큐먼트가 이상 없다면, CPrintInfo구조체의 m_bContinuePrinting 멤버를 FALSE 설정하라.

l  페이지 단위로 넘어가는 프린터에게 이스케이프(escape) 코드를 보내기 위해. OnPrepareDC에서 이스케이프 코드를 보내려면, pDC 파라미터의 Escape 멤버 함수를 호출하라.

 

여러분의 오버라이드 코드의 시작 부분에 기본 클래스의 OnPrepareDC 호출하라.

 

See Also   CDC::Escape, CPrintInfo, CView::OnBeginPrinting, CView::OnDraw, CView::OnPreparePrinting, CView::OnPrint

 

CView::OnPreparePrinting

virtual BOOL OnPreparePrinting( CPrintInfo* pInfo );

 

Return Value

프린트되고 있다면 0 아닌 ; 만약 프린트 작업이 취소됐으면 0.

 

Parameters

pInfo   현재 프린트 작업을 기술하는 CPrintInfo 구조체의 포인터.

 

Remarks

도큐먼트를 프린트하거나 미리보기하기 전에 프레임워크에 의해 호출된다. 기본 구현은 아무 것도 하지 않는다.

 

프린트와 미리보기를 가능하게 하려면 함수를 오버라이드해야만 한다. DoPreparePrinting멤버 함수를 호출하고, 여기에 pInfo 파라미터를 넘겨준 , 이것의 반환값을 반환하라; DoPreparePrinting 프린트 다이얼로그 박스를 보여주고 프린터 디바이스 컨텍스트를 생성한다. 만약 디폴트 값이 아닌 다른 값으로 프린트 다이얼로그 박스를 초기화하려면, pInfo 멤버에 값을 할당하라. 예를 들어, 도큐먼트의 길이를 알고 있다면, DoPreparePrinting 호출하기 전에 pInfo SetMaxPage 멤버 함수에 값을 넘겨라. 값은 프린트 다이얼로그 박스의 범위 부분에 있는 To: 부분에 표시된다.

 

DoPreparePrinting 미리보기 작업에 대한 프린트 다이얼로그 박스를 보여주지 않는다. 만약 프린트 작업에 대한 프린트 다이얼로그 박스를 생략하고 싶다면, pInfo m_bPreview 멤버를 FALSE 되어있는지를 체크하고, 이것을 TRUE 설정하여 DoPreparePrinting 넘긴다. 끝난 후에는 다시 FALSE 재설정한다.

 

프린터 디바이스 컨텍스트를 나타내는 CDC 객체에 액세스하길 요구하는 초기화를 해야만 한다면(예를 들어, 도큐먼트의 길이를 지정하기 전에 페이지 크기를 필요가 있다면), OnBeginPrinting 멤버 함수를 오버라이드하라.

 

만약 pInfo 파라미터의 m_nNumPreviewPages 또는 m_strPageDesc 값을 설정하려면, DoPreparePrinting 호출한 후에 하라. DoPreparePrinting멤버 함수는 m_nNumPreviewPages 어플리케이션의 .INI 파일에서 발견된 값으로 설정하고 m_strPageDesc 디폴트 값으로 설정한다.

 

Example

 

아래는 여러분이 시작 파일들을 생성할 프린트 옵션을 선택하였을 경우 AppWizard 만드는 OnPreparePrinting 오버라이드이다. 만약 프린트 다이얼로그 박스의 초기화가 필요없다면 이것만으로도 충분하다.

 

BOOL CMyView::OnPreparePrinting( CPrintInfo *pInfo )

{

    return DoPreparePrinting( pInfo );

}

 

See Also   CPrintInfo, CView::DoPreparePrinting, CView::OnBeginPrinting, CView::OnPrepareDC, CView::OnPrint

 

CView::OnPrint

virtual void OnPrint( CDC* pDC, CPrintInfo* pInfo );

 

Parameters

pDC   프린터 디바이스 컨텍스트의 포인터.

pInfo    현재 프린터 작업을 기술하는 CPrintInfo 구조체의 포인터.

 

Remarks

도큐먼트의 페이지를 미리보거나 또는 프린트를 하기 위해 프레임워크에 의해 호출된다. 프린트될 페이지에 대하여, 프레임워크는 OnPrepareDC 멤버 함수를 호출한 뒤에 곧바로 함수를 호출한다. 프린트될 페이지는 pInfo 가리키는 CPrintInfo 구조체의 m_nCurPage 멤버에 의해 지정된다. 디폴트 구현은 OnDraw 멤버 함수를 호출하고 이것에 프린터 디바이스 컨텍스트를 넘겨주는 일을 한다.

 

다음과 같은 이유라면 함수를 오버라이드하라:

 

l  다중 페이지 도큐먼트를 프린트하기 위해. 현재 프린트중인 페이지에 상응하는 도큐먼트의 일부만을 표현한다. 만약 랜더링을 수행하기위해 OnDraw 사용한다면, 뷰포트의 원점을 조정하여 도큐먼트의 적절한 부분이 프린트될 있도록 한다.

l  To make the printed image look different from the screen image (that is, if your application is not WYSIWYG). Instead of passing the printer device context to OnDraw, use the device context to render an image using attributes not shown on the screen.

l  If you need GDI resources for printing that you don't use for screen display, select them into the device context before drawing and deselect them afterwards. These GDI resources should be allocated in OnBeginPrinting and released in OnEndPrinting.

l  헤더(header) 또는 풋터(footer) 구현하기 위해. You can still use OnDraw to do the rendering by restricting the area that it can print on.

 

pInfo 파라미터의 m_rectDraw 멤버가 논리적 단위로 용지에서 프린트 가능한 영역을 기술한다는 것을 명심하라.

 

OnPrint 오버라이드 부분에서 OnPrepareDC 호출하지 말라; 프레임워크는 OnPrint 호출하기 전에 자동으로OnPrepareDC 호출한다.

 

Example

 

다음은 오버라이드된 OnPrint 함수의 뼈대이다:

 

void CMyView::OnPrint( CDC *pDC, CPrintInfo *pInfo )

{

    // Print headers and/or footers, if desired.

    // Find portion of document corresponding to pInfo->m_nCurPage.

    OnDraw( pDC );

}

 

See Also   CView::OnBeginPrinting, CView::OnEndPrinting, CView::OnPrepareDC, CView::OnDraw

 

CView::OnUpdate

virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );

 

Parameters

 

pSender   도큐먼트를 수정하는 뷰의 포인터 또는 모든 뷰가 갱신되어야 하면 NULL.

lHint   수정에 관한 정보를 담고 있다.

pHint   수정에 관한 정보를 담고 있는 객체의 포인터.

 

Remarks

뷰의 도큐먼트가 수정된 후에 프레임워크에 의해 호출된다; 함수는 CDocument::UpdateAllViews 의해 호출되고, 뷰로 하여금 이러한 수정 사항을 반영하여 보여지도록 한다. 이것은 OnInitialUpdate 디폴트 구현에 의해 호출되기도 한다. 디폴트 구현은 다음 WM_PAINT 메시지를 받을 다시 그려지도록 전체 클라이언트 영역을 무효화한다. 만약 도큐먼트의 수정된 부분에 대한 영역만을 갱신하고 싶다면 함수를 오버라이드하라. 이러한 경우 hint 파라미터를 상ㅇ하여 수정에 관한 정보를 넘겨주어야 한다.

 

lHint 사용하려면 특별한 힌트 값을 정의하고(보통 비트 마스크 또는 열거형 타입), 도큐먼트로 하여금 그러한 중의 하나를 넘기도록 한다. pHint 사용하려면, CObject로부터 힌트 클래스를 상속받아 도큐먼트가 힌트 객체의 포인터를 넘기도록 한다; OnUpdate 오버라이드할 , 힌트 객체의 타임 형식을 결정하려면 CObject::IsKindOf 멤버 함수를 사용하라.

 

전형적으로 OnUpdate로부터 직접 어떠한 그리기를 수행해서는 안된다. 대신에, 갱신을 필요로하는 영역을 나타내는 사각형을 디바이스 좌표를 사용하여 결정하고, 이것은 CWnd::InvalidateRect 넘긴다. 이로써 다음 WM_PAINT 메시지를 받을 그리기를 수행하도록 한다.

 

만약 lHint 0이고 pHint NULL이면, 도큐먼트는 표준 갱신 통보를 보낸다. 만약 뷰가 표준 갱신 통보를 받으면, 또는 힌트 정보를 해석할 없으면, 모든 클라이언트 영역을 무효화시킨다.

 

See Also   CDocument::UpdateAllViews, CView::OnInitialUpdate, CWnd::Invalidate, CWnd::InvalidateRect

 

CView::CView

CView( );

 

Remarks

CView 객체를 생성한다. 프레임워크는 새로운 프레임 윈도우가 생성되거나 윈도우가 스플리트될 생성자를 호출한다. 도큐먼트가 붙여진 뷰를 초기화하려면 OnInitialUpdate 멤버 함수를 오버라이드하라.

 

See Also   CView::OnInitialUpdate