다음을 통해 공유


여러 페이지로 된 문서

이 문서에서는 Windows 인쇄 프로토콜 및 둘 이상의 페이지가 포함 된 문서를 인쇄 하는 방법을 설명 합니다.문서는 다음 항목을 다룹니다.

  • 인쇄 프로토콜

  • 뷰 클래스 함수를 재정의합니다.

  • 페이지 매기기

  • 프린터 페이지 vs입니다.문서 페이지

  • 인쇄할 때 페이지 매김

인쇄 프로토콜

다중 페이지 문서를 인쇄 하려면 프레임 워크와 뷰는 다음과 같은 방식으로 상호 작용 합니다.먼저 프레임 워크를 표시는 인쇄 대화 상자 호출 및 프린터 디바이스 컨텍스트를 만듭니다의 StartDoc 의 멤버 함수는 CDC 개체.그런 다음 문서의 각 페이지에 대 한 프레임 워크를 호출의 StartPage 멤버 함수는 CDC 개체을 지시 하는 호출 페이지를 인쇄 하는 view 개체는 EndPage 멤버 함수.특정 페이지를 시작 하기 전에 프린터 모드를 변경 해야 하는 경우 보기를 호출 ResetDC, 업데이트는 DEVMODE 새 프린터 모드 정보가 포함 된 구조입니다.문서 전체를 인쇄 된 면 프레임 워크는 호출을 EndDoc 멤버 함수입니다.

뷰 클래스 함수를 재정의합니다.

CView 클래스 프레임 워크에서 인쇄 하는 동안 호출 되는 몇 가지 멤버 함수를 정의 합니다.뷰 클래스이 함수를 재정의 하 여 뷰 클래스의 인쇄 논리 프레임 워크의 인쇄 논리 사이의 연결을 제공 합니다.다음 표에서 이러한 멤버 함수를 나열합니다.

인쇄를 위한 CView 재정의 가능한 함수

Name

재정의 이유

OnPreparePrinting

인쇄 대화 상자에서 특히 문서 길이 값을 삽입 하려면

OnBeginPrinting

글꼴 또는 다른 GDI 리소스를 할당할 수

OnPrepareDC

특정된 페이지에 대 한 디바이스 컨텍스트의 특성을 조정 하거나 인쇄할 때 페이지 번호 매길 경우

OnPrint

특정된 페이지를 인쇄 하려면

OnEndPrinting

GDI 리소스 할당을

인쇄와 관련 된 처리에도 다른 함수를 수행할 수 있습니다 있지만 이러한 함수는 인쇄 프로세스를 구동 하는 것입니다.

다음 그림 인쇄 프로세스에 관련 된 단계에 설명 하 고 위치를 보여 줍니다. 각 CView멤버 함수 라고 인쇄의.이 문서의 나머지 부분에서는 대부분의 이러한 단계에 자세히 설명합니다.인쇄 과정의 추가 부품 문서에 설명 되어 GDI 리소스를 할당 하 고.

인쇄 루프

루프 프로시저 인쇄

페이지 매기기

프레임 워크는 많은 인쇄 작업에 대 한 정보가 저장 된 CPrintInfo 구조.여러 값의 CPrintInfo 페이지입니다. 이러한 값은 다음 표에 나와 있는 것 처럼 액세스할 수 있습니다.

페이지 번호 정보를 Cprintinfo에 저장 합니다.

멤버 변수 또는

함수 이름

페이지 번호 참조

GetMinPage/SetMinPage

문서의 첫 번째 페이지

GetMaxPage/SetMaxPage

문서의 마지막 페이지

GetFromPage

인쇄할 첫 번째 페이지

GetToPage

인쇄할 마지막 페이지

m_nCurPage

현재 인쇄 중인 페이지

페이지 번호 1에서 시작, 첫 페이지 번호가 1, 0이 아닌.이러한 및 다른 멤버에 대 한 자세한 내용은 CPrintInfo, 표시는 MFC 참조.

보기의 인쇄 프로세스 부분에 프레임 워크를 호출 OnPreparePrinting 멤버 함수 포인터를 전달 하는 CPrintInfo 구조.응용 프로그램 마법사에서 구현을 제공 OnPreparePrinting 를 호출 하는 DoPreparePrinting, 다른 멤버 함수를 CView.DoPreparePrinting인쇄 대화 상자를 표시 하 고 프린터 디바이스 컨텍스트를 만드는 함수가입니다.

이 시점에서 응용 프로그램 문서에 페이지 수를 알지 못합니다.문서의 첫 번째 및 마지막 페이지 번호에 대 한 기본값 1과 0xffff를 사용합니다.문서에 있는 페이지 수를 알고 있는 경우 재정의 OnPreparePrinting 를 호출 하 고 여 SetMaxPageCPrintInfo 에 보내기 전에 구조 DoPreparePrinting.이 문서의 길이 지정할 수 있습니다.

DoPreparePrinting다음은 인쇄 대화 상자를 표시합니다.반환 될 때 해당 CPrintInfo 구조는 사용자가 지정한 값을 포함 합니다.사용자가 선택한 페이지 범위만 인쇄 하려는 경우 자신이 시작과 끝 페이지 번호 인쇄 대화 상자에서 지정할 수 있습니다.프레임 워크는 이러한 값을 사용 하 여 검색의 GetFromPageGetToPage 함수를 CPrintInfo.사용자 페이지 범위를 지정 하지 않으면 프레임 워크는 호출 GetMinPageGetMaxPage 및 전체 문서를 인쇄 하려면 반환 된 값을 사용 합니다.

인쇄할 문서의 각 페이지에 대해 프레임 워크는 뷰 클래스의 두 멤버 함수 호출 OnPrepareDCOnPrint, 두 개의 매개 변수를 전달 하는 각 함수:에 대 한 포인터는 CDC 개체에 대 한 포인터에는 CPrintInfo 구조.프레임 워크 호출 될 때마다 OnPrepareDCOnPrint, 다른 값을 전달의 m_nCurPage 소속은 CPrintInfo 구조.이런이 방식으로 인쇄 될 페이지 뷰 프레임 워크를 알려 줍니다.

OnPrepareDC 멤버 함수에 대 한 화면 표시도 사용 합니다.그리기를 수행 하기 전에 조정을 장치 컨텍스트를 만듭니다.OnPrepareDC인쇄에서는 비슷한 역할 이지만 몇 가지 차이점: 먼저의 CDC 화면 디바이스 컨텍스트를 하 고, 둘째 대신 프린터 디바이스 컨텍스트를 나타내는 개체는 CPrintInfo 개체는 두 번째 매개 변수로 전달 됩니다.(이 매개 변수는 NULLOnPrepareDC 화면 이라고 합니다.) 재정의 OnPrepareDC 디바이스 컨텍스트는 페이지 인쇄 중인에 따라 조정할 수 있습니다.예를 들어, 뷰포트 원점과 클리핑 영역 문서의 해당 부분을 인쇄할 수 있도록 이동할 수 있습니다.

OnPrint 멤버 함수 페이지를 실제로 인쇄를 수행 합니다.문서 기본 인쇄 된 방식을 프레임 워크가 호출 하는 방법을 보여 줍니다. OnDraw 인쇄를 수행 하는 프린터 디바이스 컨텍스트를 사용 합니다.프레임 워크 호출 보다 정확 하 게 OnPrintCPrintInfo 구조 및 디바이스 컨텍스트를 및 OnPrint 장치 컨텍스트를 전달 OnDraw.재정의 OnPrint 화면 표시 하 고 인쇄 중에 수행 해야 하는 렌더링을 수행 합니다.예를 들어, 머리글 또는 바닥글을 인쇄 하려면 (참고 머리글 및 바닥글 에 대 한 자세한 내용은).그런 다음 호출 OnDraw 의 재정의에서 OnPrint 모두 화면에 일반적인 렌더링 및 인쇄를 할.

사실은 OnDraw 모두 표시 화면 및 인쇄 응용 프로그램이 WYSIWYG 인지에 대 한 렌더링 하지: "보이는 것입니다." 그러나 WYSIWYG 응용 프로그램을 작성 하지 않는 가정 합니다.예를 들어, 텍스트를 굵게 인쇄에 사용 되지만 화면의 굵은 텍스트를 나타내려면 제어 코드를 표시 하는 편집기를 고려 하십시오.이러한 상황에서 사용 하면 OnDraw 화면을 엄격 하 게 합니다.재정의 하는 경우 OnPrint, 호출에 대체 OnDraw 별도 드로잉 함수를 호출 합니다.해당 함수 종이, 화면에 표시 안 함에서 특성을 사용 하는 표시 되는 문서를 그립니다.

프린터 페이지 vs입니다.문서 페이지

페이지 번호를 참조 하는 경우 프린터의 개념이 페이지와 페이지 문서의 개념이 구분 하는 데 필요한 수 있습니다.프린터의 관점에서 페이지가 용지 한 면입니다.그러나 용지 한 장이 반드시 문서의 한 페이지를 아닙니다.예를 들어, 시트 접을 수 있는, 회보를 인쇄할 경우 용지 한 면 첫 번째와 마지막 페이지의 문서를 나란히 포함 될 수 있습니다.마찬가지로, 문서 페이지의 스프레드시트를 인쇄할 경우 전혀 구성 되지 않습니다.대신 용지 한 면 행 20 열 6-10 1 포함 될 수 있습니다.

모든 페이지 번호는 CPrintInfo 구조를 프린터 페이지를 참조 하십시오.프레임 워크 호출 OnPrepareDCOnPrint 은 프린터를 통해 전달 되는 용지를 한 번.재정의 하는 경우는 OnPreparePrinting 문서의 길이 지정 하는 기능, 페이지 프린터를 사용 해야 합니다.일대일 대응 관계가 있으면 (즉, 프린터의 한 페이지가 문서의 한 페이지 같음), 간단 합니다.한편, 문서 페이지와 프린터 페이지가 직접 대응 되지 않으면, 그 사이 변환 해야 합니다.예를 들어, 스프레드시트를 인쇄할 수 있습니다.재정의 하는 경우 OnPreparePrinting, 용지 몇 장이 전체 스프레드시트 인쇄 및 다음 호출 하는 경우 해당 값을 사용 해야 합니다 계산 해야는 SetMaxPage 멤버 함수를 CPrintInfo.마찬가지로, 재정의 하는 경우 OnPrepareDC, 변환 해야 m_nCurPage 에 해당 특정 시트에 표시 하 고 다음 뷰포트 원점 적절 하 게 조정 하는 열과 행의 범위.

인쇄할 때 페이지 매김

일부 상황에서는 뷰 클래스 미리 실제로 인쇄 되지 때까지 문서가 얼마나 오래 되어 알 수 없습니다.응용 프로그램이 WYSIWYG이 아니라고 가정 예를 들어, 따라서 화면의 문서 길이가 인쇄 했을 때 길이와 일치 하지 않습니다.

재정의 하는 경우이 문제가 발생 하면 OnPreparePrinting 뷰 클래스에 대 한: 값으로 전달할 수 없습니다는 SetMaxPage 의 함수는 CPrintInfo 문서의 길이 모르기 때문에 구조.사용자가 인쇄 대화 상자를 사용할 때 중지할 페이지 번호를 지정 하지 않으면 프레임 워크는 인쇄 루프를 중지할 시기를 알지 못합니다.인쇄 루프를 중지할 시기를 결정 하는 유일한 방법은 문서를 인쇄 하 고 끝날 때 확인 하는 것입니다.인쇄 중인 하 고 끝에 도달 하면 프레임 워크에 게 알려야 하는 동안 문서의 끝에 대 한 뷰 클래스에 체크 인해야 합니다.

프레임 워크는 뷰 클래스에의 의존 OnPrepareDC 를 알려주는 함수를 중지 해야 하는 경우.호출한 후에 OnPrepareDC, 프레임 워크의 멤버를 검사는 CPrintInfo 라는 구조 m_bContinuePrinting.열의 기본값이 TRUE. 그렇게 유지 되는 프레임 워크는 인쇄 루프를 계속 합니다.이 설정 되어 있으면 FALSE, 프레임 워크 중지 합니다.인쇄 시 페이지 매김을 수행 하려면 재정의 OnPrepareDC 문서 끝에 도달 했습니다와 설정 여부를 확인 하려면 m_bContinuePrintingFALSE 있는 경우.

기본 구현은 OnPrepareDC 설정 m_bContinuePrintingFALSE 현재 페이지 1 보다 큰 경우.따라서 문서의 길이가 지정 되지 않은 경우 프레임 워크는 문서 한 페이지 간주 합니다.그 결과 기본 클래스 버전을 호출 하는 경우 주의 해야 한다는 OnPrepareDC.으로 간주 하지 않습니다 m_bContinuePrinting 수 있습니다 TRUE 후 기본 클래스 버전을 호출 합니다.

w7wzay73.collapse_all(ko-kr,VS.110).gif추가 정보

참고 항목

참조

인쇄

CView 클래스

CDC 클래스