次の方法で共有


CallWindowProcW 関数 (winuser.h)

指定したウィンドウ プロシージャにメッセージ情報を渡します。

構文

LRESULT CallWindowProcW(
  [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 への変換を処理します。 ウィンドウ プロシージャを直接呼び出す場合、この変換を利用することはできません。

例については、「ウィンドウ のサブクラス化 」を参照してください。

手記

winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CallWindowProc を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winuser.h (Windows.h を含む)
ライブラリ User32.lib
DLL User32.dll
API セットの ext-ms-win-ntuser-window-l1-1-4 (Windows 10 バージョン 10.0.14393 で導入)

関連項目

概念

GetWindowLong の

リファレンス

SetClassLong の

SetWindowLong の

ウィンドウ プロシージャ