Freigeben über


Anpassen allgemeiner Dialogfelder

Sie können die allgemeinen Dialogfelder in ihrer Standardform verwenden oder sie anpassen. Aus Sicht des Benutzers besteht der Hauptvorteil des allgemeinen Dialogfelds in der konsistenten Darstellung und Funktionalität von Anwendung zu Anwendung. Daher ist es wichtig, dass Sie ein allgemeines Dialogfeld nur anpassen, wenn es für eine Anwendung unbedingt erforderlich ist. Andernfalls gehen die konsistente Darstellung und die einfache Codierungsschnittstelle verloren. Durch entsprechende Anpassungen bleiben so viele der ursprünglichen Steuerelemente wie möglich intakt. Das Erhöhen der Größe des Dialogfelds oder das Hinzufügen neuer Steuerelemente im bereits im Dialogfeld verfügbaren Bereich ist eine geeignete Anpassung. Das Ausblenden der ursprünglichen Steuerelemente oder das anderweitige Ändern der beabsichtigten Funktionalität der ursprünglichen Steuerelemente ist eine weniger geeignete Anpassung.

In diesem Abschnitt werden die folgenden Methoden zum Anpassen eines allgemeinen Dialogfelds erläutert:

Benutzerdefinierte Vorlagen

Gängige Dialogfelder verfügen über Standardvorlagen, die die Anzahl, den Typ und die Position der Standardsteuerelemente im Dialogfeld definieren. Sie können eine benutzerdefinierte Vorlage definieren, um Benutzern Zugriff auf zusätzliche Steuerelemente zu gewähren, die für Ihre Anwendung eindeutig sind.

Für alle gängigen Dialogfelder mit Ausnahme der Dialogfelder öffnen und speichern im Explorer-Format ändern Sie die Standardvorlage, um eine benutzerdefinierte Vorlage zu erstellen, die die Standardvorlage ersetzt. Die benutzerdefinierte Vorlage definiert den Typ und die Position der Standardsteuerelemente sowie aller zusätzlichen Steuerelemente.

Wenn Sie eine benutzerdefinierte Dialogfeldvorlage erstellen, indem Sie die Standarddialogfeldvorlage ändern, stellen Sie sicher, dass die Bezeichner für alle hinzugefügten Steuerelemente eindeutig sind und nicht mit den Bezeichnern der Standardsteuerelemente in Konflikt stehen. In der folgenden Tabelle sind der Name der Standardvorlagendatei und die Einschließendatei für jeden der allgemeinen Dialogfeldtypen aufgeführt.

Typ des Dialogfelds Vorlagendatei Includedatei
Color Color.dlg ColorDlg.h
Suchen Findtext.dlg Dlgs.h
Schriftart Font.dlg Dlgs.h
Öffnen (Mehrfachauswahl) Fileopen.dlg Dlgs.h
Öffnen (Einzelauswahl) Fileopen.dlg Dlgs.h
Seiteneinrichtung Prnsetup.dlg Dlgs.h
Drucken Prnsetup.dlg Dlgs.h
Druckeinrichtung (veraltet) Prnsetup.dlg Dlgs.h
Replace Findtext.dlg Dlgs.h

Um eine benutzerdefinierte Vorlage zu aktivieren, müssen Sie im Flags-Element der entsprechenden Struktur für das Dialogfeld ein Flag festlegen. Wenn es sich bei der Vorlage um eine Ressource in einer Anwendung oder einer Dynamic Link-Bibliothek handelt, legen Sie ein ENABLETEMPLATE-Flag im Flags-Element fest, und verwenden Sie die Elemente hInstance und lpTemplateName der Struktur, um den Modul- und Ressourcennamen zu identifizieren. Wenn sich die Vorlage bereits im Arbeitsspeicher befindet, legen Sie ein ENABLETEMPLATEHANDLE-Flag im Flags-Element fest, und verwenden Sie den hInstance-Member , um das Speicherobjekt zu identifizieren, das die Vorlage enthält.

In den meisten Fällen müssen Sie auch eine Hookprozedur für das Dialogfeld aktivieren, um Eingaben für die zusätzlichen Steuerelemente in Ihrer benutzerdefinierten Vorlage zu unterstützen und zu verarbeiten.

Für die Dialogfelder öffnen und speichern unter Explorer sind die Standardvorlagen nicht für Änderungen verfügbar. Stattdessen definiert Ihre benutzerdefinierte Vorlage ein untergeordnetes Dialogfeld, das nur die Elemente enthält, die dem Standarddialogfeld hinzugefügt werden sollen. Die benutzerdefinierte Vorlage kann auch ein statisches Steuerelement definieren, das den Speicherort des Clusters der Standardsteuerelemente im untergeordneten Dialogfeld angibt. Weitere Informationen finden Sie unter benutzerdefinierte Vorlagen im Explorer-Style.

Hookprozeduren für allgemeine Dialogfelder

Für jedes der allgemeinen Dialogfelder können Sie eine Hookprozedur aktivieren, um Nachrichten aus der Standarddialogfeldprozedur zu verarbeiten. Es gibt zwei allgemeine Arten gängiger Dialoghakenprozeduren:

  • Das Standard-Hookverfahren, das mit den gängigsten Dialogfeldern verwendet wird
  • Die Explorer Hookprozedur, die von den Dialogfeldern Öffnen und Speichern unter unterstützt wird

Wenn Sie eine Standardmäßige Hookprozedur für eines der allgemeinen Dialogfelder bereitstellen, verarbeitet die Standarddialogfeldprozedur ihre Meldungen wie folgt.

Nachricht Verarbeitung
WM_INITDIALOG Die Standarddialogfeldprozedur verarbeitet die Nachricht, bevor sie an die Hookprozedur übergeben wird. Der lParam-Parameter der Nachricht ist ein Zeiger auf die Initialisierungsstruktur, die beim Erstellen des Dialogfelds angegeben wurde.
Alle anderen Nachrichten Die Hookprozedur empfängt zuerst die Nachricht. Anschließend bestimmt der Rückgabewert der Hookprozedur, ob die Standarddialogprozedur die Nachricht verarbeitet oder ignoriert.

Für die Dialogfelder öffnen und speichern unter Explorer erhält die Hookprozedur keine Nachrichten, die für die Standardsteuerelemente im Dialogfeld vorgesehen sind. Stattdessen empfängt sie Benachrichtigungen aus dem Dialogfeld und Meldungen für alle zusätzlichen Steuerelemente, die Sie in einer benutzerdefinierten Vorlage definiert haben. Weitere Informationen finden Sie unter Hookprozeduren im Explorer-Stil.

Um eine Hookprozedur zu aktivieren, legen Sie im Flags-Member der entsprechenden Struktur für das Dialogfeld einen ENABLEHOOK-Wert fest. Wenn ein ENABLEHOOK-Flag festgelegt ist, muss ein lpfnHook-Member der Struktur die Adresse der Hookprozedur angeben.

Die folgende Tabelle zeigt den Typ der Hookprozedur, die für die einzelnen allgemeinen Dialogfelder bereitgestellt werden soll.

Typ des Dialogfelds Hook-Prozedur
Color CCHookProc
Suchen oder Ersetzen FRHookProc
Schriftart CFHookProc
Öffnen oder Speichern unter (Explorer-Format) OFNHookProc
Öffnen oder Speichern unter (alter Stil) OFNHookProcOldStyle
Drucken PrintHookProc
Seiteneinrichtung PageSetupHook

Im Dialogfeld Seite einrichten können Sie auch eine PagePaintHook-Hookprozedur angeben. Dies ist eine spezielle Hookprozedur, mit der Sie die Darstellung der Beispielseite anpassen können, die im Dialogfeld Seite einrichten angezeigt wird.

Hinweis

Das Dialogfeld Druckeinrichtung wurde durch das Dialogfeld Seite einrichten ersetzt. Anwendungen sollten das Dialogfeld Seite einrichten verwenden. Aus Gründen der Kompatibilität unterstützt die PrintDlg-Funktion jedoch weiterhin die Anzeige des Dialogfelds Druckeinrichtung . Sie können eine SetupHookProc-Hookprozedur für das Dialogfeld Druckeinrichtung bereitstellen.

Allgemeine Dialognachrichten

Allgemeine Dialogfelder verwenden Nachrichten, um Ihre Fenster- oder Hookprozedur zu benachrichtigen, wenn bestimmte Ereignisse auftreten. Darüber hinaus gibt es Nachrichten, die Sie an ein allgemeines Dialogfeld senden können, um Informationen abzurufen oder das Verhalten oder die Darstellung des Dialogfelds zu steuern. In diesem Abschnitt werden die allgemeinen Dialognachrichten beschrieben, die von der Funktion RegisterWindowMessage registriert wurden, die nachrichten, die vom Dialogfeld Schriftart und Seiteneinrichtung verwendet werden, sowie nachrichten, die von den Dialogfeldern öffnen und speichern unter Explorer verwendet werden.

Die Allgemeine Dialogfeldbibliothek definiert einen Satz von Nachrichtenzeichenfolgen. Sie können eine Konstante, die einer dieser Nachrichtenzeichenfolgen zugeordnet ist, an RegisterWindowMessage übergeben, um einen Nachrichtenbezeichner abzurufen. Anschließend können Sie den Bezeichner verwenden, um Nachrichten zu erkennen und zu verarbeiten, die aus einem allgemeinen Dialogfeld gesendet werden, oder um Nachrichten an ein allgemeines Dialogfeld zu senden. In der folgenden Tabelle werden die Nachrichtenkonstanten und deren Verwendung beschrieben.

Kontinganten Zweck
COLOROKSTRING Ein Dialogfeld Farbe sendet diese Meldung an die Hookprozedur, wenn der Benutzer eine Farbe auswählt und auf die Schaltfläche OK klickt. Die Hookprozedur kann die Farbe annehmen oder ablehnen und erzwingen, dass das Dialogfeld geöffnet bleibt.
FILEOKSTRING Ein Dialogfeld Öffnen oder Speichern unter sendet diese Meldung an die Hookprozedur, wenn der Benutzer einen Dateinamen auswählt und auf die Schaltfläche OK klickt. Die Hookprozedur kann den Dateinamen akzeptieren oder ablehnen und erzwingen, dass das Dialogfeld geöffnet bleibt. Für Explorer Dialogfelder Öffnen und Speichern unter wurde diese Nachricht durch die CDN_FILEOK Benachrichtigungsnachricht ersetzt.
FINDMSGSTRING Ein Dialogfeld Suchen oder Ersetzen sendet diese Meldung an die Fensterprozedur des übergeordneten Fensters, wenn der Benutzer auf Das Dialogfeld "Weiter suchen", "Ersetzen" oder " Alle ersetzen" klickt oder das Dialogfeld schließt. Der lParam-Parameter der Nachricht ist ein Zeiger auf eine FINDREPLACE-Struktur , die die Eingabe des Benutzers enthält.
HELPMSGSTRING Alle gängigen Dialogfelder senden diese Nachricht an die Fensterprozedur ihres übergeordneten Fensters, wenn der Benutzer auf die Schaltfläche Hilfe klickt. Für Explorer Dialogfelder Öffnen und Speichern unter wurde diese Nachricht durch die CDN_HELP-Benachrichtigung ersetzt.
LBSELCHSTRING Ein Dialogfeld Öffnen oder Speichern unter sendet diese Meldung an die Hookprozedur, wenn der Benutzer die Auswahl im Listenfeld Dateiname ändert. Für Explorer Dialogfelder Öffnen und Speichern unter wurde diese Nachricht durch die CDN_SELCHANGE Benachrichtigungsnachricht ersetzt.
SETRGBSTRING Eine Hookprozedur kann diese Nachricht an ein Dialogfeld Farbe senden, um die aktuelle Farbauswahl festzulegen.
SHAREVISTRING Ein Dialogfeld Öffnen oder Speichern unter sendet diese Meldung an die Hookprozedur, wenn eine Freigabeverletzung für die ausgewählte Datei auftritt, wenn der Benutzer auf die Schaltfläche OK klickt. Für Explorer Dialogfelder Öffnen und Speichern unter wurde diese Nachricht durch die CDN_SHAREVIOLATION Benachrichtigungsnachricht ersetzt.

Einige gängige Dialogfelder senden und empfangen andere Fensternachrichten. Die Hookprozedur für ein Dialogfeld Schriftart kann jede der WM_CHOOSEFONT_* -Nachrichten an das Dialogfeld Schriftart senden. Weitere Informationen finden Sie unter Dialogfeld "Schriftart". Das Dialogfeld Seite einrichten sendet die WM_PSD_* -Nachrichten, wenn Sie eine PagePaintHook-Hookprozedur aktiviert haben. Weitere Informationen finden Sie unter Dialogfeld "Seite einrichten".

Die Dialogfelder öffnen und speichern unter Explorer unterstützen einen Satz vordefinierter Nachrichten. Dazu gehören Benachrichtigungen, die in Form einer WM_NOTIFY Nachricht an Ihre Hookprozedur gesendet werden, und Meldungen, die Ihre Hookprozedur an das Dialogfeld senden kann. Eine vollständige Liste dieser Meldungen finden Sie unter hook procedures Explorer-Style.

Hilfesupport

Allgemeine Dialogfelder bieten kontextbezogene Hilfe für die Standardsteuerelemente des Dialogfelds. Um zusätzliche Hilfe für ein allgemeines Dialogfeld bereitzustellen, können Sie eine Hilfeschaltfläche anzeigen und Nachrichten verarbeiten, die beim Klicken des Benutzers auf die Schaltfläche generiert wurden. Die Schaltfläche Hilfe ist eine Ergänzung zur standardmäßigen kontextabhängigen Hilfe. Die Schaltfläche Hilfe ist nützlich, um den allgemeinen Zweck des Dialogfelds zu beschreiben, da sie für Ihre Anwendung gilt.

Context-Sensitive Hilfe

Alle gängigen Dialogfelder bieten kontextbezogene Hilfe für die Standardsteuerelemente des Dialogfelds. Der Benutzer kann hilfe für einzelne Steuerelemente mit einer der folgenden Methoden anzeigen:

  • Wählen Sie das Steuerelement aus, und drücken Sie die Taste F1.
  • Klicken Sie in der Titelleiste auf die Schaltfläche ? und anschließend auf ein Steuerelement.
  • Klicken sie mit der rechten Maustaste über ein Steuerelement.

Wenn Sie ein Dialogfeld anpassen, indem Sie neue Steuerelemente hinzufügen, müssen Sie auch die Hilfeunterstützung für diese Steuerelemente erweitern, indem Sie Hilfeanfragen in der Hookprozedur verarbeiten. Die Hookprozedur empfängt die folgenden Meldungen, wenn der Benutzer Hilfe anfordert.

Benutzeraktion Nachricht
Klicken Sie mit der rechten Maustaste über ein Steuerelement. WM_CONTEXTMENU
Drücken Sie die F1-Taste. WM_HELP
Klicken Sie auf der Titelleiste auf die Schaltfläche ? und dann auf ein Steuerelement. WM_HELP

Sie sollten diese Meldungen für die von Ihnen hinzugefügten Steuerelemente verarbeiten, aber lassen Sie die Standarddialogfeldprozedur die Nachrichten für die Standardsteuerelemente verarbeiten. Weitere Informationen zum Verarbeiten dieser Nachrichten finden Sie in der Hilfe.

Schaltfläche "Hilfe"

Sie können eine Hilfeschaltfläche in einem der allgemeinen Dialogfelder anzeigen, indem Sie im Element Flags der Initialisierungsstruktur für das Dialogfeld einen SHOWHELP-Wert festlegen. Wenn Sie die Schaltfläche Hilfe anzeigen, müssen Sie die Hilfeanfrage des Benutzers verarbeiten. Die Verarbeitung kann entweder in einer der Fensterprozeduren Ihrer Anwendung oder in einer Hookprozedur für das Dialogfeld erfolgen. In der Regel verarbeiten Sie die Hilfeanfrage, indem Sie die WinHelp-Funktion aufrufen.

Zum Verarbeiten von Hilfenachrichten in einer Ihrer Fensterprozeduren müssen Sie einen Nachrichtenbezeichner für die durch den HELPMSGSTRING-Wert definierte Zeichenfolge abrufen und das Fenster zum Empfangen von Nachrichten identifizieren. Um den Nachrichtenbezeichner abzurufen, geben Sie HELPMSGSTRING als Parameter in einem Aufruf der RegisterWindowMessage-Funktion an. Wenn Sie das Dialogfeld erstellen, verwenden Sie das hwndOwner-Element der Dialogfeldinitialisierungsstruktur, um das Fenster zu identifizieren, in dem die Nachrichten empfangen werden sollen. Die Dialogfeldprozedur sendet die Nachricht an die Fensterprozedur, wenn der Benutzer auf die Schaltfläche Hilfe klickt.

Um Hilfenachrichten in einer Hookprozedur zu verarbeiten, sollten Sie die WM_COMMAND Nachricht verarbeiten. Die Hookprozedur bietet Hilfe, wenn der wParam-Parameter dieser Nachricht angibt, dass der Benutzer auf die Schaltfläche Hilfe geklickt hat. Der Bezeichner der Schaltfläche Hilfe ist die pshHelp-Konstante , die in der Datei Dlgs.h definiert ist.

Hookprozeduren für die Dialogfelder "Öffnen" und "Speichern unter" im Explorer-Stil erhalten keine WM_COMMAND Nachrichten für die Schaltfläche "Hilfe". Stattdessen sendet das Dialogfeld eine CDN_HELP Benachrichtigung an die Hookprozedur, wenn auf die Schaltfläche Hilfe geklickt wird.