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 で導入)

関連項目

概念

GetWindowLong

リファレンス

SetClassLong

SetWindowLong

ウィンドウ プロシージャ