【问题标题】:Why Visual Studio gets focused although there is no breakpoint?为什么 Visual Studio 没有断点却能集中注意力?
【发布时间】:2011-05-17 11:22:58
【问题描述】:
我的应用程序中没有断点,但有时 Visual Studio 会在没有原因的情况下获得焦点。 (在调试模式下或不在调试模式下)(就像有一个断点)
可能是什么原因?
【问题讨论】:
标签:
visual-studio
debugging
visual-c++
breakpoints
【解决方案1】:
如果调试器没有中断是因为您手动设置了断点,或者因为应用程序抛出了异常或遇到了其他一些意外错误,那么最可能的解释是您的应用程序正在放弃焦点。
例如,您销毁当前具有焦点且位于前台before 设置的窗口,该设置将焦点移至应用程序中的另一个窗口。然后,因为 some 窗口 always 必须具有焦点,所以窗口管理器将激活设置为下一个可用窗口,该窗口恰好是 Visual Studio 拥有的窗口。产生的效果就像你按下了 Alt+Tab。
Raymond Chen 有一篇关于此的博客文章,The correct order for disabling and enabling windows:
如果您完成了一个模态对话框,您可能会想按以下顺序进行清理:
但如果您这样做,您会发现前台激活不会返回给您的所有者。相反,它会转到某个随机的其他窗口。将激活显式设置为预期所有者“修复”了问题,但您仍然有所有闪烁,并且闯入者窗口的 Z 顺序变得一团糟。
发生了什么事?
当您销毁模态对话框时,您正在销毁带有前台激活的窗口。窗口管理器现在需要找到其他人来激活。它试图将其提供给对话框的所有者,但所有者仍处于禁用状态,因此窗口管理器会跳过它并寻找其他窗口,即未被禁用的窗口。
这就是为什么你会得到奇怪的闯入者窗口。
销毁模态对话框的正确顺序是
这一次,当模态对话框被销毁时,窗口管理器会查看所有者,嘿,这一次它是启用的,所以它继承了激活。
没有闪烁。没有闯入者。