WM_SIZEをハンドルしないCDialogResizeを作る

前回突然オーバーライドと隠ぺいの話をしたのは、
今回の話につなげるため。

CDialogResizeは便利だが、
チェインを使ってコレを処理してしまうと、
その後にWM_SIZEの処理をすることができなくなってしまう。
(チェインする前に捕まえて、bHadled=FALSEすることは可能)

じゃあCDialogResizeを継承して、処理した後にreturnしないようにすればよいのだが、
OnSize関数は仮想関数ではないので、書き換えることができない。

ところが、そのOnSizeを呼んでいるメッセージマップの実態である、
ProcessWindowMessage関数は、(BEGIN_MSG_MAPマクロの中身)
チェインからのみで、CDialogResize内部からは呼ばれていないので、
これを隠ぺいしてしまえば、CDialogResizeのProcessWindowMessageは呼ばれない。

つまり、WM_SIZEを捕まえてもreturnしないProcessWindowMessageを書けばいいのだ。
続きを読む

WM_SIZEを処理するとCDialogResizeが動かない?

最近、簡潔さとヘッダだけで動く手軽さ、動作の速さに出力バイナリの小ささから、
ATL/WTLに若干ハマっている。

WM_SIZEを処理するとCDialogResizeが動かないという
初歩的すぎるミスを犯したのでメモメモ。
続きを読む