我有一个奇怪的错误,在调试器中花了几个小时没有找到解决方案。(但它帮助我修复了另一个错误,即您永远不应该从 WM_KICKIDLE 任务中调用 EndDialog)。
我的问题是我有一个主窗口和一个无模式对话框窗口,它会引发一个模式子对话框窗口。当子对话框窗口关闭时。无模式对话窗口将自己变成一个模式窗口。我的代码确实离开了模态循环。如果我关闭现在的模态窗口,它的行为就像一个不可见的模态窗口处于活动状态,这意味着不再可能进行交互。
当我只在主窗口顶部运行模式对话框时,它关闭得很好。
顺便说一句:主窗口不是一个可用的视图 CWinApp::m_pMainWnd 而是一个新创建的 FrameWindow。我隐藏 p_MainWnd 并将其用作不可见的仅消息窗口。从一些评论和我的调试会话中,我发现 pMainWnd 有一些特殊的含义,但我可以弄清楚它与模式窗口到底有什么关系(例如,有一个未记录的“CWinApp::DoEnableModeless”)。
编辑:我将 WM_CLOSE 发布到对话框,然后使用 OnClose() 处理程序中的 EndDialog(0) 退出模态状态。我也尝试直接使用 EndDialog(0) 。这两种方法没有区别。