- - PR -
[C++][MFC] 継承できないOnClose
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-23 15:32
VC2008でC++とMFCプログラミングを学習中です。
ウィンドウイベントの拾い方について理解できずにいるところがあるのですが、 CDialogやCWndのOnClose()関数がvirtualなしで宣言されているのはなぜでしょう? 仮想関数でないということはオーバーライドできないということで、継承したクラスでOnClose()を書いても別関数扱い、イベントでは呼ばれない、という解釈でいいのですよね? (実際、自分で試しても呼ばれませんし。) OnClose()という関数は作ればイベントを拾ってくれるというものではなく、自分でWindowProc()でイベントを拾うべきものなのでしょうか? その場合、OnClose()という関数は何のためにあるのでしょうか? | ||||||||||||
|
投稿日時: 2009-03-23 15:55
MFCではメッセージマップ機能を使ってイベント処理するからです。 テクニカル ノート 6: メッセージ マップ(msdn) リンク先の「問題」のところにも触れていますが、 多数のメッセージ対してウィンドウクラスに仮想関数を用意してしまうと、 仮想関数テーブル(vtable)が肥大化し過ぎてしまうから、敢えて使ってないのです。
はい、そうです。継承先に単に同名のメソッドを書いただけでは呼び出されません。
書籍やネットでまずMFCとメッセージマップについて勉強してください。 DECLARE_MESSAGE_MAP マクロ BEGIN_MESSAGE_MAP マクロ END_MESSAGE_MAP マクロ ON_WM_CLOSE | ||||||||||||
|
投稿日時: 2009-03-23 16:10
大事なキーワードをありがとうございます。
おかげさまで理解できました。 |
1