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