【问题标题】:Why Visual Studio gets focused although there is no breakpoint?为什么 Visual Studio 没有断点却能集中注意力?
【发布时间】:2011-05-17 11:22:58
【问题描述】:

我的应用程序中没有断点,但有时 Visual Studio 会在没有原因的情况下获得焦点。 (在调试模式下或不在调试模式下)(就像有一个断点)

可能是什么原因?

【问题讨论】:

  • 是否抛出异常?遇到某种类型的错误?
  • 什么都没有。就像我按了 alt+tab。

标签: 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 顺序变得一团糟。

发生了什么事?

当您销毁模态对话框时,您正在销毁带有前台激活的窗口。窗口管理器现在需要找到其他人来激活。它试图将其提供给对话框的所有者,但所有者仍处于禁用状态,因此窗口管理器会跳过它并寻找其他窗口,即未被禁用的窗口。

这就是为什么你会得到奇怪的闯入者窗口。

销毁模态对话框的正确顺序是

  • 重新启用所有者。
  • 销毁模态对话框。

这一次,当模态对话框被销毁时,窗口管理器会查看所有者,嘿,这一次它是启用的,所以它继承了激活。

没有闪烁。没有闯入者。

【讨论】:

  • 嗯,我认为这可能是问题所在。感谢您的明确解释:)
猜你喜欢
  • 2015-12-03
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多