...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

MVC on MFC

2000/08/03 MFCにSwingのMouseListenerを適応

なるほど!って思わされた。
どうしてもMFCMVCモデルを実現するのがうまくいかなくて、
最初はともかくどんどんViewが肥大化していく状態だったんで。
これを参考に考えてみたら・・・、


class CMouseEvent {
virtual void OnLButton(...){}
};
class MyMouseEvent : public CMouseEvent {
CommonController * m_pCont;
public:
virtual void OnLButton(...) {
// マウスの左ボタンを押したときの処理
m_pCont->ShowMessageBox("このメッセージを表示");
}
MyMouseEvent(CWnd* pWnd, CommonController* pCont) : CMouseEvent(pWnd) {
m_pCont = pCont;
}
};
class CMyView : public CView {
CommonController * m_pCont;
CMouseEvent * m_pMouseEvent;
CMyView() {
m_pCont = new CommonController();
m_pMouseEvent = new MyMouseEvent( this, m_pCont);
// deleteしましょうね
}
void OnLButton(...){
m_pMouseEvent->OnLButton(...);
}
};

と、こんな感じで、Viewや複数のControllerで共有するクラスCommonControllerがある場合、
インタフェースクラスのサブクラスのコンストラクタで共有するクラスを渡すことで、多態性が利用できるみたい。
親と子のコンストラクタが別々で、クラス固有のものだということに気がついていなかった(^^;
Swingの勉強、したほうがいいのかなー、とか思ったり。