我正在维护我的大而成熟的应用程序,没有 MFC 范例和布局的背景。我有 Qt、OO 设计和 UI 框架的经验(我知道每个线程的责任、事件循环、事件处理层次结构等。
在尝试配置我的应用程序时,我遇到了一个设置 CDialog 窗口不断失去焦点的问题。我还有一个文件资源管理器对话框,其行为方式完全相同。两者都由 DoModal 调用激活。
我读到这可能是因为我有两个模态对话框在争夺焦点。我该如何调试?我可以中断什么函数来获得有用的调用堆栈,这样我就可以找到有问题的代码?是否有 MFC::focusWindow(WHND window)
或我可以拦截的东西?
最佳答案
根据您的描述,问题是“有两个模态对话框竞争焦点”。这通常是不可能的,因为根据定义,模态对话框会接管应用程序,并且在对话框关闭之前不会将控制权返回到其启动点。在不知道应用程序架构的情况下,最简单的解决方案是使设置对话框成为无模式的(创建它然后调用 ShowWindow(SW_SHOW) 而不是 DoModal。这将允许消息循环为其他模式对话框运行但不会从中获取焦点您的设置对话框,除非它以自己的方法明确地进行。
关于c++ - 如何在 MFC 中调试不断失去焦点的窗口(例如对话框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827943/