奇妙なエラーが発生し、解決策が見つからずにデバッガーで何時間も費やしています。(しかし、WM_KICKIDLE タスクから EndDialog を呼び出すべきではないという別のエラーを修正するのに役立ちました)。
私の問題は、メイン ウィンドウと、モーダル サブダイアログ ウィンドウを表示するモードレス ダイアログ ウィンドウがあることです。サブダイアログ ウィンドウが閉じられたとき。モードレス ダイアログ ウィンドウは、モーダル ウィンドウに変わります。私のコードは実際にモーダル ループを離れます。そして、現在のモーダル ウィンドウを閉じると、非表示のモーダル ウィンドウがアクティブであるように動作します。つまり、対話ができなくなります。
メインウィンドウの上でモーダルダイアログのみを実行すると、正常に閉じられます。
ところで: メイン ウィンドウは、利用可能なビュー CWinApp::m_pMainWnd ではなく、新しく作成された FrameWindow です。p_MainWnd を非表示にして、非表示のメッセージのみのウィンドウとして使用します。いくつかのコメントとデバッグ セッションから、pMainWnd には特別な意味があることがわかりましたが、モーダル ウィンドウとの関係を正確に把握できました (たとえば、文書化されていない "CWinApp::DoEnableModeless" があります)。
編集: WM_CLOSE をダイアログに投稿し、OnClose() ハンドラーから EndDialog(0) を使用してモーダル状態を終了します。また、EndDialog(0) を直接使用しようとしました。この 2 つの方法に違いはありません。