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

时间:2017-09-29 13:10:00

标签: winapi mfc

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

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

重现的步骤:

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

有两种"模式"一个显示焦点矩形,另一个显示焦点矩形。

其他事实:

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

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

1 个答案:

答案 0 :(得分:4)

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

Windows对话框管理器初始化对话框based on the last input(鼠标或键盘):

  

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

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