Partager via


Optimisation de l’impression en fournissant un handle d’imprimante

L’un des constructeurs de la classe Graphics reçoit un handle de contexte d’appareil et un handle d’imprimante. Lorsque vous envoyez des commandes Windows GDI+ à certaines imprimantes PostScript, les performances seront meilleures si vous créez votre objet Graphics avec ce constructeur particulier.

L’application console suivante appelle GetDefaultPrinter pour obtenir le nom de l’imprimante par défaut. Le code transmet le nom de l’imprimante à CreateDC pour obtenir un handle de contexte d’appareil pour l’imprimante. Le code transmet également le nom de l’imprimante à OpenPrinter pour obtenir un handle d’imprimante. Le handle de contexte d’appareil et le handle d’imprimante sont passés au constructeur Graphics . Ensuite, deux figures sont dessinées sur l’imprimante.

Notes

La fonction GetDefaultPrinter est prise en charge uniquement sur Windows 2000 et versions ultérieures.

 

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

   DWORD   size;
   HDC     hdcPrint;
   HANDLE  printerHandle;

   DOCINFO docInfo;
   ZeroMemory(&docInfo, sizeof(docInfo));
   docInfo.cbSize = sizeof(docInfo);
   docInfo.lpszDocName = "GdiplusPrint";

   // Get the length of the printer name.
   GetDefaultPrinter(NULL, &size);
   TCHAR* buffer = new TCHAR[size];

   // Get the printer name.
   if(!GetDefaultPrinter(buffer, &size))
   {
      printf("Failure");
   }
   else
   {
      // Get a device context for the printer.
      hdcPrint = CreateDC(NULL, buffer, NULL, NULL);

      // Get a printer handle.
      OpenPrinter(buffer, &printerHandle, NULL);

      StartDoc(hdcPrint, &docInfo);
      StartPage(hdcPrint);
         Graphics* graphics = new Graphics(hdcPrint, printerHandle);
         Pen* pen = new Pen(Color(255, 0, 0, 0));
         graphics->DrawRectangle(pen, 200, 500, 200, 150);
         graphics->DrawEllipse(pen, 200, 500, 200, 150);
         delete(pen);
         delete(graphics);
      EndPage(hdcPrint);
      EndDoc(hdcPrint);

      ClosePrinter(printerHandle);
      DeleteDC(hdcPrint);
   }

   delete buffer;
   
   GdiplusShutdown(gdiplusToken);
   return 0;
}