Freigeben über


Seite einrichten (Dialogfeld)

Zeigt ein modales Dialogfeld an, mit dem der Benutzer die folgenden Attribute der gedruckten Seite festlegen kann:

  • Der Papiertyp (Umschlag, Recht, Brief usw.)
  • Die Papierquelle (handgeführte Vorschub, Traktorvorschub, Blattzuführung usw.)
  • Die Seitenausrichtung (Hoch- oder Querformat)
  • Die Breite der Seitenränder

Sie erstellen und zeigen ein Dialogfeld Seiteneinrichtung an, indem Sie eine PAGESETUPDLG-Struktur initialisieren und die Struktur an die PageSetupDlg-Funktion übergeben. Die im Dialogfeld angezeigten Attribute variieren jedoch je nach den Funktionen des Druckers. Die folgende Abbildung zeigt ein typisches Dialogfeld "Seite einrichten ".

Dialogfeld

Wenn der Benutzer auf die Schaltfläche OK klickt, gibt PageSetupDlgTRUE zurück, nachdem verschiedene Elemente in der PAGESETUPDLG-Struktur festgelegt wurden, um die Auswahl des Benutzers anzugeben. Die Elemente ptPaperSize und rtMargin enthalten die vom Benutzer angegebenen Werte. Die Elemente hDevMode und hDevNames enthalten globale Speicherhandles für die DEVMODE - und DEVNAMES-Strukturen . Diese Strukturen enthalten zusätzliche Seiteninformationen sowie Informationen zum Drucker. Sie können diese Informationen verwenden, um die Ausgabe vorzubereiten, die an den ausgewählten Drucker gesendet werden soll.

Wenn der Benutzer das Dialogfeld Seite einrichten abbricht oder ein Fehler auftritt, gibt PageSetupDlgFALSE zurück. Um die Fehlerursache zu ermitteln, rufen Sie die Funktion CommDlgExtendedError auf, um den erweiterten Fehlerwert abzurufen.

In diesem Abschnitt werden die folgenden Themen erläutert.

Initialisieren des Dialogfelds "Seite einrichten"

Standardmäßig werden im Dialogfeld Seite einrichten Informationen zum aktuellen Standarddrucker angezeigt. Um das Dialogfeld anzuweisen, Informationen zu einem bestimmten Drucker anzuzeigen, legen Sie die Member einer DEVMODE- oder DEVNAMES-Struktur fest, und weisen Sie die globalen Speicherhandles dieser Strukturen dem entsprechenden Member in PAGESETUPDLG zu. Wenn Sie den Namen eines Druckers angeben, der derzeit nicht installiert ist, wird im Dialogfeld eine Fehlermeldung angezeigt. Um zu verhindern, dass im Dialogfeld Fehlermeldungen angezeigt werden, verwenden Sie den wert PSD_NOWARNING . Um Informationen zum Standarddrucker abzurufen, ohne das Dialogfeld Seite einrichten anzuzeigen, verwenden Sie den wert PSD_RETURNDEFAULT .

Wenn das Standardmesssystem Zoll ist, verwendet das Dialogfeld Tausendstel Zoll als Standardmaßeinheit. Wenn das Standardmesssystem Metrik ist, verwendet das Dialogfeld Hundertstel Millimeter als Standardmesseinheit. Um die Standardmaßeinheit zu überschreiben, legen Sie das PSD_INHUNDREDTHSOFMILLIMETERS - oder PSD_INTHOUSANDTHSOFINCHES-Flag im Flags-Element der PAGESETUPDLG-Struktur fest.

Die Anfangswerte für die Ränder sind standardmäßig ein Zoll. Wenn Sie das flag PSD_MARGINS festlegen, werden im Dialogfeld die anfänglichen Randwerte angezeigt, die im rtMargin-Element angegeben sind. Die Mindestwerte, die der Benutzer für die Ränder angeben kann, sind die vom Drucker zulässigen Mindestränder. Wenn Sie das PSD_MINMARGINS-Flag festlegen, erzwingt das Dialogfeld die im rtMinMargin-Member angegebenen Mindestränder.

Um zu verhindern, dass Benutzer bestimmte Optionen auswählen, legen Sie eine beliebige Kombination der folgenden Flags fest, um die entsprechenden Steuerelemente zu deaktivieren.

Flag Bedeutung
PSD_DISABLEMARGINS Deaktiviert die Bearbeitungssteuerelemente, in denen der Benutzer die Randeinstellungen eingibt.
PSD_DISABLEORIENTATION Deaktiviert die Optionsfelder Hochformat und Querformat .
PSD_DISABLEPAPER Deaktiviert die Steuerelemente für die Auswahl des Papierformats und der Papierquelle.
PSD_DISABLEPRINTER Deaktiviert die Schaltfläche Drucker .

 

Anpassen des Dialogfelds "Seite einrichten"

Sie können eine benutzerdefinierte Vorlage für das Dialogfeld Seite einrichten bereitstellen, z. B. wenn Sie zusätzliche Steuerelemente einschließen möchten, die für Ihre Anwendung eindeutig sind. Die PageSetupDlg-Funktion verwendet Ihre benutzerdefinierte Vorlage anstelle der Standardvorlage.

So stellen Sie eine benutzerdefinierte Vorlage für das Dialogfeld Seite einrichten bereit

  1. Erstellen Sie die benutzerdefinierte Vorlage, indem Sie die in der Datei Prnsetup.dlg angegebene Standardvorlage ändern. Die Steuerelementbezeichner, die in der Standardmäßigen Dialogfeldvorlage "Seite einrichten " verwendet werden, sind in der Datei Dlgs.h definiert.
  2. Verwenden Sie die PAGESETUPDLG-Struktur , um die Vorlage wie folgt zu aktivieren:
      • Wenn es sich bei Ihrer benutzerdefinierten Vorlage um eine Ressource in einer Anwendung oder einer Bibliothek mit dynamischem Link handelt, legen Sie das PSD_ENABLEPAGESETUPTEMPLATE-Flag im Flags-Element fest. Verwenden Sie die Elemente hInstance und lpPageSetupTemplateName der Struktur, um den Modul- und Ressourcennamen zu identifizieren.

        -Oder-

      • Wenn sich Ihre benutzerdefinierte Vorlage bereits im Arbeitsspeicher befindet, legen Sie das flag PSD_ENABLEPAGESETUPTEMPLATEHANDLE fest. Verwenden Sie das hPageSetupTemplate-Element , um das Speicherobjekt zu identifizieren, das die Vorlage enthält.

Zum Filtern von Nachrichten, die an die Dialogfeldprozedur gesendet werden, können Sie eine PageSetupHook-Hookprozedur bereitstellen. Wenn Sie eine benutzerdefinierte Vorlage verwenden, um zusätzliche Steuerelemente zu definieren, müssen Sie eine PageSetupHook-Hookprozedur bereitstellen, um Eingaben für Ihre Steuerelemente zu verarbeiten. Darüber hinaus können Sie eine PagePaintHook-Hookprozedur bereitstellen, um den Inhalt der Im Dialogfeld Seite einrichten angezeigten Beispielseite anzupassen. Weitere Informationen zur PagePaintHook-Hook-Prozedur finden Sie unter Anpassen der Beispielseite.

So aktivieren Sie eine PageSetupHook-Hookprozedur

  1. Legen Sie das PSD_ENABLEPAGESETUPHOOK-Flag im Flags-Element der PAGESETUPDLG-Struktur fest.
  2. Geben Sie die Adresse der Hookprozedur im Element lpfnPageSetupHook an.

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

Anpassen der Beispielseite

Das Dialogfeld Seite einrichten enthält ein Bild einer Beispielseite, die zeigt, wie sich die Auswahl des Benutzers auf die Darstellung der gedruckten Ausgabe auswirkt. Das Bild besteht aus einem Rechteck, das den ausgewählten Papier- oder Umschlagtyp darstellt, mit einem gepunkteten Rechteck, das die aktuellen Ränder darstellt, und aus partiellen Zeichen (griechischem Text), um zu zeigen, wie Text auf der gedruckten Seite aussieht.

Wenn Sie die PageSetupDlg-Funktion aufrufen, können Sie eine PagePaintHook-Hookprozedur bereitstellen, um die Darstellung der Beispielseite anzupassen.

So aktivieren Sie eine PagePaintHook-Hookprozedur

  1. Legen Sie das PSD_ENABLEPAGEPAINTHOOK-Flag im Flags-Element der PAGESETUPDLG-Struktur fest.
  2. Geben Sie die Adresse der Hookprozedur im lpfnPagePaintHook-Element an.

Wenn das Dialogfeld den Inhalt der Beispielseite zeichnen soll, empfängt die Hookprozedur die folgenden Meldungen in der Reihenfolge, in der sie aufgelistet sind.

Nachricht Bedeutung
WM_PSD_PAGESETUPDLG Das Dialogfeld ist dabei, die Beispielseite zu zeichnen. Die Hookprozedur kann diese Meldung verwenden, um den Inhalt der Beispielseite vorzubereiten.
WM_PSD_FULLPAGERECT Das Dialogfeld ist dabei, die Beispielseite zu zeichnen. Diese Meldung gibt das begrenzungsbasierte Rechteck der Beispielseite an.
WM_PSD_MINMARGINRECT Das Dialogfeld ist dabei, die Beispielseite zu zeichnen. Diese Meldung gibt das Randrechteck an.
WM_PSD_MARGINRECT Das Dialogfeld zeichnet das Randrechteck.
WM_PSD_GREEKTEXTRECT Das Dialogfeld zeichnet den griechischen Text im Randrechteck.
WM_PSD_ENVSTAMPRECT Das Dialogfeld zeichnet das Umschlag-Stempel-Rechteck einer Umschlagbeispielseite ein. Diese Nachricht wird nur für Umschläge gesendet.
WM_PSD_YAFULLPAGERECT Das Dialogfeld zeichnet den Teil der Rücksendeadresse einer Umschlagbeispielseite. Diese Nachricht wird für Umschläge und andere Papierformate gesendet.

 

Wenn die Hookprozedur true für eine der ersten drei Meldungen einer Zeichnungssequenz (WM_PSD_PAGESETUPDLG, WM_PSD_FULLPAGERECT oder WM_PSD_MINMARGINRECT) zurückgibt, sendet das Dialogfeld keine weiteren Nachrichten und zeichnet erst auf der Beispielseite, wenn das System die Beispielseite das nächste Mal neu zeichnen muss. Wenn die Hookprozedur für alle drei Nachrichten FALSE zurückgibt, sendet das Dialogfeld die restlichen Meldungen der Zeichnungssequenz.

Wenn die Hookprozedur true für eine der verbleibenden Nachrichten in einer Zeichnungssequenz zurückgibt, zeichnet das Dialogfeld den entsprechenden Teil der Beispielseite nicht. Wenn die Hookprozedur false für eine dieser Nachrichten zurückgibt, zeichnet das Dialogfeld diesen Teil der Beispielseite.

Um zu verhindern, dass das Dialogfeld den Inhalt der Beispielseite zeichnet, können Sie das PSD_DISABLEPAGEPAINTING-Flag festlegen. Dieses Flag wirkt sich nicht auf die PagePaintHook-Hookprozedur aus, die weiterhin alle WM_PSD_* -Nachrichten empfängt und den Inhalt der Beispielseite zeichnen kann.