PRINTDLGA-Struktur (commdlg.h)

Enthält Informationen, die die PrintDlg-Funktion zum Initialisieren des Druckdialogfelds 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. Dieses Element kann ein beliebiges gültiges Fensterziehpunkt sein, oder es kann NULL sein, wenn das Dialogfeld keinen Besitzer hat.

hDevMode

Typ: HGLOBAL

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

Wenn "hDevMode" auf eingaben NULL ist, ordnet PrintDlg Arbeitsspeicher für die DEVMODE-Struktur zu, initialisiert seine Member, um die Eingabe des Benutzers anzugeben, und gibt einen Handle zurück, der 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 ) im Abschnitt [geräte] von WIN.INI nicht angezeigt wird, gibt PrintDlg einen Fehler zurück.

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

hDevNames

Typ: HGLOBAL

Ein Handle zu einem beweglichen globalen Speicherobjekt, das eine DEVNAMES-Struktur enthält. Wenn hDevNames nicht NULL für die Eingabe ist, müssen Sie einen beweglichen Speicherblock für die DEVNAMES-Struktur zuweisen und seine 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 ordnet PrintDlg Arbeitsspeicher für die DEVNAMES-Struktur zu, initialisiert seine Member, um die Eingabe des Benutzers anzugeben, und gibt einen Handle zurück, der ihn identifiziert.

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

hDC

Typ: HDC

Ein Handle zu einem Gerätekontext oder einem Informationskontext, je nachdem, ob das Flags-Element das PD_RETURNDC oder PC_RETURNIC Flag angibt. Wenn keine Kennzeichnung angegeben wird, wird der Wert dieses Elements nicht definiert. Wenn beide Flags angegeben werden, hat PD_RETURNDC Priorität.

Flags

Art: DWORD

Initialisiert das Dialogfeld "Drucken" . Wenn das Dialogfeld zurückgegeben wird, legt er diese Kennzeichen fest, um die Eingabe des Benutzers anzugeben. Dieses Element kann eine oder mehrere der folgenden Werte sein.

Wert Bedeutung
PD_ALLPAGES
0x00000000
Die Standardkennzeichnung, die angibt, dass das Optionsfeld "Alle " anfänglich ausgewählt ist. Dieses Kennzeichen wird als Platzhalter verwendet, um anzugeben, dass die PD_PAGENUMS und PD_SELECTION Flags nicht angegeben werden.
PD_COLLATE
0x00000010
Wenn dieses Kennzeichen festgelegt ist, ist das Kontrollkästchen "Zusammensetzen " aktiviert.

Wenn dieses Kennzeichen festgelegt wird, wenn die PrintDlg-Funktion zurückgegeben wird, 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 im Element "lpfnPrintHook " angegebene Hook-Prozedur. Dadurch wird die Hook-Prozedur für das Dialogfeld "Drucken " aktiviert.
PD_ENABLEPRINTTEMPLATE
0x00004000
Gibt an, dass die Elemente "hInstance " und "lpPrintTemplateName " einen Ersatz für die Standardvorlage " Drucken" angeben.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Gibt an, dass das hPrintTemplate-Element einen Datenblock identifiziert, der eine vordefinierte Dialogfeldvorlage enthält. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld "Drucken" . Das System ignoriert das lpPrintTemplateName-Element , wenn dieses Flag angegeben ist.
PD_ENABLESETUPHOOK
0x00002000
Aktiviert die im Element "lpfnSetupHook " angegebene Hook-Prozedur. Dadurch wird die Hook-Prozedur für das Dialogfeld "Drucken einrichten " aktiviert.
PD_ENABLESETUPTEMPLATE
0x00008000
Gibt an, dass die Elemente "hInstance " und "lpSetupTemplateName " einen Ersatz für die Standardvorlage " Drucken einrichten " angeben.
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Gibt an, dass das hSetupTemplate-Element einen Datenblock identifiziert, der eine vordefinierte Dialogfeldvorlage enthält. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld "Drucken einrichten ". Das System ignoriert das lpSetupTemplateName-Element , wenn dieses Flag angegeben ist.
PD_HIDEPRINTTOFILE
0x00100000
Blendet das Kontrollkästchen "In Datei drucken " aus.
PD_NONETWORKBUTTON
0x00200000
Blendet die Netzwerkschaltfläche aus und deaktiviert sie.
PD_NOPAGENUMS
0x00000008
Deaktiviert das Optionsfeld "Seiten " und die zugehörigen Bearbeitungssteuerelemente. Außerdem wird das Kontrollkästchen "Zusammenzählen " 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 Kennzeichen festgelegt ist, wird das Optionsfeld "Seiten " ausgewählt. Wenn dieses Kennzeichen festgelegt ist, wenn die PrintDlg-Funktion zurückgegeben wird, geben die Elemente "nFromPage " und "nToPage " die vom Benutzer angegebenen Start- und Endseiten an.
PD_PRINTSETUP
0x00000040
Bewirkt, dass das System das Dialogfeld " Drucken einrichten " anstelle des Dialogfelds "Drucken " anzeigt.
PD_PRINTTOFILE
0x00000020
Wenn dieses Kennzeichen festgelegt ist, ist das Kontrollkästchen "In Datei drucken " aktiviert. Wenn dieses Flag festgelegt wird, wenn die PrintDlg-Funktion zurückgegeben wird, enthält der offset, der durch das wOutputOffset-Element der DEVNAMES-Struktur angegeben ist, die Zeichenfolge "FILE:". Wenn Sie die StartDoc-Funktion aufrufen, um den Druckvorgang zu starten, geben Sie diese "FILE:"-Zeichenfolge im lpszOutput-Element der DOCINFO-Struktur an. Wenn Sie diese Zeichenfolge angeben, wird das Drucksubsystem zum Abfragen des Benutzers für den Namen der Ausgabedatei führen.
PD_RETURNDC
0x00000100
Bewirkt, dass PrintDlg einen Gerätekontext zurückgibt, der mit den Auswahlen übereinstimmen, die der Benutzer im Dialogfeld erstellt hat. Der Gerätekontext wird in hDC zurückgegeben.
PD_RETURNDEFAULT
0x00000400
Wenn dieses Kennzeichen festgelegt ist, zeigt die PrintDlg-Funktion das Dialogfeld nicht an. Stattdessen werden die hDevNames - und hDevMode-Elemente so festgelegt, dass sie auf DEVMODE - und DEVNAMES-Strukturen verarbeitet werden, die für den Systemstandarddrucker initialisiert werden. Sowohl hDevNames als auch hDevMode müssen NULL sein, oder PrintDlg gibt einen Fehler zurück.
PD_RETURNIC
0x00000200
Ähnlich wie bei der PD_RETURNDC-Kennzeichnung gibt dieses Flag anstelle eines Gerätekontexts einen Informationskontext zurück. Wenn weder PD_RETURNDC noch PD_RETURNIC angegeben wird, wird hDC bei der Ausgabe nicht definiert.
PD_SELECTION
0x00000001
Wenn dieses Kennzeichen festgelegt ist, wird 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 das Dialogfeld die Hilfeschaltfläche anzeigt. Das hwndOwner-Element muss das Fenster angeben, um die registrierten HELPMSGSTRING-Nachrichten zu empfangen, die das Dialogfeld sendet, wenn der Benutzer auf die Hilfeschaltfläche 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 Kennzeichen für eingabe fest, um anzugeben, dass Ihre Anwendung mehrere Kopien und Sortierung nicht unterstützt. In diesem Fall gibt das nCopies-Element der PRINTDLG-Struktur immer 1 zurück, und PD_COLLATE wird nie im Flags-Element festgelegt.

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

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

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

Die Elemente dmCopies und dmCollate der DEVMODE-Struktur enthalten die Kopien und Sortierung von Informationen, die vom Druckertreiber verwendet werden. Wenn dieses Kennzeichen festgelegt ist und der Druckertreiber mehrere Kopien unterstützt, gibt das dmCopies-Element die Anzahl der vom Benutzer angeforderten Kopien an. Wenn dieses Kennzeichen festgelegt ist und der Druckertreiber die Sortierung unterstützt, gibt das dmCollate-Element der DEVMODE-Struktur an, ob der Benutzer die Sortierung wünscht. Wenn dieses Kennzeichen 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 Kennzeichen nicht festgelegt ist, bevor PrintDlg aufgerufen wird, tauschen PrintDlgmöglicherweise nCopies - und dmCopies-Werte , wenn sie zurückgegeben wird. Die Problemumgehung für dieses Problem wird dmCopies verwendet, wenn der Wert größer als 1 ist, andernfalls verwenden Sie nCopies, damit Sie die tatsächliche Anzahl der Kopien abrufen, die gedruckt werden sollen, wenn PrintDlg zurückgibt.

 

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

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 FALSCH.

Wenn Sie "PrintDlg " oder "PrintDlgEx " mit PD_RETURNDC auf "TRUE " und "PD_USEDEVMODECOPIESANDCOLLATE auf "FALSE" festgelegt haben, legt die Funktion "PrintDlg " oder "PrintDlgEx " die Anzahl der Kopien im nCopies-Element der PRINTDLG-Struktur fest und legt die Anzahl der Kopien in der Struktur fest, die durch das hDC-Element der PRINTDLG-Struktur dargestellt wird.

Beim Aufrufen von GDI müssen Sie den Wert von nCopies ignorieren, den Wert als 1 betrachten und den zurückgegebenen hDC verwenden, um doppelte Kopien zu vermeiden.

nFromPage

Typ: WORD

Der Anfangswert für das Steuerelement zum Bearbeiten der Startseite.

Wenn PrintDlg zurückgibt, ist nFromPage die von dem Benutzer angegebene Startseite. Wenn das Optionsfeld "Seiten " ausgewählt ist, wenn der Benutzer auf die Schaltfläche "Ok " klickt, legt PrintDlg das PD_PAGENUMS-Kennzeichen fest und gibt erst zurück, wenn der Benutzer einen Anfangsseitenwert eingibt, der sich innerhalb des minimalen bis maximalen Seitenbereichs befindet.

Wenn der Eingabewert für nFromPage oder nToPage außerhalb des minimal/maximalen Bereichs liegt, gibt PrintDlg nur einen Fehler zurück, wenn das PD_PAGENUMS Flag angegeben ist; andernfalls zeigt es das Dialogfeld an, ändert jedoch den Out-of-Range-Wert in den Minimal- oder Höchstwert.

nToPage

Typ: WORD

Der Anfangswert für das Steuerelement zum Bearbeiten der Endseite. Wenn PrintDlg zurückgibt, ist nToPage die von dem Benutzer angegebene Endseite. Wenn das Optionsfeld "Seiten " ausgewählt ist, wenn die Verwendung auf die Schaltfläche "Ok " klickt, legt PrintDlg das PD_PAGENUMS-Kennzeichen fest und gibt erst zurück, wenn der Benutzer einen Endseitenwert eingibt, der sich innerhalb des minimalen bis maximalen Seitenbereichs befindet.

nMinPage

Typ: WORD

Der Mindestwert für den Seitenbereich, der in den Steuerelementen "Von " und " An " angegeben ist. Wenn nMinPagegleich nMaxPage ist, werden die Optionsfelder "Seiten " und die Steuerelemente zum Bearbeiten von Start- und Endseiten deaktiviert.

nMaxPage

Typ: WORD

Der Maximalwert für den seitenbereich, der in den Steuerelementen "Von " und " An " 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 PD_USEDEVMODECOPIESANDCOLLATE Flag im Flags-Element festgelegt ist, ist nCopies immer 1 zurückzugeben, und der Druckertreiber ist für das Drucken mehrerer Kopien verantwortlich. Wenn das Kennzeichen nicht festgelegt ist, ist die Anwendung dafür verantwortlich, die Anzahl der kopien zu drucken, die von nCopies angegeben werden. Weitere Informationen finden Sie in der Beschreibung des PD_USEDEVMODECOPIESANDCOLLATE Flags.

hInstance

Typ: HINSTANCE

Wenn das flag PD_ENABLEPRINTTEMPLATE oder PD_ENABLESETUPTEMPLATE im Flags-Element festgelegt ist, ist hInstance ein Handle für die Anwendung oder Modulinstanz, die die Dialogfeldvorlage enthält, die vom element lpPrintTemplateName oder lpSetupTemplateName benannt ist.

lCustData

Typ: LPARAM

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

lpfnPrintHook

Typ: LPPRINTHOOKPROC

Ein Zeiger auf eine PrintHookProc-Hook-Prozedur , die Nachrichten verarbeiten kann, die für das Dialogfeld "Drucken " vorgesehen sind. Dieses Element wird ignoriert, es sei denn, das PD_ENABLEPRINTHOOK Flag wird im Flags-Element festgelegt.

lpfnSetupHook

Typ: LPSETUPHOOKPROC

Ein Zeiger auf eine SetupHookProc-Hook-Prozedur , die Nachrichten verarbeiten kann, die für das Dialogfeld "Drucken einrichten " vorgesehen sind. Dieses Element wird ignoriert, es sei denn, das PD_ENABLESETUPHOOK Flag wird im Flags-Element festgelegt.

lpPrintTemplateName

Typ: LPCTSTR

Der Name der Vorlagenressource des Dialogfelds im vom hInstance-Element identifizierten Modul. Diese Vorlage ersetzt die Standardvorlage " Drucken" . Dieses Element wird ignoriert, es sei denn, das PD_ENABLEPRINTTEMPLATE Flag wird im Flags-Element festgelegt.

lpSetupTemplateName

Typ: LPCTSTR

Der Name der Vorlagenressource des Dialogfelds im vom hInstance-Element identifizierten Modul. Diese Vorlage ersetzt die Standardvorlage für das Dialogfeld "Drucken einrichten ". Dieses Element wird ignoriert, es sei denn, das PD_ENABLESETUPTEMPLATE Flag wird im Flags-Element 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 " 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 Standarddialogfeldvorlage "Drucken einrichten ".

Bemerkungen

Wenn sowohl hDevMode als auch hDevNames NULL sind, initialisiert PrintDlg das Dialogfeld mithilfe des aktuellen Standarddruckers. 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 wDeviceOffset-Name ist nicht. Wenn die Namen "wDeviceOffset " und " dmDeviceName " nicht identisch sind, initialisiert PrintDlg das Dialogfeld mithilfe des von wDeviceOffset angegebenen Druckers.

Wenn das PD_RETURNDEFAULT-Flag festgelegt ist und sowohl hDevMode als auch hDevNames NULL sind, verwendet PrintDlg die hDevNames- und hDevMode-Member, um Informationen über den 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äprozessorkonstanten automatisch auswählt. Das Mischen der Verwendung des Codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann dazu führen, dass keine Übereinstimmungen auftreten, 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]
Header commdlg.h (enthalten Windows.h)

Weitere Informationen

Allgemeine Dialogfeldbibliothek

Konzept

DEVMODE

DEVNAMES

PrintDlg

Referenz

WM_INITDIALOG