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 Seitenbereich und die Anzahl der zu druckenden Kopien angeben.

Sie können die PrintDlgEx-Funktion verwenden, um ein Print Property Sheet anzuzeigen, das eine Seite "Allgemein " enthält, die Steuerelemente enthält, die dem Dialogfeld "Drucken " ähneln. Das Eigenschaftenblatt kann auch über zusätzliche anwendungsspezifische und treiberspezifische Eigenschaftenseiten nach der Seite "Allgemein " verfügen.

Sie erstellen und anzeigen ein Dialogfeld "Drucken ", indem Sie eine PRINTDLG-Struktur initialisieren und die Struktur an die PrintDlg-Funktion übergeben.

Die folgende Abbildung zeigt ein typisches Dialogfeld "Drucken" .

print dialog box

Wenn der Benutzer auf die Schaltfläche "OK " klickt, gibt PrintDlgTRUE zurück und verwendet die PRINTDLG-Struktur , um Informationen zu den Auswahlen des Benutzers zurückzugeben. Beispielsweise geben die Elemente "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 PrintDlgFALSCH zurück. Sie können die Ursache eines Fehlers mithilfe der CommDlgExtendedError-Funktion ermitteln, 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. Bevor Sie PrintDlg aufrufen, können Sie einen der PD_ALLPAGES, PD_SELECTION oder PD_PAGENUMS Flags festlegen, um anzugeben, welche Schaltfläche anfänglich ausgewählt ist. Wenn PrintDlgTRUE zurückgibt, legt die Funktion eins dieser Kennzeichen 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 Start- und Endseiten. Wenn Sie das Optionsfeld "Seiten" und die zugeordneten Steuerelemente "Von" und "An Bearbeiten" deaktivieren möchten, legen Sie das PD_NOPAGENUMS Kennzeichen fest. Um das Optionsfeld "Auswahl " zu deaktivieren, legen Sie das PD_NOSELECTION Flag fest.

Das Dialogfeld enthält ein Bearbeitungssteuerelement, in dem der Benutzer die Anzahl der zu druckenden Kopien eingeben kann. Wenn das hDevMode-Element der PRINTDLG-Struktur nicht NULL ist, gibt das dmCopies-Element der Struktur den Anfangswert für dieses Bearbeitungssteuerelement an. Wenn hDevModeNULL ist, gibt das nCopies-Element 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 PD_USEDEVMODECOPIESANDCOLLATE Flag festlegen, wird nCopies 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 zusammenzählen möchte, wenn mehrere Kopien gedruckt werden. Das PD_COLLATE Flag wird festgelegt, wenn das Kontrollkästchen "Zusammensetzen " aktiviert ist. Wenn Ihre Anwendung mehrere Kopien oder simulierte Sortierung nicht unterstützt, legen Sie das PD_USEDEVMODECOPIESANDCOLLATE Flag im Element "Flags " der PRINTDLG-Struktur fest. Dadurch wird das Kontrollkästchen "Sortieren " und das Steuerelement " Anzahl der Kopien bearbeiten" 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 PD_HIDEPRINTTOFILE Flag fest. Um sie zu deaktivieren, legen Sie das PD_DISABLEPRINTTOFILE Flag fest. Wenn der Benutzer die Option " In Datei drucken " auswählt, legt PrintDlg das PD_PRINTTOFILE Flag fest und gibt "FILE:" am Offset zurück, der durch das wOutputOffset-Element der DEVNAMES-Struktur angegeben ist. Wenn Sie die Funktion aufrufen, um den Druckvorgang zu starten, geben Sie diese "FILE:"-Zeichenfolge im lpszOutput-Element der Struktur an. Wenn Sie diese Zeichenfolge angeben, wird das Drucksubsystem zum Abfragen des Benutzers für den Namen der Ausgabedatei führen.

Standardmäßig zeigt das Dialogfeld "Drucken " zunächst Informationen zum aktuellen Standarddrucker an. Um Informationen für einen anderen installierten Drucker anzuzeigen, initialisieren Sie eine und eine DEVNAMES-Struktur , und weisen Sie der Struktur den Elementen hDevMode und hDevNames das globale Speicherhandling 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 direkt zum Erstellen eines Gerätekontexts oder Informationskontexts für den Drucker verwenden, indem Sie das PD_RETURNDC - oder PD_RETURNIC-Kennzeichen im Element "Flags " der PRINTDLG-Struktur festlegen. Die Funktion gibt einen Handle an den Gerätekontext oder den Informationskontext im hDC-Element zurück. Wenn Sie das PD_RETURNDC-Kennzeichen verwenden, können Sie den Gerätekontext verwenden, um die Ausgabe für den Drucker zu generieren.

Wenn Sie Informationen zum Standarddrucker abrufen möchten, ohne das Dialogfeld "Drucken " anzuzeigen, legen Sie das PD_RETURNDEFAULT Kennzeichen fest. In diesem Fall gibt PrintDlg unmittelbar nach dem Festlegen der Elemente "hDevMode " und "hDevNames" für Strukturen zurück, die die Informationen enthalten.

PrintDlg zeigt standardmäßig Meldungsfelder an, wenn Fehler auftreten. Die Funktion zeigt beispielsweise eine Fehlermeldung an, wenn keine Drucker installiert sind. Um zu verhindern, dass die Funktion diese Warnmeldungen anzeigt, legen Sie das PD_NOWARNING Flag fest.

Die folgenden Themen werden in diesem Abschnitt erläutert.

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:

  1. Erstellen Sie die benutzerdefinierte Vorlage, indem Sie die in der Datei "Prnsetup.dlg" angegebene Standardvorlage ändern. Die steuerelementbezeichner, die in der Standarddialogvorlage "Drucken" verwendet werden, werden in der Datei "Dlgs.h" definiert.
  2. Verwenden Sie die PRINTDLG-Struktur , um die Vorlage wie folgt zu aktivieren:
    • Wenn Ihre benutzerdefinierte Vorlage eine Ressource in einer Anwendungs- oder Dynamic-Link-Bibliothek ist, legen Sie das PD_ENABLEPRINTTEMPLATE Flag im Flags-Element fest. Verwenden Sie die Elemente "hInstance " und "lpPrintTemplateName " der Struktur, um den Modul- und Ressourcennamen zu identifizieren.

      -Oder-

    • Wenn ihre benutzerdefinierte Vorlage bereits im Arbeitsspeicher enthalten ist, legen Sie das PD_ENABLEPRINTTEMPLATEHANDLE Flag fest. Verwenden Sie das hPrintTemplate-Element , um das Speicherobjekt zu identifizieren, das die Vorlage enthält.

Sie können eine PrintHookProc-Hook-Prozedur für das Dialogfeld "Drucken " bereitstellen. Die Hook-Prozedur kann Nachrichten verarbeiten, die an das Dialogfeld gesendet werden. Es kann auch Nachrichten an das Dialogfeld senden. Wenn Sie eine benutzerdefinierte Vorlage verwenden, um zusätzliche Steuerelemente zu definieren, müssen Sie eine Hook-Prozedur bereitstellen, um Eingaben für Ihre Steuerelemente zu verarbeiten.

So aktivieren Sie eine Hook-Prozedur für das Dialogfeld "Drucken ":

  1. Legen Sie das PD_ENABLEPRINTHOOK Flag im Flags-Element der PRINTDLG-Struktur fest.
  2. Geben Sie die Adresse der Hook-Prozedur im lpfnPrintHook-Element an.

Nach der Verarbeitung der WM_INITDIALOG Nachricht sendet die Dialogfeldprozedur eine WM_INITDIALOG Nachricht an die Hook-Prozedur. Der lParam-Parameter dieser Nachricht ist ein Zeiger auf die PRINTDLG-Struktur , die zum Initialisieren des Dialogfelds verwendet wird.

Sie können ein Dialogfeld " Drucken einrichten " erstellen und anzeigen, indem Sie das PD_PRINTSETUP-Kennzeichen in einem Aufruf der PrintDlg-Funktion festlegen. Das Dialogfeld " Drucken einrichten " wurde jedoch durch das Dialogfeld "Seite einrichten" ersetzt und sollte nicht in neuen Anwendungen verwendet werden.

Die folgenden Kennzeichen gelten nur für das Dialogfeld "Drucken einrichten ":

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE