内部構造>Window Messageの流れ
2005/3/12
ここではエディタに対してウィンドウメッセージが送られたときにどのような処理が行われるかを説明します.
メッセージの入り口としては''CEditWnd''クラス, ''CEditDoc''クラス,''CEditView''クラスが考えられます.
WM_COMMANDメッセージは''CEditWnd::DispatchEvent''に転送します.それ以外の物は''CEditView::DispatchEvent''に転送します.WM_COMMANDを特別扱いするのは,WM_COMMANDの処理が''CEditWnd::DispatchEvent''に書かれているからです.
WM_ENTERMENULOOP, WM_EXITMENULOOP以外のメッセージであればActiveなEditViewの''DispatchEvent''にメッセージを転送します.
''CEditWnd::DispatchEvent''にメッセージを転送します.
メッセージがWM_COMMANDのときには2つの可能性があります.1つはカスタマイズ不可能な箇所からやってきたコマンドでもう1つはカスタマイズ可能なコマンドです.
カスタマイズが不可能な物についてはその場で処理されます.
カスタマイズが可能な物については''CEditDoc::HandleCommand''にコマンド番号が渡されます.
キーボードアクセラレータからのコマンドの場合はキーコードに基づく仮のコマンドIDが入っているので,本物のIDに変換してから送ります.
WM_COMMANDのパラメータ
上位ワード | 内容 | 下位ワード |
---|---|---|
0 | メニューからのコマンド | Command ID |
1 | アクセラレータからのコマンド | Command ID |
その他 | コントロールからのメッセージ | Control ID |
分割されたViewの間のフォーカス移動についてはここで処理を行います.それ以外のコマンドについてはActiveなViewの''HandleCommand''に引き渡されます.
カスタマイズ可能なコマンドの殆どはここで処理されます.この関数ではコマンドIDによって対応する処理関数への振り分けを行います.処理関数は ''CEditView::Command_XXXXXX'' (XXXXXはコマンド名) と名付けられています.