LPOFNHOOKPROC-Rückruffunktion (commdlg.h)

[Ab Windows Vista wurden die allgemeinen Dialogfelder Öffnen und Speichern unter durch das Dialogfeld "Allgemeines Element" ersetzt. Es wird empfohlen, die Dialogfeld-API für allgemeine Elemente anstelle dieser Dialogfelder aus der Allgemeinen Dialogfeldbibliothek zu verwenden.]

Empfängt Benachrichtigungen, die vom Dialogfeld gesendet werden. Die Funktion empfängt auch Nachrichten für alle zusätzlichen Steuerelemente, die Sie durch Angeben einer untergeordneten Dialogvorlage definiert haben. Die HOOK-Prozedur OFNHookProc ist eine anwendungsdefinierte oder bibliotheksdefinierte Rückruffunktion, die mit den Explorer Dialogfeldern Öffnen und Speichern unter verwendet wird.

Der LPOFNHOOKPROC-Typ definiert einen Zeiger auf diese Rückruffunktion. OFNHookProc ist ein Platzhalter für den anwendungsdefinierte Funktionsnamen.

Syntax

LPOFNHOOKPROC Lpofnhookproc;

UINT_PTR Lpofnhookproc(
  HWND unnamedParam1,
  UINT unnamedParam2,
  WPARAM unnamedParam3,
  LPARAM unnamedParam4
)
{...}

Parameter

unnamedParam1

Ein Handle für das untergeordnete Dialogfeld des Dialogfelds Öffnen oder Speichern unter . Verwenden Sie die GetParent-Funktion , um das Handle für das Dialogfeld Öffnen oder Speichern unter abzurufen.

unnamedParam2

Der Bezeichner der empfangenen Nachricht.

unnamedParam3

Zusätzliche Informationen zur Meldung. Die genaue Bedeutung hängt vom Wert des parameters unnamedParam2 ab.

unnamedParam4

Zusätzliche Informationen zur Meldung. Die genaue Bedeutung hängt vom Wert des parameters unnamedParam2 ab. Wenn der unnamedParam2-Parameter die WM_INITDIALOG Nachricht angibt, ist unnamedParam4 ein Zeiger auf eine OPENFILENAME-Struktur , die die werte enthält, die beim Erstellen des Dialogfelds angegeben wurden.

Rückgabewert

Wenn die Hookprozedur null zurückgibt, verarbeitet die Standarddialogfeldprozedur die Nachricht.

Wenn die Hookprozedur einen wert ohne Zero zurückgibt, ignoriert die Standarddialogfeldprozedur die Meldung.

Für die CDN_SHAREVIOLATION und CDN_FILEOK Benachrichtigungsmeldungen sollte die Hookprozedur einen Nonzero-Wert zurückgeben, um anzugeben, dass die SetWindowLong-Funktion verwendet wurde, um einen Wert von nonzero DWL_MSGRESULT festzulegen.

Hinweise

Wenn Sie beim Erstellen eines Dialogfelds Öffnen oder Speichern unter das Flag OFN_EXPLORER nicht angeben und eine Hookprozedur benötigen, müssen Sie eine OFNHookProcOldStyle-Hookprozedur im alten Stil verwenden. In diesem Fall verfügt das Dialogfeld über die Benutzeroberfläche im alten Stil.

Wenn Sie die Funktionen GetOpenFileName oder GetSaveFileName verwenden, um ein Explorer-Stil-Dialogfeld "Öffnen" oder "Speichern unter" zu erstellen, können Sie eine OFNHookProc-Hookprozedur bereitstellen. Um die Hookprozedur zu aktivieren, verwenden Sie die OPENFILENAME-Struktur , die Sie an die Dialogerstellungsfunktion übergeben haben. Geben Sie den Zeiger auf die Hookprozedur im lpfnHook-Member an, und geben Sie das OFN_ENABLEHOOK Flag im Flags-Element an.

Wenn Sie eine Hookprozedur für ein allgemeines Dialogfeld im Explorer-Format bereitstellen, erstellt das System ein Dialogfeld, das ein untergeordnetes Element des Standarddialogfelds ist. Die Hookprozedur fungiert als Dialogprozedur für das untergeordnete Dialogfeld. Dieses untergeordnete Dialogfeld basiert auf der Vorlage, die Sie in der OPENFILENAME-Struktur angegeben haben, oder es ist ein untergeordnetes Standarddialogfeld, wenn keine Vorlage angegeben ist. Das untergeordnete Dialogfeld wird erstellt, wenn die Standarddialogprozedur ihre WM_INITDIALOG Nachricht verarbeitet. Nachdem das untergeordnete Dialogfeld eine eigene WM_INITDIALOG Nachricht verarbeitet hat, verschiebt die Standarddialogprozedur bei Bedarf die Standardsteuerelemente, um Platz für zusätzliche Steuerelemente des untergeordneten Dialogfelds zu schaffen. Das System sendet dann die CDN_INITDONE Benachrichtigungsnachricht an die Hookprozedur.

Die Hookprozedur empfängt keine Nachrichten, die für die Standardsteuerelemente des Standarddialogfelds bestimmt sind. Sie können die Standardsteuerelemente unterklassieren. Dies wird jedoch abgeraten, da ihre Anwendung möglicherweise mit höheren Versionen nicht kompatibel ist. Die Explorer allgemeinen Dialogfelder enthalten jedoch eine Reihe von Meldungen, die die Hookprozedur verwenden kann, um das Dialogfeld zu überwachen und zu steuern. Dazu gehören eine Reihe von Benachrichtigungen, die über das Dialogfeld gesendet werden, sowie Nachrichten, die Sie senden können, um Informationen aus dem Dialogfeld abzurufen. Eine vollständige Liste dieser Meldungen finden Sie unter hook procedures Explorer-Style.

Wenn die Hookprozedur die WM_CTLCOLORDLG-Nachricht verarbeitet, muss ein gültiges Pinselhandle zurückgegeben werden, um den Hintergrund des Dialogfelds zu malen. Wenn eine WM_CTLCOLOR* -Nachricht verarbeitet wird, muss im Allgemeinen ein gültiges Pinselhandle zurückgegeben werden, um den Hintergrund des angegebenen Steuerelements zu zeichnen.

Rufen Sie die EndDialog-Funktion nicht über die Hookprozedur auf. Stattdessen kann die Hookprozedur die PostMessage-Funktion aufrufen, um eine WM_COMMAND Nachricht mit dem IDCANCEL-Wert in der Dialogfeldprozedur zu posten. Das Veröffentlichen von IDCANCEL schließt das Dialogfeld und bewirkt, dass die Dialogfeldfunktion FALSE zurückgibt. Wenn Sie wissen müssen, warum die Hookprozedur das Dialogfeld geschlossen hat, müssen Sie einen eigenen Kommunikationsmechanismus zwischen der Hookprozedur und Ihrer Anwendung bereitstellen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile commdlg.h (einschließlich Windows.h)

Weitere Informationen

Allgemeine Dialogfeldbibliothek

Konzept

GetOpenFileName

GetSaveFileName

OFNHookProcOldStyle

OPENFILENAME

Referenz