MFC覚え書き(CCmdTarget〜)

これは何?

どーにもこーにもお仕事に使っているC++になじめないので、苦手な部分、知らなかった部分を取りまとめてブログに書くシリーズです。
C++脱初心者を目指す人レベルと思ってます。
ちなみに環境は、主にVisual C++ 2005 Express EditionとVisual C++ 2005です。


と、言うわけで前回の続きでMFCのCCmdTargetについて。

CCmdTargetの特徴

MFCでのイベントドリブンモデルの親玉。
Windowsアプリは、GUIから入力があると、「Windowsメッセージ」が飛んでくる。
(windowメッセージ以外のいろんなメッセージの受信にも対応しているっぽいが、今回はCWnd理解が目的なので割愛)
そのメッセージをキャッチして、任意の処理を実行する為のクラス。
そのため、ウィンドウサポート関係のクラスはこのクラスを継承している→via 階層図(MFC)

イベントを受けるには?

メッセージを受けたいクラスは、CCmdTargetを継承する。
そして、対象のクラスのメッセージマップを実装する。
メッセージマップとは、対象のクラスが受信したメッセージをどのメソッドに送るかをマッピングしたもの。


具体的には、[ON_MESSAGE_MAPマクロ]内でON_COMMANDマクロを使って登録する。

BEGIN_MESSAGE_MAP(クラス名, 親クラス(Cwndとか))
	// ON_〜もイベント種別毎にいろいろあって、
	// CWndとか、CCmdTargetを継承しているクラスに色々用意されている
	ON_COMMAND( メッセージ種別, 受信メソッドの関数ポインタ )
	…
END_MESSAGE_MAP


こんな感じでUIからのイベントで駆動するモデルを実現しているみたいです。

参考

メッセージについて、もう少し詳しく書かれています。

今後

CWndとかで使っている各ON_WM_〜とかその辺は次回、CWndの解説で。