다음을 통해 공유


인쇄 대화 상자 표시

프린터에 대한 디바이스 컨텍스트 핸들을 가져오는 한 가지 방법은 인쇄 대화 상자를 표시하고 사용자가 프린터를 선택할 수 있도록 하는 것입니다. PrintDlg 함수(대화 상자를 표시함)에는 PRINTDLG 구조체의 주소인 매개 변수가 하나 있습니다. PRINTDLG 구조에는 여러 멤버가 있지만 대부분의 멤버를 기본값으로 설정할 수 있습니다. 설정해야 하는 두 멤버는 lStructSizeFlags입니다. lStructSize를 PRINTDLG 변수의 크기로 설정하고 플래그를 PD_RETURNDC 설정합니다. 플래그를 PC_RETURNDC 설정하면 PrintDlg 함수가 사용자가 선택한 프린터에 대한 디바이스 컨텍스트 핸들로 hDC 필드를 채우도록 지정합니다.

#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;

INT main()
{
   // Initialize GDI+.
   GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR gdiplusToken;
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
   
   DOCINFO docInfo;
   ZeroMemory(&docInfo, sizeof(docInfo));
   docInfo.cbSize = sizeof(docInfo);
   docInfo.lpszDocName = "GdiplusPrint";
   
   // Create a PRINTDLG structure, and initialize the appropriate fields.
   PRINTDLG printDlg;
   ZeroMemory(&printDlg, sizeof(printDlg));
   printDlg.lStructSize = sizeof(printDlg);
   printDlg.Flags = PD_RETURNDC;
   
   // Display a print dialog box.
   if(!PrintDlg(&printDlg))
   {
      printf("Failure\n");
   }
   else
   {
      // Now that PrintDlg has returned, a device context handle
      // for the chosen printer is in printDlg->hDC.
      
      StartDoc(printDlg.hDC, &docInfo);
      StartPage(printDlg.hDC);
         Graphics* graphics = new Graphics(printDlg.hDC);
         Pen* pen = new Pen(Color(255, 0, 0, 0));
         graphics->DrawRectangle(pen, 200, 500, 200, 150);
         graphics->DrawEllipse(pen, 200, 500, 200, 150);
         graphics->DrawLine(pen, 200, 500, 400, 650);
         delete pen;
         delete graphics;
      EndPage(printDlg.hDC);
      EndDoc(printDlg.hDC); 
   }
   if(printDlg.hDevMode) 
      GlobalFree(printDlg.hDevMode);
   if(printDlg.hDevNames) 
      GlobalFree(printDlg.hDevNames);
   if(printDlg.hDC)
      DeleteDC(printDlg.hDC);
   
   GdiplusShutdown(gdiplusToken);
   return 0;
}