티스토리 뷰

Printing Class Library
Dec 19 2003 13:02 Written by Richard Stringer (codeguru member)

Printing Class Library

자 이번에 살펴볼 클레스는 프린트 관련 클레스입니다.
제가 급하게 프린트관련 작업을 할일이 있어 찾던중
아주 유용하면서도 잘 정리된 프린트 클레스를 찾게되었습니다.
사실 프린트쪽은 생각보다 훨씬 복잡하다는게 저의 개인적인 생각입니다.
저만 그러한지는 몰라도 암튼 저는 그렇게 생각합니다.

본 클레스는 Codeguru 에서 가져왔으며 기사제공자는 Richard Stringer 님입니다.

자 그럼 클레스를 사용해 볼까요.
먼저 위에서 소스라이브러리를 다운받아 압축을 푸세요.
필요한 파일들은 다음과 같습니다.

CPage.cpp
CPage.h
CPrinter.cpp
CPrinter.h
Dib.cpp
Dib.h

자 이제 이 파일들을 프로젝트 폴더로 복사합니다.
다음 헤더파일에 다음을 선언해줍니다.

#include "CPage.h"

자 다음 실질적인 작업을 시작해봅시다.
이 클레스는 프린트 클레스입니다.
따라서 프린트명령이 주어지는 시점을 알아야겠지요.
클레스위자드에서 생성하면 되겠지요 .... ㅎㅎ
그리고 생성된 함수에 다음을 추가합니다.

void C*****View::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CPage* ps = new CPage(pInfo->m_rectDraw,pDC,MM_TEXT);
OnReport_Function( ps );
delete ps;

CView::OnPrint(pDC, pInfo);
}

위에서 OnReport_Function() 은 사용자가 정의한 프린트함수입니다.

다음은 OnReport_Function()의 한예입니다.
Bitmap 이미지와 텍스트를 프린트하도록 되어있군요.

void OnReport_Function(CPage* pPage)
{
double Row;

//Print a bitmap
ps->PrintBitMap(1.0,1.0,4.0,5.0,"MyBitmap.bmp");

//Print a title
Row = pPage-Print(0.0,0.0,TEXT_NORMAL|TEXT_CENTER,24,"Form Title");

//create and use a print region
CPrintRegion *Region1=pPage->CreateRegion(.5,0.0,1.5,3.9);
Region1->DrawBorder();
Region1->DrawTitle("Customer Information",8,TEXT_BOLD|TEXT_CENTER|TEXT_RECT,FILL_NONE);
Row = pPage->Print(Region2,0.0,0.01,TEXT_NORMAL|TEXT_SINGLELINE,9,"Name");
Row = pPage->Print(Region2,Row,0.01,TEXT_NORMAL|TEXT_SINGLELINE,9,"Location");
}

//create and use a table
TABLEHEADER* pTable = new TABLEHEADER;
pTable->PointSize = 10;
pTable->LineSize = 1;

//default shown only for demo purposes
pTable->UseInches = TRUE;
pTable->AutoSize = FALSE;
pTable->Border = TRUE;
pTable->FillFlag = FILL_NONE;
pTable->NumColumns = 5;
pTable->NumRows = 12;
pTable->StartRow = 0.0;
pTable->StartCol = 0.0;
pTable->EndCol = 8.0;

pTable->ColDesc[0].Init(1.0,"Item #",FILL_NONE);
pTable->ColDesc[1].Init(3.0,"Desc.",FILL_LTGRAY);
pTable->ColDesc[2].Init(1.0,"#Items");
pTable->ColDesc[3].Init(1.0,"Cost");
pTable->ColDesc[4].Init(1.0,"Ext Cost");

pPage->Table(pTable);

//place information in a table
pPage->Print(pTable,0,0,12,TEXT_LEFT|TEXT_BOLD,"123-009");
pPage->Print(pTable,0,1,12,TEXT_CENTER|TEXT_BOLD,"SmallCray Computer");
pPage->Print(pTable,0,2,12,TEXT_CENTER|TEXT_BOLD,"2");
pPage->Print(pTable,0,3,12,TEXT_RIGHT|TEXT_BOLD,"22.10");
pPage->Print(pTable,0,4,12,TEXT_RIGHT|TEXT_BOLD,"44.20");

}

이 클레스는 이보다 더많은 휼륭한 함수들이 많이 들어있습니다.
더 많은 유용한 함수들의 사용에 대해서는 데모 프로젝트를 다운받아
한번씩 주욱 살펴보도록 하세요.
다듬으면 다듬을수록 본 클레스의 우수한 기능에 놀랍습니다.
저는 이 클레스가 아주 유용하다는 생각에 단지 이곳에서 소개할 뿐입니다.
그럼 필요하신 분들에게 유용한 자료가 되길 빕니다.