如何调试MFC中不断丢失的焦点窗口(例如对话框)?

时间:2014-07-18 14:53:22

标签: c++ mfc modal-dialog

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

我一直在设置CDialog窗口时不断失去焦点,而我正在尝试配置我的应用程序。我还有一个文件浏览器对话框,行为完全相同。两者都是由DoModal调用激活的。

我读过这可能是因为我有两个竞争焦点的模态对话框。我该怎么调试呢?我可以使用什么功能来获得一个有用的callstack,所以我可以找到有问题的代码?是否有MFC::focusWindow(WHND window)或我可以拦截的东西?

3 个答案:

答案 0 :(得分:1)

使用Spy ++监视对话框中发生的消息/事件。

答案 1 :(得分:1)

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

答案 2 :(得分:-1)