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

Winapi 即使控件具有焦点,焦点矩形也不显示,winapi,mfc,Winapi,Mfc,我在MFC应用程序中遇到以下问题: 控件中的焦点矩形并不总是显示,即使控件具有焦点 复制步骤: 启动应用程序 单击控件 焦点矩形未显示: 使用Alt Tab切换到其他应用程序 切换回我的应用程序 单击控件 现在,焦点矩形如预期所示: 从现在起,控件上的焦点矩形在获得焦点时会正确显示。 就像有两种模式,一种是显示聚焦矩形,另一种是不显示 其他事实: 控件确实具有焦点,因为使用向上/向下箭头键可以更改所选项目 它在Windows10上运行 当我们处于聚焦矩形未显示的模式时,程序的行为保持正确。 有人

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

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

复制步骤:

启动应用程序 单击控件 焦点矩形未显示: 使用Alt Tab切换到其他应用程序 切换回我的应用程序 单击控件 现在,焦点矩形如预期所示: 从现在起,控件上的焦点矩形在获得焦点时会正确显示。 就像有两种模式,一种是显示聚焦矩形,另一种是不显示

其他事实:

控件确实具有焦点,因为使用向上/向下箭头键可以更改所选项目 它在Windows10上运行 当我们处于聚焦矩形未显示的模式时,程序的行为保持正确。
有人遇到过这样的问题吗?我想知道这是否是微软的一项聪明的功能。

这是一项Windows功能,称为键盘提示SPI_GETKEYBOARDPREF和SPI_GETKEYBOARDCUES,Windows的较新版本默认在基于对话框的窗口中隐藏焦点矩形和带下划线的键盘访问键。这一特点是非常重要的

Windows对话框管理器初始化对话框鼠标或键盘:

窗口的默认状态是显示所有指示器。但作为一种特殊的技巧,对话框管理器将在对话框初始化后发送一条WM_UPDATE­UI­STATE消息和UIS­U INITIALIZE,如果最后一个输入事件是鼠标事件,该消息将关闭指示器


如果要覆盖Windows默认设置,可以使用MAKELONGUIS_CLEAR、UISF_HIDEFOCUS将消息发布到对话框窗口,以显示焦点矩形。

这应该是一项功能。它与隐藏焦点提示有关,直到用户使用键盘导航。我从来没有真正理解过它是如何工作的,但是你可以通过在初始化时用wparam=0x10002将WM_UPDATEUISTATE发送到你的窗口来禁用它。@Hanpassant类似于加速器键的下划线,直到你按下Alt键才显示出来?@Hanpassant它是如何工作的?很简单,如果你用键盘导航,你会得到提示。如果您只使用鼠标,则不会使用鼠标,因此UI看起来更干净。按Win+R并输入Calc启动Calc,您将看到一个焦点矩形。点击一个快捷方式启动它,你不会。你可以发布一个WM_更新-UI-STATE。。。请不要弄乱默认设置,这对许多人来说都很好。如果人们不喜欢默认设置,他们会更改系统设置,但这将是他们的选择,而不是你应该为他们决定的事情。