Explorer-Style-Hook-Prozeduren

Sie können eine Explorer-Stil Öffnen oder Speichern unter im Dialogfeld Anpassen, durch die Bereitstellung einer Hook-Prozedur, eine benutzerdefinierte Vorlage, oder beides. Wenn Sie eine Hook-Prozedur für ein Dialogfeld mit einer Explorer-Stil angeben, erstellt das System ein Dialogfeld, das ein untergeordnetes Element im Dialogfeld Standard ist. Die Hook-Prozedur fungiert als die Dialogfeld-Prozedur für das Kind-Dialogfeld. Das Dialogfeld Kind basiert auf der benutzerdefinierten Vorlage, oder eine Standard-Vorlage Wenn keines angegeben ist. Weitere Informationen finden Sie unter Benutzerdefinierte Vorlagen Explorer-Stil.

Verwenden Sie eine Hook-Prozedur für eine Explorer-Stil Öffnen oder Speichern unter -Dialogfeld aktivieren, die OPENFILENAME -Struktur Wenn Sie das Dialogfeld erstellen. Legen Sie die Flags OFN_ENABLEHOOK und OFN_EXPLORER in der Flags -Mitglied und geben Sie die Adresse des ein OFNHookProc -Hook-Prozedur in den LpfnHook . Wenn Sie eine Hook-Prozedur und das OFN_EXPLORER-Flag weglassen, müssen Sie eine OFNHookProcOldStyle -Hook-Prozedur, und Sie erhalten die altmodische Benutzeroberfläche. Weitere Informationen finden Sie unter Anpassen von Old-Style-Dialogfelder.

Eine Explorer-Stil-Hook-Prozedur erhält eine Vielzahl von Nachrichten, während das Dialogfeld geöffnet ist. Dazu gehören die folgenden:

Darüber hinaus gibt es eine Reihe von Nachrichten, die Sie an ein Dialogfeld mit einer Explorer-Stil senden können, um Informationen zu erhalten oder um das Verhalten und die Darstellung des Dialogfelds Steuern.

Wenn Sie eine Hook-Prozedur für ein Dialogfeld mit einer Explorer-Stil angeben, erstellt die Standard-Dialogfeldprozedur ein Kind-Dialogfeld, wenn die standardmäßige Dialogfeld Prozedur die WM_INITDIALOG -Meldung verarbeitet. Die Hook-Prozedur fungiert als die Dialogfeld-Prozedur für das Kind-Dialogfeld. In dieser Zeit erhält die Hook-Prozedur eine eigene WM_INITDIALOG-Meldung mit den lParam -Parameter legen Sie auf die Adresse der OPENFILENAME -Struktur verwendet, um das Dialogfeld zu initialisieren. Nachdem das Dialogfenster Kind beendet die Verarbeitung eigener WM_INITDIALOG-Meldung, verschiebt die Standardprozedur Dialogfeld Standardsteuerelemente, falls notwendig, um Platz für zusätzliche Steuerelemente im Dialogfeld Kind machen. Die Standard-Dialogfeld-Prozedur sendet dann die Benachrichtigung CDN_INITDONE an die Hook-Prozedur.

Die Hook-Prozedur empfängt WM_NOTIFY -Benachrichtigungen, die Aktionen durch den Benutzer im Dialogfeld. Einige dieser Meldungen können Sie zum Steuern des Verhaltens des Dialogfelds. Beispielsweise erhält die Hook-Prozedur die CDN_FILEOK-Nachricht, wenn der Benutzer einen Dateinamen wählt und auf die Schaltfläche OK klickt. Als Antwort auf diese Nachricht können die Hook-Prozedur die Funktion SetWindowLong lehnen den ausgewählten Namen und zwingen das Dialogfeld geöffnet bleiben.

Für jede Nachricht WM_NOTIFY der lParam -Parameter ist ein Zeiger auf eine OFNOTIFY -Struktur, die die Aktion definiert. Das Code -Element in der Kopfzeile für die OFNOTIFY -Struktur enthält einen der folgenden Benachrichtigungscodes.

CDN_FILEOK Der Benutzer klickt, die OK -Taste; Das Dialogfeld ist zu schließen.
CDN_FOLDERCHANGE Der Benutzer geöffnet hat, einen neuen Ordner oder ein Verzeichnis.
CDN_HELP Der Benutzer die Schaltfläche Hilfe geklickt.
CDN_INITDONE Das System initialisiert das Dialogfeld abgeschlossen wurde, und das Dialogfeld die WM_INITDIALOG -Meldung die Verarbeitung ist abgeschlossen. Darüber hinaus hat das System beendet anordnen von Steuerelementen in das Standarddialogfeld um Platz für die Steuerelemente im Dialogfeld Kind (falls vorhanden).
CDN_SELCHANGE Der Benutzer eine neue Datei oder einen Ordner aus der Dateiliste ausgewählt.
CDN_SHAREVIOLATION Das Standarddialogfeld auftreten eine Zugriffsverletzung in der Datei zurückgegeben werden sollen.
CDN_TYPECHANGE Vom Benutzer ausgewählte einen neuen Dateityp aus der Liste der Dateitypen.

Diese WM_NOTIFY-Meldungen ersetzen die FILEOKSTRING, LBSELCHSTRING, SHAREVISTRINGund HELPMSGSTRING eingetragene Nachrichten von früheren Versionen der Dialogfelder Öffnen und Speichern unter verwendet. Jedoch erhält die Hook-Prozedur auch die abgelöste Nachricht nach die WM_NOTIFY-Meldung, wenn die WM_NOTIFY-Verarbeitung nicht SetWindowLong verwendet wird, legen Sie einen Wert ungleich NULL DWL_MSGRESULT.

Zum Abrufen von Informationen über den Status des Dialogfelds oder das Verhalten und die Darstellung des Dialogfelds steuern, kann die Hook-Prozedur die folgenden Meldungen im Dialogfeld senden.

CDM_GETFILEPATH Ruft den Pfad und den Dateinamen der ausgewählten Datei.
CDM_GETFOLDERIDLIST Ruft die Element-ID-Liste entspricht dem aktuellen Ordner, dass das Dialogfeld geöffnet ist. Weitere Informationen über Elementlisten Bezeichner finden Sie unter Bezeichner Listen und Element-IDs.
CDM_GETFOLDERPATH Ruft den Pfad des aktuellen Ordners oder Verzeichnisses für das Dialogfeld.
CDM_GETSPEC Ruft den Dateinamen (nicht einschließlich Pfad) der Datei in das Dialogfeld ausgewählte.
CDM_HIDECONTROL Blendet das angegebene Steuerelement.
CDM_SETCONTROLTEXT Legt den Text in das angegebene Steuerelement fest.
CDM_SETDEFEXT Legt die Standard-Dateinamenerweiterung für das Dialogfeld.

Index