LPFRHOOKPROC
コールバックシグネチャ
UINT_PTR LPFRHOOKPROC(
HWND param0,
DWORD param1,
WPARAM param2,
LPARAM param3
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| param0 | HWND | メッセージの宛先である Find または Replace ダイアログボックスへのハンドル。 |
| param1 | DWORD | 受け取るメッセージの識別子。 |
| param2 | WPARAM | メッセージに関する追加情報。正確な意味は unnamedParam2 パラメーターの値によって異なります。 |
| param3 | LPARAM | メッセージに関する追加情報。正確な意味は unnamedParam2 パラメーターの値によって異なります。 unnamedParam2 パラメーターが WM_INITDIALOG メッセージを示す場合、unnamedParam4 は、ダイアログボックスの作成時に指定された値を格納する FINDREPLACE 構造体へのポインターです。 |
公式ドキュメント
Find または Replace ダイアログボックスの既定のダイアログボックスプロシージャ宛てのメッセージまたは通知を受け取ります。FRHookProc フックプロシージャは、FindText 関数または ReplaceText 関数と共に使用される、アプリケーション定義またはライブラリ定義のコールバック関数です。
LPFRHOOKPROC 型は、このコールバック関数へのポインターを定義します。FRHookProc は、アプリケーション定義の関数名のプレースホルダーです。
戻り値
フックプロシージャが 0 を返した場合、既定のダイアログボックスプロシージャがメッセージを処理します。
フックプロシージャが 0 以外の値を返した場合、既定のダイアログボックスプロシージャはメッセージを無視します。
解説(Remarks)
FindText 関数または ReplaceText 関数を使用して Find または Replace ダイアログボックスを作成する場合、ダイアログボックスプロシージャ宛てのメッセージや通知を処理する FRHookProc フックプロシージャを用意できます。フックプロシージャを有効にするには、ダイアログ作成関数に渡した FINDREPLACE 構造体を使用します。lpfnHook メンバーにフックプロシージャのアドレスを指定し、Flags メンバーに FR_ENABLEHOOK フラグを指定します。
既定のダイアログボックスプロシージャは、WM_INITDIALOG メッセージをフックプロシージャに渡す前に処理します。それ以外のすべてのメッセージについては、フックプロシージャが先にメッセージを受け取ります。そして、フックプロシージャの戻り値によって、既定のダイアログプロシージャがそのメッセージを処理するか無視するかが決まります。
フックプロシージャが WM_CTLCOLORDLG メッセージを処理する場合は、ダイアログボックスの背景を描画するための有効なブラシハンドルを返す必要があります。一般に、フックプロシージャが WM_CTLCOLOR* メッセージを処理する場合は、指定されたコントロールの背景を描画するための有効なブラシハンドルを返す必要があります。
フックプロシージャから EndDialog 関数を呼び出さないでください。代わりに、フックプロシージャは PostMessage 関数を呼び出して、IDABORT 値を伴う WM_COMMAND メッセージをダイアログボックスプロシージャにポストできます。IDABORT をポストするとダイアログボックスが閉じられ、ダイアログボックス関数は FALSE を返します。フックプロシージャがダイアログボックスを閉じた理由を知る必要がある場合は、フックプロシージャとアプリケーションとの間の通信手段を独自に用意する必要があります。
コモンダイアログボックスの標準コントロールはサブクラス化できます。ただし、ダイアログボックスプロシージャもコントロールをサブクラス化することがあります。そのため、コントロールのサブクラス化は、フックプロシージャが WM_INITDIALOG メッセージを処理するときに行ってください。こうすることで、ダイアログボックスプロシージャが設定したサブクラスプロシージャよりも先に、自分のサブクラスプロシージャがコントロール固有のメッセージを受け取るようになります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)