サブクラス化と自動メッセージ変換
サブクラス化は、ウィンドウ プロシージャがメッセージを処理する前に、アプリケーションが特定のウィンドウに送信またはポストされたメッセージをインターセプトして処理できるようにする手法です。 オペレーティング システムは、ウィンドウ プロシージャをサブクラス化した関数の形式に応じて、メッセージを Windows (ANSI) コード ページ または Unicode 形式に自動的に変換します。
SetWindowLongA 関数の次の呼び出しは、hWnd パラメーターによって識別されるウィンドウに関連付けられている現在のウィンドウ プロシージャをサブクラス化します。 または、アプリケーションで SetWindowLongPtrA を使用することもできます。 新しいウィンドウ プロシージャ NewWndProc は、Windows コード ページ形式のテキストを含むメッセージを受信します。
OldWndProc = (WNDPROC) SetWindowLongA(hWnd,
GWL_WNDPROC, (LONG)NewWndProc);
NewWndProc がメッセージの処理を完了すると、次のように CallWindowProc 関数を使用してメッセージを OldWndProc に渡します。
CallWindowProc(OldWndProc, hWnd, uMessage, wParam, lParam);
OldWndProc が UNICODE のクラス スタイルで作成された場合、メッセージは NewWndProc によって受信された Windows コード ページ フォームから Unicode に変換されます。
同様に、 SetWindowLongW 関数または SetWindowLongPtrW 関数を呼び出すと、Unicode テキスト メッセージを受け取るウィンドウ プロシージャを使用して、現在のウィンドウ プロシージャがサブクラス化されます。 メッセージ変換は、必要に応じて CallWindowProc 関数の処理中に実行されます。
サブクラス化の詳細については、「 ウィンドウ プロシージャ」を参照してください。
関連トピック