|
안녕하세요.
다솜돌이 입니다.
Page 컨트롤에 tabsheet 여러개를 이용한 프로그램을 코딩중입니다.
메뉴에서 Print 메뉴를 선택했을 때 ActivePage 를 인쇄하고 싶어서 다음과 같이 코딩하였습니다.
void __fastcall TMainForm::MenuFilePrintClick(TObject *Sender)
{
// 프린터 설정을 위해 포인터 얻기
TPrinter *pPrt = Printer();
// 페이지 출력 기본 방향 가로.
pPrt->Orientation = poLandscape;
// 인쇄 다이얼로그 띄움
if(PrtDlg->Execute()) {
pPrt->BeginDoc();
// 차트 출력
TImage *image = new TImage(Page1->Pages[Page1->ActivePageIndex]);
double wRatio = static_cast<double>(pPrt->PageWidth) / Page1->Pages[Page1->ActivePageIndex]->Width;
double hRatio = static_cast<double>(pPrt->PageHeight) / Page1->Pages[Page1->ActivePageIndex]->Height;
double ratio = min(wRatio, hRatio) - 0.4;
TRect rect(0, 0,
Page1->Pages[Page1->ActivePageIndex]->Width * ratio,
Page1->Pages[Page1->ActivePageIndex]->Height * ratio);
image->Picture->Bitmap->Width = Page1->Pages[Page1->ActivePageIndex]->Width;
image->Picture->Bitmap->Height = Page1->Pages[Page1->ActivePageIndex]->Height;
TCanvas *tempCanvas = new TCanvas;
tempCanvas->Handle = GetDC(Page1->Pages[Page1->ActivePageIndex]->Handle);
image->Picture->Bitmap->Canvas->CopyRect(rect, tempCanvas, rect);
LogPal SysPal;
SysPal.lPal.palVersion = 0x300;
SysPal.lPal.palNumEntries = 256;
GetSystemPaletteEntries(tempCanvas->Handle,0,256,SysPal.lPal.palPalEntry);
image->Picture->Bitmap->Palette = CreatePalette(&(SysPal.lPal));
pPrt->Canvas->StretchDraw(rect, image->Picture->Bitmap);
delete tempCanvas;
delete image;
pPrt->EndDoc();
}
}
이미지를 만들고, ActivePage 의 DC를 얻어 영역만큼 복사해서 프린트 하는 루틴입니다.
그런데 이렇게 하였을 경우, PrtDlg->Execute() 시에 나타난 다이얼로그가 탭시트 위에 떠 있던 경우
인쇄시에 다이얼로그 일부가 탭시트 위에 그려진채로 인쇄되더군요;;
이를 방지할 수 있는 방법이나
아니면, 탭시트를 인쇄할 수 있는 다른 방법이 있다면 알려주세요.
|