Affichage d’une boîte de dialogue Imprimer
Une façon d’obtenir un handle de contexte d’appareil pour une imprimante consiste à afficher une boîte de dialogue d’impression et à autoriser l’utilisateur à choisir une imprimante. La fonction PrintDlg (qui affiche la boîte de dialogue) a un paramètre qui est l’adresse d’une structure PRINTDLG . La structure PRINTDLG a plusieurs membres, mais vous pouvez laisser la plupart d’entre eux définis sur leurs valeurs par défaut. Les deux membres que vous devez définir sont lStructSize et Flags. Définissez lStructSize sur la taille d’une variable PRINTDLG et définissez Flags sur PD_RETURNDC. La définition d’indicateurs sur PC_RETURNDC spécifie que vous souhaitez que la fonction PrintDlg remplisse le champ hDC avec une poignée de contexte d’appareil pour l’imprimante choisie par l’utilisateur.
#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;
}