Freigeben über


PRINTDLGA-Struktur (commdlg.h)

Enthält Informationen, die die PrintDlg-Funktion zum Initialisieren des Dialogfelds Drucken verwendet. Nachdem der Benutzer das Dialogfeld geschlossen hat, verwendet das System diese Struktur, um Informationen über die Auswahl des Benutzers zurückzugeben.

Syntax

typedef struct tagPDA {
  DWORD           lStructSize;
  HWND            hwndOwner;
  HGLOBAL         hDevMode;
  HGLOBAL         hDevNames;
  HDC             hDC;
  DWORD           Flags;
  WORD            nFromPage;
  WORD            nToPage;
  WORD            nMinPage;
  WORD            nMaxPage;
  WORD            nCopies;
  HINSTANCE       hInstance;
  LPARAM          lCustData;
  LPPRINTHOOKPROC lpfnPrintHook;
  LPSETUPHOOKPROC lpfnSetupHook;
  LPCSTR          lpPrintTemplateName;
  LPCSTR          lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;

Member

lStructSize

Art: DWORD

Die Strukturgröße in Bytes.

hwndOwner

Typ: HWND

Ein Handle für das Fenster, das das Dialogfeld besitzt. Bei diesem Member kann es sich um ein beliebiges gültiges Fensterhandle handeln, oder es kann NULL sein, wenn das Dialogfeld keinen Besitzer hat.

hDevMode

Typ: HGLOBAL

Ein Handle für ein bewegliches globales Speicherobjekt, das eine DEVMODE-Struktur enthält. Wenn hDevMode bei der Eingabe nicht NULL ist, müssen Sie einen beweglichen Speicherblock für die DEVMODE-Struktur zuordnen und dessen Member initialisieren. Die PrintDlg-Funktion verwendet die Eingabedaten, um die Steuerelemente im Dialogfeld zu initialisieren. Wenn PrintDlg zurückgibt, geben die DEVMODE-Member die Eingabe des Benutzers an.

Wenn hDevMode bei der Eingabe NULL ist, weist PrintDlg Arbeitsspeicher für die DEVMODE-Struktur zu, initialisiert die Member, um die Eingabe des Benutzers anzugeben, und gibt ein Handle zurück, das ihn identifiziert.

Wenn der Gerätetreiber für den angegebenen Drucker keine erweiterten Gerätemodi unterstützt, ist hDevModeNULL , wenn PrintDlg zurückgibt.

Wenn der Gerätename (angegeben durch das dmDeviceName-Element der DEVMODE-Struktur ) nicht im Abschnitt [devices] von WIN.INI angezeigt wird, gibt PrintDlg einen Fehler zurück.

Weitere Informationen zu den Elementen hDevMode und hDevNames finden Sie im Abschnitt Hinweise am Ende dieses Themas.

hDevNames

Typ: HGLOBAL

Ein Handle für ein bewegliches globales Speicherobjekt, das eine DEVNAMES-Struktur enthält. Wenn hDevNames bei der Eingabe nicht NULL ist, müssen Sie einen beweglichen Speicherblock für die DEVNAMES-Struktur zuweisen und deren Member initialisieren. Die PrintDlg-Funktion verwendet die Eingabedaten, um die Steuerelemente im Dialogfeld zu initialisieren. Wenn PrintDlg zurückgibt, enthalten die DEVNAMES-Member Informationen für den vom Benutzer ausgewählten Drucker. Sie können diese Informationen verwenden, um einen Gerätekontext oder einen Informationskontext zu erstellen.

Das hDevNames-Element kann NULL sein. In diesem Fall weist PrintDlg Arbeitsspeicher für die DEVNAMES-Struktur zu, initialisiert seine Member, um die Eingabe des Benutzers anzugeben, und gibt ein Handle zurück, das ihn identifiziert.

Weitere Informationen zu den Elementen hDevMode und hDevNames finden Sie im Abschnitt Hinweise am Ende dieses Themas.

hDC

Typ: HDC

Ein Handle für einen Gerätekontext oder einen Informationskontext, je nachdem, ob das Flags-Element das PD_RETURNDC - oder PC_RETURNIC-Flag angibt. Wenn keines der Flags angegeben ist, ist der Wert dieses Members nicht definiert. Wenn beide Flags angegeben sind, hat PD_RETURNDC Priorität.

Flags

Art: DWORD

Initialisiert das Dialogfeld Drucken . Wenn das Dialogfeld zurückgibt, legt es diese Flags fest, um die Eingabe des Benutzers anzugeben. Bei diesem Member kann es sich um einen oder mehrere der folgenden Werte handeln.

Wert Bedeutung
PD_ALLPAGES
0x00000000
Das Standardflag, das angibt, dass das Optionsfeld Alle anfänglich ausgewählt ist. Dieses Flag wird als Platzhalter verwendet, um anzugeben, dass die flags PD_PAGENUMS und PD_SELECTION nicht angegeben sind.
PD_COLLATE
0x00000010
Wenn dieses Flag festgelegt ist, ist das Kontrollkästchen Sortieren aktiviert.

Wenn dieses Flag festgelegt wird, wenn die PrintDlg-Funktion zurückgibt, muss die Anwendung die Sortierung mehrerer Kopien simulieren. Weitere Informationen finden Sie in der Beschreibung des PD_USEDEVMODECOPIESANDCOLLATE Flags.

Siehe PD_NOPAGENUMS.

PD_DISABLEPRINTTOFILE
0x00080000
Deaktiviert das Kontrollkästchen In Datei drucken .
PD_ENABLEPRINTHOOK
0x00001000
Aktiviert die hook-Prozedur, die im lpfnPrintHook-Member angegeben ist. Dadurch wird die Hookprozedur für das Dialogfeld Drucken aktiviert.
PD_ENABLEPRINTTEMPLATE
0x00004000
Gibt an, dass die Elemente hInstance und lpPrintTemplateName einen Ersatz für die Standardvorlage des Dialogfelds Drucken angeben.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Gibt an, dass das hPrintTemplate-Element einen Datenblock identifiziert, der eine vorinstallierte Dialogfeldvorlage enthält. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld Drucken . Das System ignoriert den lpPrintTemplateName-Member , wenn dieses Flag angegeben ist.
PD_ENABLESETUPHOOK
0x00002000
Aktiviert die Im lpfnSetupHook-Member angegebene Hookprozedur. Dadurch wird die Hookprozedur für das Dialogfeld Druckeinrichtung aktiviert.
PD_ENABLESETUPTEMPLATE
0x00008000
Gibt an, dass die Elemente hInstance und lpSetupTemplateName einen Ersatz für die Standardmäßige Dialogfeldvorlage Print Setup angeben.
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Gibt an, dass das hSetupTemplate-Element einen Datenblock identifiziert, der eine vorinstallierte Dialogfeldvorlage enthält. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld Druckeinrichtung . Das System ignoriert das Element lpSetupTemplateName , wenn dieses Flag angegeben ist.
PD_HIDEPRINTTOFILE
0x00100000
Blendet das Kontrollkästchen In Datei drucken aus.
PD_NONETWORKBUTTON
0x00200000
Blendet die Schaltfläche Netzwerk aus und deaktiviert sie.
PD_NOPAGENUMS
0x00000008
Deaktiviert das Optionsfeld Seiten und die zugehörigen Bearbeitungssteuerelemente. Außerdem wird das Kontrollkästchen Sortieren im Dialogfeld angezeigt.
PD_NOSELECTION
0x00000004
Deaktiviert das Optionsfeld Auswahl .
PD_NOWARNING
0x00000080
Verhindert, dass die Warnmeldung angezeigt wird, wenn kein Standarddrucker vorhanden ist.
PD_PAGENUMS
0x00000002
Wenn dieses Flag festgelegt ist, ist das Optionsfeld Seiten ausgewählt. Wenn dieses Flag festgelegt wird, wenn die PrintDlg-Funktion zurückgibt, geben die Member nFromPage und nToPage die vom Benutzer angegebenen Anfangs- und Endseiten an.
PD_PRINTSETUP
0x00000040
Bewirkt, dass das System das Dialogfeld Druckeinrichtung anstelle des Dialogfelds Drucken anzeigt.
PD_PRINTTOFILE
0x00000020
Wenn dieses Flag festgelegt ist, ist das Kontrollkästchen In Datei drucken aktiviert. Wenn dieses Flag festgelegt wird, wenn die PrintDlg-Funktion zurückgibt, enthält der durch das wOutputOffset-Element der DEVNAMES-Struktur angegebene Offset die Zeichenfolge "FILE:". Wenn Sie die StartDoc-Funktion aufrufen, um den Druckvorgang zu starten, geben Sie diese Zeichenfolge "FILE:" im lpszOutput-Element der DOCINFO-Struktur an. Wenn Sie diese Zeichenfolge angeben, fragt das Drucksubsystem den Benutzer nach dem Namen der Ausgabedatei ab.
PD_RETURNDC
0x00000100
Bewirkt, dass PrintDlg einen Gerätekontext zurückgibt, der den Vom Benutzer im Dialogfeld vorgenommenen Auswahlen entspricht. Der Gerätekontext wird in hDC zurückgegeben.
PD_RETURNDEFAULT
0x00000400
Wenn dieses Flag festgelegt ist, zeigt die PrintDlg-Funktion das Dialogfeld nicht an. Stattdessen werden die Elemente hDevNames und hDevMode für DEVMODE - und DEVNAMES-Strukturen festgelegt, die für den Standarddrucker des Systems initialisiert werden. Sowohl hDevNames als auch hDevMode müssen NULL sein, andernfalls gibt PrintDlg einen Fehler zurück.
PD_RETURNIC
0x00000200
Ähnlich wie beim PD_RETURNDC-Flag , mit der Ausnahme, dass dieses Flag einen Informationskontext und keinen Gerätekontext zurückgibt. Wenn weder PD_RETURNDC noch PD_RETURNIC angegeben ist, ist hDC bei der Ausgabe nicht definiert.
PD_SELECTION
0x00000001
Wenn dieses Flag festgelegt ist, ist das Optionsfeld Auswahl ausgewählt. Wenn weder PD_PAGENUMS noch PD_SELECTION festgelegt ist, wird das Optionsfeld Alle ausgewählt.
PD_SHOWHELP
0x00000800
Bewirkt, dass im Dialogfeld die Schaltfläche Hilfe angezeigt wird. Das hwndOwner-Element muss das Fenster angeben, in dem die registrierten HELPMSGSTRING-Nachrichten empfangen werden, die das Dialogfeld sendet, wenn der Benutzer auf die Schaltfläche Hilfe klickt.
PD_USEDEVMODECOPIES
0x00040000
Identisch mit PD_USEDEVMODECOPIESANDCOLLATE.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
Dieses Flag gibt an, ob Ihre Anwendung mehrere Kopien und Sortierung unterstützt. Legen Sie dieses Flag für die Eingabe fest, um anzugeben, dass Ihre Anwendung mehrere Kopien und Sortierungen nicht unterstützt. In diesem Fall gibt der nCopies-Member der PRINTDLG-Struktur immer 1 zurück, und PD_COLLATE wird nie im Flags-Element festgelegt.

Wenn dieses Flag nicht festgelegt ist, ist die Anwendung für das Drucken und Sortieren mehrerer Kopien verantwortlich. In diesem Fall gibt der nCopies-Member der PRINTDLG-Struktur die Anzahl der Kopien an, die der Benutzer drucken möchte, und das flag PD_COLLATE im Flags-Element gibt an, ob der Benutzer sortierungsaben möchte.

Unabhängig davon, ob dieses Flag festgelegt ist, kann eine Anwendung anhand von nCopies bestimmen und PD_COLLATE , wie viele Kopien gerendert werden sollen und ob sie sortiert gedruckt werden sollen.

Wenn dieses Flag festgelegt ist und der Druckertreiber mehrere Kopien nicht unterstützt, ist das Bearbeitungssteuerelement Kopien deaktiviert. Wenn dieses Flag festgelegt ist und der Druckertreiber die Sortierung nicht unterstützt, ist das Kontrollkästchen Sortieren deaktiviert.

Die Elemente dmCopies und dmCollate der DEVMODE-Struktur enthalten die vom Druckertreiber verwendeten Kopien und Sortierinformationen. Wenn dieses Flag festgelegt ist und der Druckertreiber mehrere Kopien unterstützt, gibt das dmCopies-Element die Anzahl der vom Benutzer angeforderten Kopien an. Wenn dieses Flag festgelegt ist und der Druckertreiber die Sortierung unterstützt, gibt der dmCollate-Member der DEVMODE-Struktur an, ob der Benutzer eine Sortierung wünscht. Wenn dieses Flag nicht festgelegt ist, gibt das dmCopies-Element immer 1 zurück, und das dmCollate-Element ist immer null.

Bekanntes Problem unter Windows 2000/XP/2003: Wenn dieses Flag vor dem Aufruf von PrintDlg nicht festgelegt ist, kann PrintDlg bei der Rückgabe nCopies - und dmCopies-Werte austauschen. Die Problemumgehung für dieses Problem besteht darin , dmCopies zu verwenden, wenn der Wert größer als 1 ist, andernfalls verwenden Sie nCopies, damit Sie die tatsächliche Anzahl von Kopien abrufen, die gedruckt werden sollen, wenn PrintDlg zurückgibt.

 

Um sicherzustellen, dass PrintDlg oder PrintDlgEx die richtigen Werte in den Elementen dmCopies und dmCollate der DEVMODE-Struktur zurückgibt, legen Sie PD_RETURNDC = TRUE und PD_USEDEVMODECOPIESANDCOLLATE = TRUE fest. Dabei ist der nCopies-Member der PRINTDLG-Struktur immer 1, und PD_COLLATE ist immer FALSE.

Um sicherzustellen, dass PrintDlg oder PrintDlgEx die richtigen Werte in nCopies und PD_COLLATE zurückgibt, legen Sie PD_RETURNDC = TRUE und PD_USEDEVMODECOPIESANDCOLLATE = FALSE fest. Dabei ist dmCopies immer 1 und dmCollate ist immer FALSE.

Wenn Sie unter Windows Vista und Windows 7 PrintDlg oder PrintDlgEx aufrufen, wobei PD_RETURNDC auf TRUE und PD_USEDEVMODECOPIESANDCOLLATE auf FALSE festgelegt ist, legt die PrintDlg- oder PrintDlgEx-Funktion die Anzahl der Kopien im nCopies-Member der PRINTDLG-Struktur fest und legt die Anzahl der Kopien in der Struktur fest, die durch den hDC-Member der PRINTDLG-Struktur dargestellt wird.

Wenn Sie GDI aufrufen, müssen Sie den Wert von nCopies ignorieren, den Wert als 1 betrachten und das zurückgegebene hDC verwenden, um das Drucken doppelter Kopien zu vermeiden.

nFromPage

Typ: WORD

Der Anfangswert für das Bearbeitungssteuerelement der Startseite.

Wenn PrintDlg zurückgibt, ist nFromPage die vom Benutzer angegebene Startseite. Wenn das Optionsfeld Seiten ausgewählt ist, wenn der Benutzer auf die Schaltfläche Ok klickt, legt PrintDlg das flag PD_PAGENUMS fest und wird erst zurückgegeben, wenn der Benutzer einen Wert für die Startseite eingibt, der innerhalb des minimalen bis maximalen Seitenbereichs liegt.

Wenn der Eingabewert für nFromPage oder nToPage außerhalb des minimalen/maximalen Bereichs liegt, gibt PrintDlg nur dann einen Fehler zurück, wenn das flag PD_PAGENUMS angegeben ist. Andernfalls wird das Dialogfeld angezeigt, aber der Wert außerhalb des Bereichs in den minimalen oder maximalen Wert geändert.

nToPage

Typ: WORD

Der Anfangswert für das Bearbeitungssteuerelement für die endende Seite. Wenn PrintDlg zurückgibt, ist nToPage die vom Benutzer angegebene Endseite. Wenn das Optionsfeld Seiten ausgewählt ist, wenn die Verwendung auf die Schaltfläche Okay klickt, legt PrintDlg das flag PD_PAGENUMS fest und gibt erst zurück, wenn der Benutzer einen Endseitenwert eingibt, der innerhalb des minimalen bis maximalen Seitenbereichs liegt.

nMinPage

Typ: WORD

Der Mindestwert für den Seitenbereich, der in den Steuerelementen "Von " und " Bis " für die Seitenbearbeitung angegeben ist. Wenn nMinPagegleich nMaxPage ist, sind das Optionsfeld Pages und die Bearbeitungssteuerelemente für starte und endende Seiten deaktiviert.

nMaxPage

Typ: WORD

Der Maximalwert für den Seitenbereich, der in den Bearbeitungssteuerelementen Von und Bis angegeben ist.

nCopies

Typ: WORD

Die anfängliche Anzahl von Kopien für das Kopierbearbeitungssteuerelement , wenn hDevModeNULL ist; Andernfalls enthält das dmCopies-Element der DEVMODE-Struktur den Anfangswert. Wenn PrintDlg zurückgibt, enthält nCopies die tatsächliche Anzahl der zu druckenden Kopien. Dieser Wert hängt davon ab, ob die Anwendung oder der Druckertreiber für das Drucken mehrerer Kopien verantwortlich ist. Wenn das flag PD_USEDEVMODECOPIESANDCOLLATE im Flags-Element festgelegt ist, ist nCopies bei der Rückgabe immer 1, und der Druckertreiber ist für das Drucken mehrerer Kopien verantwortlich. Wenn das Flag nicht festgelegt ist, ist die Anwendung für das Drucken der von nCopies angegebenen Anzahl von Kopien verantwortlich. Weitere Informationen finden Sie in der Beschreibung des flags PD_USEDEVMODECOPIESANDCOLLATE .

hInstance

Typ: HINSTANCE

Wenn das PD_ENABLEPRINTTEMPLATE- oder PD_ENABLESETUPTEMPLATE-Flag im Flags-Element festgelegt ist, ist hInstance ein Handle für die Anwendung oder das Modul instance, das die Dialogfeldvorlage mit dem Namen lpPrintTemplateName oder lpSetupTemplateName-Member enthält.

lCustData

Typ: LPARAM

Anwendungsdefinierte Daten, die das System an die Hookprozedur übergibt, die vom lpfnPrintHook - oder lpfnSetupHook-Member identifiziert wird. Wenn das System die WM_INITDIALOG Nachricht an die Hookprozedur sendet, ist der lParam-Parameter der Nachricht ein Zeiger auf die PRINTDLG-Struktur , die beim Erstellen des Dialogs angegeben wurde. Die Hookprozedur kann diesen Zeiger verwenden, um den lCustData-Wert abzurufen.

lpfnPrintHook

Typ: LPPRINTHOOKPROC

Ein Zeiger auf eine PrintHookProc-Hookprozedur , die Nachrichten verarbeiten kann, die für das Dialogfeld Drucken vorgesehen sind. Dieser Member wird ignoriert, es sei denn, das flag PD_ENABLEPRINTHOOK im Flags-Element festgelegt ist.

lpfnSetupHook

Typ: LPSETUPHOOKPROC

Ein Zeiger auf eine SetupHookProc-Hookprozedur , die Meldungen verarbeiten kann, die für das Dialogfeld Druckeinrichtung vorgesehen sind. Dieser Member wird ignoriert, es sei denn , das flag PD_ENABLESETUPHOOK ist im Flags-Member festgelegt.

lpPrintTemplateName

Typ: LPCTSTR

Der Name der Dialogfeldvorlagenressource in dem Modul, das vom hInstance-Element identifiziert wird. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld Drucken . Dieser Member wird ignoriert, es sei denn, das PD_ENABLEPRINTTEMPLATE-Flag ist im Flags-Element festgelegt.

lpSetupTemplateName

Typ: LPCTSTR

Der Name der Dialogfeldvorlagenressource in dem Modul, das vom hInstance-Element identifiziert wird. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld "Drucken einrichten ". Dieser Member wird ignoriert, es sei denn, das flag PD_ENABLESETUPTEMPLATE ist im Flags-Member festgelegt.

hPrintTemplate

Typ: HGLOBAL

Wenn das flag PD_ENABLEPRINTTEMPLATEHANDLE im Flags-Element festgelegt ist, ist hPrintTemplate ein Handle für ein Speicherobjekt, das eine Dialogfeldvorlage enthält. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld Drucken .

hSetupTemplate

Typ: HGLOBAL

Wenn das flag PD_ENABLESETUPTEMPLATEHANDLE im Flags-Element festgelegt ist, ist hSetupTemplate ein Handle für ein Speicherobjekt, das eine Dialogfeldvorlage enthält. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld "Drucken einrichten ".

Hinweise

Wenn sowohl hDevMode als auch hDevNamesNULL sind, initialisiert PrintDlg das Dialogfeld mit dem aktuellen Standarddrucker. Um das Dialogfeld für einen anderen Drucker zu initialisieren, verwenden Sie das wDeviceOffset-Element der DEVNAMES-Struktur , um den Namen des Druckers anzugeben.

Beachten Sie, dass das dmDeviceName-Element der DEVMODE-Struktur auch einen Druckernamen angibt. DmDeviceName ist jedoch auf 32 Zeichen beschränkt, und der Name wDeviceOffset ist nicht. Wenn die Namen "wDeviceOffset" und "dmDeviceName " nicht übereinstimmen, initialisiert PrintDlg das Dialogfeld mit dem von wDeviceOffset angegebenen Drucker.

Wenn das flag PD_RETURNDEFAULT festgelegt ist und sowohl hDevMode als auch hDevNamesNULL sind, verwendet PrintDlg die Mitglieder hDevNames und hDevMode , um Informationen zum aktuellen Standarddrucker zurückzugeben, ohne das Dialogfeld anzuzeigen.

Hinweis

Der commdlg.h-Header definiert PRINTDLG als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile commdlg.h (einschließlich Windows.h)

Weitere Informationen

Allgemeine Dialogfeldbibliothek

Konzept

DEVMODE

DEVNAMES

PrintDlg

Referenz

WM_INITDIALOG