方法はわかりませんが、ウィンドウのメインメニューを開くと、プログラムのメインメッセージループ(PeekMessage / GetMessageなど)が停止しているようです。メッセージが到着したときにWindowProcが呼び出されるため、モーダルダイアログが開かれた場合の動作とよく似ているようです。そのため、どこかに他のメッセージループがあり、それを維持している必要があります。
どの関数またはメッセージがメインメッセージループをブロックするかはまだわかりません(まだテストしていません)。メニューを開くことに関係するメッセージについては、DefWindowProcのどこかで発生していると思います。
これはWindowsのメインメニューのデフォルトの動作ですか?その場合、これの本当のポイントは何ですか?内部メッセージループではなく、メインメッセージループが実行され続けるように変更できますか?