c++ - 如何在 MFC 中调试不断失去焦点的窗口(例如对话框)?

标签 c++ mfc modal-dialog

我正在维护我的大而成熟的应用程序,没有 MFC 范例和布局的背景。我有 Qt、OO 设计和 UI 框架的经验(我知道每个线程的责任、事件循环、事件处理层次结构等。

在尝试配置我的应用程序时,我遇到了一个设置 CDialog 窗口不断失去焦点的问题。我还有一个文件资源管理器对话框,其行为方式完全相同。两者都由 DoModal 调用激活。

我读到这可能是因为我有两个模态对话框在争夺焦点。我该如何调试?我可以中断什么函数来获得有用的调用堆栈,这样我就可以找到有问题的代码?是否有 MFC::focusWindow(WHND window) 或我可以拦截的东西?

最佳答案

根据您的描述,问题是“有两个模态对话框竞争焦点”。这通常是不可能的,因为根据定义,模态对话框会接管应用程序,并且在对话框关闭之前不会将控制权返回到其启动点。在不知道应用程序架构的情况下,最简单的解决方案是使设置对话框成为无模式的(创建它然后调用 ShowWindow(SW_SHOW) 而不是 DoModal。这将允许消息循环为其他模式对话框运行但不会从中获取焦点您的设置对话框,除非它以自己的方法明确地进行。

关于c++ - 如何在 MFC 中调试不断失去焦点的窗口(例如对话框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827943/

相关文章:

c++ - C++中指向二维矩阵的指针

c++ - 在 Boost.Log 中按范围过滤

c++ - 句柄类和赋值运算符

c++ - 包含它的模板化类型的 shared_ptr

c++ - LoadLibrary(xx.dll) 错误 126

c++ - 如何知道函数是否来自 MFC

javascript - Safari : Alert Message Not Closed when next alert Message Opens Using Jquery?

javascript - SammyJS json 商店演示 - 如何创建模态产品弹出窗口?

c++ - 如何从 CMFCEditBrowseCtrl 获取路径文本?

jquery - 将对话框影响应用于内联相对 Div(无悬停影响)