プロセスの送信部分と、フレームワークがどのように応答するかを検討します。
ほとんどのメッセージは、ユーザーがプログラムとやり取りした結果です。 コマンドは、メニュー項目またはツール バー ボタンのマウス クリックによって、またはアクセラレータのキーストロークによって生成されます。 ユーザーは、ウィンドウの移動やサイズ変更などによって、Windows メッセージも生成します。 その他の Windows メッセージは、プログラムの起動や終了などのイベントが発生した場合、ウィンドウがフォーカスを取得または失うときなどに送信されます。 コントロール通知メッセージは、マウス クリックや、ダイアログ ボックス内のボタンやリスト ボックス コントロールなどのコントロールとの他のユーザー操作によって生成されます。
クラス Run
の CWinApp
メンバー関数は、メッセージを取得し、適切なウィンドウにディスパッチします。 ほとんどのコマンド メッセージは、アプリケーションのメイン フレーム ウィンドウに送信されます。 クラス ライブラリによって事前に定義された WindowProc
は、メッセージを取得し、受信したメッセージのカテゴリに応じて異なる方法でルーティングします。
次に、プロセスの受信部分を検討します。
メッセージの最初の受信側は、ウィンドウ オブジェクトである必要があります。 Windows メッセージは通常、そのウィンドウ オブジェクトによって直接処理されます。 通常、アプリケーションのメイン フレーム ウィンドウから送信されるコマンド メッセージは、「 コマンド ルーティング」で説明されているコマンド ターゲット チェーンにルーティングされます。
メッセージまたはコマンドを受信できる各オブジェクトには、メッセージまたはコマンドをハンドラーの名前とペアにする独自のメッセージ マップがあります。
コマンド ターゲット オブジェクトは、メッセージまたはコマンドを受信すると、そのメッセージ マップで一致するものを検索します。 メッセージのハンドラーが見つかると、ハンドラーが呼び出されます。 メッセージ マップの検索方法の詳細については、「 フレームワークがメッセージ マップを検索する方法」を参照してください。 フレームワークのコマンドの図をもう一度参照してください。