Drucken (Dialogfeld)
Im Dialogfeld Drucken können Benutzer Optionen für einen bestimmten Druckauftrag auswählen. Der Benutzer kann z. B. den zu verwendenden Drucker, den zu druckten Seitenbereich und die Anzahl der Kopien angeben.
Sie können die PrintDlgEx-Funktion verwenden, um ein Druckeigenschaftenblatt anzuzeigen, das eine Seite Allgemein enthält, die Steuerelemente ähnlich dem Dialogfeld Drucken enthält. Das Eigenschaftenblatt kann auch zusätzliche anwendungsspezifische und treiberspezifische Eigenschaftenseiten auf der Seite Allgemein enthalten.
Sie erstellen und zeigen ein Dialogfeld Drucken an, indem Sie eine PRINTDLG-Struktur initialisieren und die Struktur an die PrintDlg-Funktion übergeben.
Die folgende Abbildung zeigt ein typisches Dialogfeld Drucken .
Wenn der Benutzer auf die Schaltfläche OK klickt, gibt PrintDlgTRUE zurück und verwendet die PRINTDLG-Struktur , um Informationen über die Auswahl des Benutzers zurückzugeben. Beispielsweise geben die Member hDevMode und hDevNames in der Regel globale Speicherhandles für und DEVNAMES-Strukturen zurück. Sie können die Informationen in diesen Strukturen verwenden, um einen Gerätekontext oder einen Informationskontext für den ausgewählten Drucker zu erstellen.
Wenn der Benutzer das Dialogfeld Drucken abbricht oder ein Fehler auftritt, gibt PrintDlgFALSE zurück. Sie können die Ursache eines Fehlers ermitteln, indem Sie die CommDlgExtendedError-Funktion verwenden, um den erweiterten Fehlerwert abzurufen.
Das Dialogfeld Drucken enthält eine Gruppe von Optionsfeldern für den Druckbereich , die angeben, ob der Benutzer alle Seiten, einen Seitenbereich oder nur den markierten Text drucken möchte. Vor dem Aufrufen von PrintDlg können Sie eines der PD_ALLPAGES-, PD_SELECTION- oder PD_PAGENUMS-Flags festlegen, um anzugeben, welche Schaltfläche ursprünglich ausgewählt ist. Wenn PrintDlgTRUE zurückgibt, legt die Funktion eines dieser Flags fest, um die Auswahl des Benutzers anzugeben. Wenn PD_PAGENUMS festgelegt ist, enthalten die Elemente nFromPage und nToPage der PRINTDLG-Struktur die vom Benutzer angegebenen Anfangs- und Endseiten. Um das Optionsfeld Seiten und die zugehörigen Von - und An-Bearbeitungssteuerelemente zu deaktivieren, legen Sie das flag PD_NOPAGENUMS fest. Um das Optionsfeld Auswahl zu deaktivieren, legen Sie das Flag PD_NOSELECTION fest.
Das Dialogfeld enthält ein Bearbeitungssteuerelement, in dem der Benutzer die Anzahl der zu druckenden Kopien eingeben kann. Wenn der hDevMode-Member der PRINTDLG-Struktur ungleich NULL ist, gibt das dmCopies-Element der -Struktur den Anfangswert für dieses Bearbeitungssteuerelement an. Wenn hDevModeNULL ist, gibt der nCopies-Member der PRINTDLG-Struktur den Anfangswert an. Wenn PrintDlg zurückgibt, gibt nCopies in der Regel die anzahl der vom Benutzer angegebenen Kopien an. Wenn Sie jedoch beim Erstellen des Dialogfelds das flag PD_USEDEVMODECOPIESANDCOLLATE festlegen, wird nCopies bei der Rückgabe immer auf 1 festgelegt, und das dmCopies-Element von DEVMODE gibt die Anzahl der zu druckenden Kopien an.
Das Kontrollkästchen Sortieren gibt an, ob der Benutzer die Seiten sortieren möchte, wenn mehrere Kopien gedruckt werden. Das flag PD_COLLATE wird festgelegt, wenn das Kontrollkästchen Sortieren aktiviert ist. Wenn Ihre Anwendung mehrere Kopien oder simulierte Sortierung nicht unterstützt, legen Sie das flag PD_USEDEVMODECOPIESANDCOLLATE im Flags-Element der PRINTDLG-Struktur fest. Dadurch werden das Kontrollkästchen Sortieren und das Bearbeitungssteuerelement Anzahl von Kopien deaktiviert, es sei denn, der Druckertreiber unterstützt mehrere Kopien und Sortierung.
Das Kontrollkästchen In Datei drucken gibt an, ob der Benutzer die Ausgabe an eine Datei und nicht an einen Drucker senden möchte. Sie können das PD_PRINTTOFILE-Flag so festlegen, dass das Kontrollkästchen anfänglich aktiviert ist. Um das Kontrollkästchen auszublenden, legen Sie das flag PD_HIDEPRINTTOFILE fest. Legen Sie zum Deaktivieren das flag PD_DISABLEPRINTTOFILE fest. Wenn der Benutzer die Option In Datei drucken auswählt, legt PrintDlg das flag PD_PRINTTOFILE fest und gibt "FILE:" am Offset zurück, der durch das wOutputOffset-Element der DEVNAMES-Struktur angegeben wird. Wenn Sie die Funktion aufrufen, um den Druckvorgang zu starten, geben Sie diese Zeichenfolge "FILE:" im lpszOutput-Element der -Struktur an. Wenn Sie diese Zeichenfolge angeben, fragt das Drucksubsystem den Benutzer nach dem Namen der Ausgabedatei ab.
Standardmäßig werden im Dialogfeld Drucken zunächst Informationen zum aktuellen Standarddrucker angezeigt. Um Informationen für einen anderen installierten Drucker anzuzeigen, initialisieren Sie eine und eine DEVNAMES-Struktur , und weisen Sie der Struktur das globale Speicherhandle den Membern hDevMode und hDevNames zu. Der Gerätename, den Sie im DmDeviceName-Element der DEVMODE-Struktur und im wDriverOffset-Element der DEVNAMES-Struktur angeben, muss ein Druckergerät identifizieren, das auch im Abschnitt [Geräte] der Win.ini-Datei aufgeführt ist. Wenn das Gerät nicht aufgeführt ist, gibt PrintDlg einen Fehler zurück.
Sie können PrintDlg anweisen, einen Gerätekontext oder Informationskontext für den Drucker zu erstellen, indem Sie das PD_RETURNDC - oder PD_RETURNIC-Flag im Flags-Member der PRINTDLG-Struktur festlegen. Die Funktion gibt ein Handle für den Gerätekontext oder den Informationskontext im hDC-Member zurück. Wenn Sie das flag PD_RETURNDC verwenden, können Sie den Gerätekontext verwenden, um eine Ausgabe für den Drucker zu generieren.
Um Informationen zum Standarddrucker abzurufen, ohne das Dialogfeld Drucken anzuzeigen, legen Sie das Flag PD_RETURNDEFAULT fest. In diesem Fall gibt PrintDlg unmittelbar nach dem Festlegen der Elemente hDevMode und hDevNames für Strukturen, die die Informationen enthalten, auf Handles zurück.
Standardmäßig zeigt PrintDlg Meldungsfelder an, wenn Fehler auftreten. Beispielsweise zeigt die Funktion eine Fehlermeldung an, wenn keine Drucker installiert sind. Um zu verhindern, dass die Funktion diese Warnmeldungen anzeigt, legen Sie das flag PD_NOWARNING fest.
Die folgenden Themen werden in diesem Abschnitt behandelt.
Anpassen des Dialogfelds "Drucken"
Sie können eine benutzerdefinierte Vorlage für das Dialogfeld Drucken bereitstellen, z. B. wenn Sie zusätzliche Steuerelemente einschließen möchten, die für Ihre Anwendung eindeutig sind. Die PrintDlg-Funktion verwendet Ihre benutzerdefinierte Vorlage anstelle der Standardvorlage.
So stellen Sie eine benutzerdefinierte Vorlage für das Dialogfeld Drucken bereit:
- Erstellen Sie die benutzerdefinierte Vorlage, indem Sie die in der Datei Prnsetup.dlg angegebene Standardvorlage ändern. Die in der Standardvorlage drucken verwendeten Steuerelementbezeichner sind in der Datei Dlgs.h definiert.
- Verwenden Sie die PRINTDLG-Struktur , um die Vorlage wie folgt zu aktivieren:
Wenn Ihre benutzerdefinierte Vorlage eine Ressource in einer Anwendung oder einer Dynamic Link-Bibliothek ist, legen Sie das flag PD_ENABLEPRINTTEMPLATE im Flags-Element fest. Verwenden Sie die Member hInstance und lpPrintTemplateName der -Struktur, um den Modul- und Ressourcennamen zu identifizieren.
-Oder-
Wenn sich Ihre benutzerdefinierte Vorlage bereits im Arbeitsspeicher befindet, legen Sie das flag PD_ENABLEPRINTTEMPLATEHANDLE fest. Verwenden Sie das hPrintTemplate-Element , um das Speicherobjekt zu identifizieren, das die Vorlage enthält.
Sie können eine PrintHookProc-Hookprozedur für das Dialogfeld Drucken bereitstellen. Die Hookprozedur kann nachrichten verarbeiten, die an das Dialogfeld gesendet werden. Sie kann auch Nachrichten an das Dialogfeld senden. Wenn Sie eine benutzerdefinierte Vorlage verwenden, um zusätzliche Steuerelemente zu definieren, müssen Sie eine Hookprozedur zum Verarbeiten von Eingaben für Ihre Steuerelemente bereitstellen.
So aktivieren Sie eine Hookprozedur für das Dialogfeld Drucken :
- Legen Sie das PD_ENABLEPRINTHOOK-Flag im Flags-Member der PRINTDLG-Struktur fest.
- Geben Sie die Adresse der Hookprozedur im lpfnPrintHook-Element an.
Nach der Verarbeitung der WM_INITDIALOG Nachricht sendet die Dialogfeldprozedur eine WM_INITDIALOG Nachricht an die Hookprozedur. Der lParam-Parameter dieser Meldung ist ein Zeiger auf die PRINTDLG-Struktur , die zum Initialisieren des Dialogfelds verwendet wird.
Dialogfeld "Setup drucken"
Sie können ein Dialogfeld Drucken einrichten erstellen und anzeigen, indem Sie das flag PD_PRINTSETUP in einem Aufruf der PrintDlg-Funktion festlegen. Das Dialogfeld Druckeinrichtung wurde jedoch durch das Dialogfeld Seite einrichten abgelöst und sollte in neuen Anwendungen nicht verwendet werden.
Die folgenden Flags gelten nur für das Dialogfeld Druckeinrichtung :
- PD_ENABLESETUPHOOK
- PD_ENABLESETUPTEMPLATE
- PD_ENABLESETUPTEMPLATEHANDLE