メッセージの種類
ハンドラーを記述する対象となるメッセージの種類は、主に次の 3 つに分類されます。
Windows メッセージ
これには、主に、WM_ プレフィックスで始まるメッセージが含まれます。ただし、WM_COMMAND は除きます。 Windows メッセージは、ウィンドウおよびビューによって処理されます。 これらのメッセージには、多くの場合、メッセージの処理方法を判断するために使用されるパラメーターがあります。
コントロールの通知
これには、コントロールやその他の子ウィンドウからそれらの親ウィンドウへの WM_COMMAND 通知メッセージが含まれます。 たとえば、編集コントロールは、編集コントロールのテキストを変更した可能性のあるアクションをユーザーが実行したときに、EN_CHANGE コントロール通知コードを含む WM_COMMAND メッセージを親に送信します。 そのメッセージに対するウィンドウのハンドラーは、コントロール内のテキストを取得するなど、適切な方法で通知メッセージに応答します。
フレームワークは、他の WM_ メッセージと同様に、コントロール通知メッセージをルーティングします。 ただし、1 つの例外は、ユーザーがボタンをクリックしたときにボタンによって送信される BN_CLICKED コントロール通知メッセージです。 このメッセージは、特別にコマンド メッセージとして扱われ、他のコマンドと同様にルーティングされます。
コマンド メッセージ
これには、ユーザー インターフェイス オブジェクト (メニュー、ツール バー ボタン、およびアクセス キー) からの WM_COMMAND 通知メッセージが含まれます。 フレームワークは、他のメッセージとは異なる方法でコマンドを処理します。「コマンド ターゲット」で説明されているように、コマンドはより多くの種類のオブジェクトによって処理することができます。
Windows メッセージとコントロール通知メッセージ
カテゴリ 1 および 2 のメッセージ (Windows メッセージとコントロール通知) は、ウィンドウ (CWnd
クラスから派生したクラスのオブジェクト) によって処理されます。 これには、CFrameWnd
、CMDIFrameWnd
、CMDIChildWnd
、CView
、CDialog
、およびこれらの基底クラスから派生した独自のクラスが含まれます。 このようなオブジェクトは、Windows ウィンドウへのハンドルである HWND
をカプセル化します。
コマンド メッセージ
カテゴリ 3 のメッセージ (コマンド) は、ウィンドウやビューの他に、ドキュメント、ドキュメント テンプレート、アプリケーション オブジェクト自体など、より多くの種類のオブジェクトで処理できます。 コマンドが特定のオブジェクトに直接影響する場合は、そのオブジェクトでコマンドを処理することが理にかなっています。 たとえば、[ファイル] メニューの [開く] コマンドは、論理的にアプリケーションに関連しています。アプリケーションが、コマンドを受信して、指定されたドキュメントを開くためです。 そのため、[開く] コマンドのハンドラーは、アプリケーション クラスのメンバー関数です。 コマンドと、それらがオブジェクトにルーティングされる方法の詳細については、「フレームワークがハンドラーを呼び出す方法」を参照してください。