メッセージの送信と受信
更新 : 2007 年 11 月
ここでは、メッセージの送信処理とフレームワークの応答について解説します。
ほとんどのメッセージは、ユーザーがプログラムに操作を加えた結果として生成されます。ユーザーがメニュー項目またはツール バー ボタンをクリックするか、アクセラレータ キーを押すと、コマンドが生成されます。ウィンドウを移動またはサイズ変更したときも、Windows メッセージが生成されます。その他の Windows メッセージは、プログラムの起動または終了、ウィンドウ フォーカスの移動などのイベントが発生すると、生成されます。コントロール通知メッセージは、ダイアログ ボックス内のボタンまたはリスト ボックス コントロールなどに対してマウス クリックなどの操作が行われると、生成されます。
CWinApp クラスのメンバ関数 Run は、メッセージを取り出して該当するウィンドウに送出します。ほとんどのコマンド メッセージは、アプリケーションのメイン フレーム ウィンドウに送られます。クラス ライブラリで定義済みの WindowProc は、メッセージを受け取ると、メッセージの種類に応じた転送先に送ります。
次に、メッセージを受け取る部分の機構について説明します。
最初にメッセージを受け取るのはウィンドウ オブジェクトです。通常、Windows メッセージはウィンドウ オブジェクトで直接処理されます。これに対して、コマンド メッセージは、通常、アプリケーションのメイン フレーム ウィンドウで発生し、コマンド ターゲット チェインに送られます。コマンド ターゲット チェインについては、「コマンドの振り分け (ルーティング)」を参照してください。
メッセージまたはコマンドを受け取ることができるオブジェクトは、それぞれ固有のメッセージ マップを持っています。メッセージ マップによって、メッセージまたはコマンドはハンドラ名に対応付けられます。
コマンド ターゲット オブジェクトは、メッセージまたはコマンドを受け取ると、メッセージ マップを検索して、該当するハンドラを探します。該当するハンドラが見つかると、そのハンドラが呼び出されます。メッセージ マップの検索方法の詳細については、「フレームワークのメッセージ マップ検索方法」を参照してください。図「フレームワーク内のコマンド」も参照してください。