即使控件具有焦点,焦点矩形也不显示

Jab*_*cky 2 winapi mfc

我在 MFC 应用程序中遇到以下问题:

控件中的焦点矩形并不总是显示出来,即使控件具有焦点。

重现步骤:

  • 启动应用程序
  • 点击控件
  • 未显示焦点矩形: 在此处输入图片说明
  • 使用 Alt-Tab 切换到另一个应用程序
  • 切换回我的应用程序
  • 点击控件
  • 现在焦点矩形按预期显示: 在此处输入图片说明
  • 从现在开始,控件上的焦点矩形在获得焦点时会正确显示。

这就像有两种“模式”,一种是显示焦点矩形,另一种是不显示焦点矩形。

其他事实:

  • 控件确实具有焦点,因为使用向上/向下箭头键可以更改所选项目
  • 它在 Windows 10 上运行
  • 当我们处于未显示焦点矩形的“模式”时,程序的行为保持正确。

有没有人遇到过这样的问题?我想知道这是否是一些“聪明的”微软​​功能。

And*_*ers 5

这是一种称为“键盘提示”(SPI_GETKEYBOARDPREF和SPI_GETKEYBOARDCUES)的 Windows 功能,较新版本的 Windows 默认在基于对话框的窗口中隐藏它们(焦点矩形和带下划线的键盘访问键)。此功能是在 Windows 2000中引入的。

Windows 对话框管理器根据上次输入(鼠标或键盘)初始化对话框:

窗口的默认状态是显示所有指标。但是作为一个特殊的技巧,对话框管理器将在对话框初始化后发送带有 UIS_INITIALIZE 的 WM_UPDATEUISTATE 消息,如果最后一个输入事件是鼠标事件,它会关闭指示器。

您可以将WM_UPDATE­UI­STATE消息发布到您的对话窗口MAKELONG(UIS_CLEAR, UISF_HIDEFOCUS)以显示焦点矩形(如果您希望覆盖 Windows 默认值)。

  • _你可以发布一个 WM_UPDATEUISTATE_ ...请不要搞乱默认的,这对很多人来说都很好。如果人们不喜欢默认设置,他们会更改系统设置,但这将是*他们的选择*,而不是*您*应该为他们决定的事情。 (3认同)