これまで何度も登場してきたDefWindowProcについて・・・。
DefWindowProcは、ウィンドウメッセージに対する既定の処理を行うWindowsAPI・・・。
引数には、WindowProcで渡されたものをそのまま渡す・・・。
基本的には、WindowProcの中で、独自に定義した処理の後に置くことで、それ以降の処理をOSに任せることができる・・・。
これまで行ってきたWNDCLASSのlpfnWndProcにセットしたりするのは、本来正しい使い方でないのでやってはいけない・・・。
で、これが無かったら一体どうなるのか・・・。ちょっと実験してみよう・・・。
WM_CREATEとそれ以外で、DefWindowProcの戻り値を返すのか0を返すのかで、どう動作が変わるのかをいろいろ試してみる・・・。
パターンは、
でiPatternの値は次のメッセージボックス、
これで選択する・・・。ちょっとめんどいけど・・・。
で戻り値の処理は、
こんな感じ・・・。
で実行してみると、
ここで"はい"を選択すると、Pattern1となる・・・。
"いいえ"なら、
と出て、"はい"ならPattern2・・・。
"いいえ"なら、
ここで"はい"でPattern3、
"いいえ"でPattern4に行く・・・。
でこのあと、Pattern1(WM_CREATE, それ以外, ともにDefWindowProc.)とPattern2(WM_CREATEで0, それ以外でDefWindowProc.)の場合は、
ともにウィンドウが正しく表示されたのに対し、
Pattern3(WM_CREATEでDefWindowProc, それ以外で0.)とPattern4(WM_CREATE, それ以外, ともに0.)の場合は、
ウィンドウが正しく表示されない・・・。(枠とか消えてるし・・・。)
Pattern2については、WM_CREATEでの戻り値が0のとき、ウィンドウの作成に成功という仕様のために、上手くいくだけで、他のメッセージの正しい戻り値が0とは限らない・・・。
実際、WM_CREATEのとき、"return 0;"とする例は多い・・・。
だが、それ以外はDefWindowProcに任せるべきである・・・。
いや、全部DefWindowProcでいいんじゃないかな・・・。
Sample/DefWindowProc.cpp at master · bg1bgst333/Sample · GitHub