LPOFNHOOKPROC コールバック関数 (commdlg.h)

[Windows Vista 以降、 共通のダイアログ ボックスと [名前を付けて保存 ] ダイアログ ボックスは、[ 共通アイテム] ダイアログボックスに置き換えられていた。 共通ダイアログ ボックス ライブラリのこれらのダイアログ ボックスの代わりに、共通項目ダイアログ API を使用することをお勧めします。

ダイアログ ボックスから送信された通知メッセージを受信します。 関数は、子ダイアログ テンプレートを指定して定義した追加のコントロールのメッセージも受信します。 OFNHookProc フック プロシージャは、エクスプローラー スタイルの [開く] ダイアログ ボックスと [名前を付けて保存] ダイアログ ボックスで使用される、アプリケーション定義またはライブラリ定義のコールバック関数です。

LPOFNHOOKPROC 型は、このコールバック関数へのポインターを定義します。 OFNHookProc は、アプリケーション定義関数名のプレースホルダーです。

構文

LPOFNHOOKPROC Lpofnhookproc;

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

パラメーター

unnamedParam1

[ 開く ] または [ 名前を付けて保存 ] ダイアログ ボックスの子ダイアログ ボックスへのハンドル。 GetParent 関数を使用して、[開く] または [名前を付けて保存] ダイアログ ボックスのハンドルを取得します。

unnamedParam2

受信するメッセージの識別子。

unnamedParam3

メッセージについての追加情報。 正確な意味は、 名前のないParam2 パラメーターの値によって異なります。

unnamedParam4

メッセージについての追加情報。 正確な意味は、 名前のないParam2 パラメーターの値によって異なります。 unnamedParam2 パラメーターがWM_INITDIALOG メッセージを示す場合、unnamedParam4 はダイアログ ボックスの作成時に指定された値を含む OPENFILENAME 構造体へのポインターです。

戻り値

フック プロシージャから 0 が返された場合、既定のダイアログ ボックス プロシージャによってメッセージが処理されます。

フック プロシージャが 0 以外の値を返す場合、既定のダイアログ ボックス プロシージャはメッセージを無視します。

CDN_SHAREVIOLATIONおよびCDN_FILEOK通知メッセージの場合、フック プロシージャは 0 以外の値を返して、SetWindowLong 関数を使用して 0 以外のDWL_MSGRESULT値を設定したことを示す必要があります。

解説

[開く] または [名前を付けて保存] ダイアログ ボックスを作成するときにOFN_EXPLORER フラグを指定せず、フック プロシージャが必要な場合は、古いスタイルの OFNHookProcOldStyle フック プロシージャを使用する必要があります。 この場合、ダイアログ ボックスには古いスタイルのユーザー インターフェイスが表示されます。

GetOpenFileName 関数または GetSaveFileName 関数を使用して、エクスプローラー スタイルの [名前を付けて開く] または [名前を付けて保存] ダイアログ ボックスを作成する場合は、OFNHookProc フック プロシージャを指定できます。 フック プロシージャを有効にするには、ダイアログ作成関数に渡した OPENFILENAME 構造体を使用します。 lpfnHook メンバーでフック プロシージャへのポインターを指定し、Flags メンバーでOFN_ENABLEHOOK フラグを指定します。

エクスプローラースタイルの共通ダイアログ ボックスにフック プロシージャを指定すると、既定のダイアログ ボックスの子であるダイアログ ボックスが作成されます。 フック プロシージャは、子ダイアログのダイアログ プロシージャとして機能します。 この子ダイアログは、 OPENFILENAME 構造体で指定したテンプレートに基づいています。テンプレートが指定されていない場合は既定の子ダイアログです。 子ダイアログは、既定のダイアログ プロシージャが WM_INITDIALOG メッセージを処理するときに作成されます。 子ダイアログが独自の WM_INITDIALOG メッセージを処理した後、既定のダイアログ プロシージャは、必要に応じて標準コントロールを移動して、子ダイアログの追加のコントロールのスペースを作ります。 その後、システムは CDN_INITDONE 通知メッセージをフック・プロシージャーに送信します。

フック プロシージャは、既定のダイアログ ボックスの標準コントロールを対象としたメッセージを受信しません。 標準コントロールをサブクラス化することはできますが、アプリケーションが新しいバージョンと互換性を持たなくなるため、これはお勧めしません。 ただし、エクスプローラー スタイルの一般的なダイアログ ボックスには、フック プロシージャがダイアログの監視と制御に使用できるメッセージのセットが用意されています。 これには、ダイアログから送信された一連の通知メッセージと、ダイアログから情報を取得するために送信できるメッセージが含まれます。 これらのメッセージの完全な一覧については、「エクスプローラー スタイルのフック プロシージャ」を参照してください。

フック プロシージャが WM_CTLCOLORDLG メッセージを処理する場合は、ダイアログ ボックスの背景を描画するための有効なブラシ ハンドルを返す必要があります。 一般に、 WM_CTLCOLOR* メッセージを処理する場合は、指定したコントロールの背景を描画するために有効なブラシ ハンドルを返す必要があります。

フック プロシージャから EndDialog 関数を呼び出さないでください。 代わりに、フック プロシージャは PostMessage 関数を呼び出して、IDCANCEL 値を持つWM_COMMAND メッセージをダイアログ ボックス プロシージャに投稿できます。 IDCANCEL を投稿すると、ダイアログ ボックスが閉じ、ダイアログ ボックス関数が FALSE を返します。 フック プロシージャがダイアログ ボックスを閉じた理由を知る必要がある場合は、フック プロシージャとアプリケーションの間に独自の通信メカニズムを提供する必要があります。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー commdlg.h (Windows.h を含む)

関連項目

共通ダイアログ ボックス ライブラリ

概念

GetOpenFileName

GetSaveFileName

OFNHookProcOldStyle

OPENFILENAME

参照