仕事で MFC で書かれたツールをメンテすることになった。
いつも Win32 の API を直に使っていたので実は MFC をまともに使ったことが *一度も* 無かった。
そんな感じなのにいきなり
イベント伝播で問題があるっぽい。
という面倒くさい状況に。
さっそくメッセージループでどのタイミングでどのメッセージがハンドルされるか確かめようと思ったら、
当然メッセージループも MFC の中に書いてあるのね……。
というわけで備忘録としてオーバーライドすべき部分をメモメモ。
自身のアプリクラスで
- int CWinApp::Run();
- BOOL CWinThread::PumpMessage();
この二つをオーバーライド。
ちなみに CWinThread は cWinApp が継承している(cWinApp inherits CWinThread)。
で、 Run() と PumpMessage() は継承元からコピペしてくる。
この時、 WM_KICKIDLE が定義されていないと出るけど afxpriv.h をインクルードすればよし。
あ、書いてて気づいたけど Run() はオーバーライドしなくていいか。
PumpMessage() の中にメッセージループがあるので好きなようにデバッグ出力でも何でも書けば良し。