Menu

Message

develop (84)
novice123

内部構造>Window Messageの流れ

Window Messageの流れ

2005/3/12

ここではエディタに対してウィンドウメッセージが送られたときにどのような処理が行われるかを説明します.

メッセージの入り口

メッセージの入り口としては''CEditWnd''クラス, ''CEditDoc''クラス,''CEditView''クラスが考えられます.

CEditViewのWindow Procedure

WM_COMMANDメッセージは''CEditWnd::DispatchEvent''に転送します.それ以外の物は''CEditView::DispatchEvent''に転送します.WM_COMMANDを特別扱いするのは,WM_COMMANDの処理が''CEditWnd::DispatchEvent''に書かれているからです.

CEditDocのWindow Procedure

WM_ENTERMENULOOP, WM_EXITMENULOOP以外のメッセージであればActiveなEditViewの''DispatchEvent''にメッセージを転送します.

CEditWndのWindow Procedure

''CEditWnd::DispatchEvent''にメッセージを転送します.

CEditWnd::DispatchEvent

メッセージがWM_COMMANDのときには2つの可能性があります.1つはカスタマイズ不可能な箇所からやってきたコマンドでもう1つはカスタマイズ可能なコマンドです.

カスタマイズが不可能な物についてはその場で処理されます.

カスタマイズが可能な物については''CEditDoc::HandleCommand''にコマンド番号が渡されます.

キーボードアクセラレータからのコマンドの場合はキーコードに基づく仮のコマンドIDが入っているので,本物のIDに変換してから送ります.

WM_COMMANDのパラメータ

上位ワード 内容 下位ワード
メニューからのコマンド Command ID
アクセラレータからのコマンド Command ID
その他 コントロールからのメッセージ Control ID

CEditDoc::HandleCommand

分割されたViewの間のフォーカス移動についてはここで処理を行います.それ以外のコマンドについてはActiveなViewの''HandleCommand''に引き渡されます.

CEditView::HandleCommand

カスタマイズ可能なコマンドの殆どはここで処理されます.この関数ではコマンドIDによって対応する処理関数への振り分けを行います.処理関数は ''CEditView::Command_XXXXXX'' (XXXXXはコマンド名) と名付けられています.


Related

Wiki: Design

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.