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