Skip to content

Latest commit

 

History

History
76 lines (62 loc) · 2.62 KB

-gdiplus-displaying-a-print-dialog-box-use.md

File metadata and controls

76 lines (62 loc) · 2.62 KB
description ms.assetid title ms.topic ms.date
One way to get a device context handle for a printer is to display a print dialog box and allow the user to choose a printer.
73a74186-c916-4ad9-b768-6bc887fd5231
Displaying a Print Dialog Box
article
05/31/2018

Displaying a Print Dialog Box

One way to get a device context handle for a printer is to display a print dialog box and allow the user to choose a printer. The PrintDlg function (which displays the dialog box) has one parameter that is the address of a PRINTDLG structure. The PRINTDLG structure has several members, but you can leave most of them set to their default values. The two members you need to set are lStructSize and Flags. Set lStructSize to the size of a PRINTDLG variable, and set Flags to PD_RETURNDC. Setting Flags to PC_RETURNDC specifies that you want the PrintDlg function to fill the hDC field with a device context handle for the printer chosen by the user.

#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;
}