Optimieren der Druckausgabe durch Bereitstellen eines Druckerhandles

Einer der Konstruktoren für die Graphics-Klasse empfängt ein Gerätekontexthand handle und ein Druckerhandy. Wenn Sie befehle Windows GDI+ an bestimmte Drucker PostScript, ist die Leistung besser, wenn Sie ihr Grafikobjekt mit diesem bestimmten Konstruktor erstellen.

Die folgende Konsolenanwendung ruft GetDefaultPrinter auf, um den Namen des Standarddruckers zu erhalten. Der Code übergibt den Druckernamen an CreateDC, um ein Gerätekontexthandler für den Drucker zu erhalten. Der Code übergibt auch den Druckernamen an OpenPrinter, um ein Druckerhand handle zu erhalten. Sowohl das Gerätekontexthandy als auch das Druckerhandy werden an den Grafikkonstruktor übergeben. Anschließend werden zwei Abbildungen auf dem Drucker gezeichnet.

Hinweis

Die GetDefaultPrinter-Funktion wird nur für Windows 2000 und höher unterstützt.

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