U E D R , A S I H C RSS

MFC/Print

{{| |}}

1. Print in MFC

document 안에 저장된 내용을 출력하는 것은 view 의 역할 이다. 이 과정은 상당히 복잡하다.
출력을 구현하기 위해서는 view 클래스로 부터 상속받은 수많은 함수들을 오버라이딩 해야한다.

2. 프린트 로직과 관계된 함수들

  • CView::OnPreparePrinting()
    페이지 카운트를 계산한다. DoPreparePrinting() 호출

  • CView::OnBeginPrinting()
    GDI 자원을 할당
  • CDC::StartDoc()

  • CView::OnPrepareDC()
    뷰포트 원점을 변경. DC속성들을 설정
  • CDC::StartPage()

  • CView::OnPrint()
    헤더/꼬리말을 출력한다. 현재 페이지를 출력한다.
  • CDC::EndPage()
    페이지가 남았다면 OnPrepareDC()로 이동하여 루프
  • CDC::EndDoc()
  • CView::OnEndPrinting()
    GDI자원 해제

  • 뷰클래스의 5개의 멤버함수는 프로그래머가 재정의 해야한다. 최소한 5개중에서 OnPreparePrinting(), OnPrepareDC(), OnPrint()는 구현해야한다.
    프린터에 대한 데이터의 출력은 디스플레이에 출력하는 것과 동일한 방식으로 이루어진다. (GDI가 장치 독립적으로 만들어져 잇기 때문이다.)
    프린터 작업과 관계되는 모든 함수는 CPrintInfo 형의 객체 포인터가 인자로 전달된다. 이 객체는 프린터 작업을 관리하는 함수들을 연결시켜준다.

3. CPrintInfo

프린트 작업에서 기초적인 역할을 한다. 프린트 job 정보, 프린트 작업 상황에 대한 내용이 저장된다.
모든 멤버 변수는 public 변수로 다음과 같다.
m_pPD CPrintDialog 객체에 대한 포인터. 출력 대화 상자를 나타낸다.
m_bDirect 출력작업이 프린트 대화상자를 건너뛰면 TRUE 그외에는 FALSE
m_bPreview Print Preview 가 선택되면 TRUE, 아니면 FALSE
m_bContinuePrinting TRUE로 설정되면 출력 루프를 계속한다. FALSE가 되면 프린트 작업 종료.
m_nCurPage UINT형식을 갖는 값으로서 현재 페이지 번호를 저장
m_nNumPreviewPages UINT preview 우니도우에 나타나 있는 페이지들의 번호 1 or 2
m_lpUserData LPVOID 형식을 갖는다. 생성한 객체에 대한 포인터를 저장한다. 출력작업에 관한 추가 정보를 저장하는 객체를 생성할 수 있도록 한다. CPrintInfo 객체와 연계 시킬 수 있도록 한다.
m_rectDraw CRect 객체. 페이지에서 사용 가능한 영역을 논리 좌표로 정의 한다.
m_strPageDesc CString 객체로 프린트 preview 동안에 페이지 번호를 나타내기 위해 프레임 웍에서 사용되는 포맷 문자열을 포함한다.
m_bDocObject 응용프로그램이 lPrint 인터페이스를 통하여 출력하면 TRUE로 설정되며, 그렇지 않은 경우에는 FALSE이다.
m_dwFlags m_bDocObject가 TRUE일때만 유호. DWORD값으로 lPrint::Print에 전달된 플래그
m_nOffsetPage m_bDocObject가 TRUE일때만 유효. lPrint job 안에서 첫번째 페이지 offset을 준다.

기타 public 함수도 제공하다. 적기 귀찮다. MSDN 찾아보길;;

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:42
Processing time 0.0258 sec