今更 MFC をはじめなきゃいけない男

仕事で MFC で書かれたツールをメンテすることになった。
いつも Win32 の API を直に使っていたので実は MFC をまともに使ったことが *一度も* 無かった。
そんな感じなのにいきなり


イベント伝播で問題があるっぽい。


という面倒くさい状況に。
さっそくメッセージループでどのタイミングでどのメッセージがハンドルされるか確かめようと思ったら、
当然メッセージループも MFC の中に書いてあるのね……。
というわけで備忘録としてオーバーライドすべき部分をメモメモ。


自身のアプリクラスで

  • int CWinApp::Run();
  • BOOL CWinThread::PumpMessage();

この二つをオーバーライド。
ちなみに CWinThread は cWinApp が継承している(cWinApp inherits CWinThread)。


で、 Run() と PumpMessage() は継承元からコピペしてくる。
この時、 WM_KICKIDLE が定義されていないと出るけど afxpriv.h をインクルードすればよし。
あ、書いてて気づいたけど Run() はオーバーライドしなくていいか。
PumpMessage() の中にメッセージループがあるので好きなようにデバッグ出力でも何でも書けば良し。