CallWindowProcA 関数 (winuser.h)
指定したウィンドウ プロシージャにメッセージ情報を渡します。
構文
LRESULT CallWindowProcA(
[in] WNDPROC lpPrevWndFunc,
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
パラメーター
[in] lpPrevWndFunc
種類: WNDPROC
前のウィンドウ プロシージャ。 nIndex パラメーターを GWL_WNDPROC または DWL_DLGPROC に設定して GetWindowLong 関数を呼び出してこの値を取得した場合、実際にはウィンドウまたはダイアログ ボックス プロシージャのアドレスか、CallWindowProc にのみ意味のある特別な内部値になります。
[in] hWnd
型: HWND
メッセージを受信するウィンドウ プロシージャへのハンドル。
[in] Msg
型: UINT
メッセージ。
[in] wParam
型: WPARAM
追加のメッセージ固有情報。 このパラメーターの内容は 、Msg パラメーターの値によって異なります。
[in] lParam
型: LPARAM
追加のメッセージ固有情報。 このパラメーターの内容は 、Msg パラメーターの値によって異なります。
戻り値
型: LRESULT
戻り値は、メッセージ処理の結果を指定し、送信されたメッセージに依存します。
解説
ウィンドウサブクラス化には CallWindowProc 関数を使用します。 通常、同じクラスを持つすべてのウィンドウは、1 つのウィンドウ プロシージャを共有します。 サブクラスは、クラスのウィンドウ プロシージャに渡される前に、別のウィンドウ プロシージャ (またはプロシージャ) によってメッセージがインターセプトおよび処理される、同じクラスを持つウィンドウまたはウィンドウのセットです。
SetWindowLong 関数は、特定のウィンドウに関連付けられているウィンドウ プロシージャを変更してサブクラスを作成し、システムが前のウィンドウ プロシージャではなく新しいウィンドウ プロシージャを呼び出します。 アプリケーションは 、CallWindowProc を呼び出して、新しいウィンドウ プロシージャによって処理されないメッセージを前のウィンドウ プロシージャに渡す必要があります。 これにより、アプリケーションはウィンドウ プロシージャのチェーンを作成できます。
STRICT が定義されている場合、lpPrevWndFunc パラメーターのデータ型は WNDPROC です。 WNDPROC 型は次のように宣言されています。
LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);
STRICT が定義されていない場合、lpPrevWndFunc パラメーターのデータ型は FARPROC になります。 FARPROC 型は次のように宣言されています。
int (FAR WINAPI * FARPROC) ()
C では、 FARPROC 宣言は、指定されていないパラメーター リストを持つコールバック関数を示します。 ただし、C++ では、宣言の空のパラメーター リストは、関数にパラメーターがないことを示します。 この微妙な違いは、不注意なコードを壊す可能性があります。 この状況を処理する 1 つの方法を次に示します。
#ifdef STRICT
WNDPROC MyWindowProcedure
#else
FARPROC MyWindowProcedure
#endif
...
lResult = CallWindowProc(MyWindowProcedure, ...) ;
空の引数リストで宣言された関数の詳細については、「Bjarne Stroustrup による C++ プログラミング言語の第 2 版」を 参照してください。
CallWindowProc 関数は、Unicode から ANSI への変換を処理します。 ウィンドウ プロシージャを直接呼び出す場合、この変換を利用することはできません。
例
例については、「ウィンドウのサブクラス化」を参照してください。
Note
winuser.h ヘッダーは、CallWindowProc をエイリアスとして定義します。このエイリアスは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
API セット | ext-ms-win-ntuser-window-l1-1-4 (Windows 10 バージョン 10.0.14393 で導入) |
関連項目
概念
リファレンス