DrawFocusRect 函数:奇怪的 2 像素聚焦矩形 Windows 10

DrawFocusRect function: Strange 2-pixel focus rectangle in Windows 10

我注意到我们的一个遗留应用程序在 Windows10 中运行时焦点矩形发生了变化。事实证明,我们在其他旧式 Microsoft 应用程序中看到了相同的效果 -例如,在 HTML Help Workshop 中。焦点矩形必须是由交替的黑白点组成的虚线矩形,但我们看到一个 2 像素的矩形与看起来像红橙色矩形的选区混合:

问题只出现在2台Windows10,版本1909的电脑上。其中一台是专业版,另一台是家庭版。

焦点矩形是在我们的应用程序中使用 WinAPI DrawFocusRect 函数绘制的。 DrawFocusRect 函数的文档说明如下:

Windows XP: The focus rectangle can now be thicker than 1 pixel, so it is more visible for high-resolution, high-density displays and accessibility needs.

但这无助于理解为什么问题只发生在这两台计算机上。它们配备了普通的 96dpi 显示器,据我所知,它们没有打开辅助功能选项。

它可能是什么以及如何修复焦点矩形的绘制以看到传统的 1 像素 black/white 虚线矩形?


如果有帮助,下面是一个用于在我们的 VB6 应用程序中绘制焦点矩形的代码示例:

Dim hBrBlack As Long
hBrBlack = CreateSolidBrush(vbBlack)
FrameRect hMemDC, rcFocusRect, hBrBlack
DeleteObject hBrBlack

SetBkColor hMemDC, lColor1
SetTextColor hMemDC, lColor2
DrawFocusRect hMemDC, rcFocusRect

感谢所有评论我的问题的人。情况变得明朗起来,但并不是所有的地方都有问题。我在这样的回答中恢复我们现在所知道的一切。

是的,的确,在 Windows 10 中我们可以打开 Control Panel > Ease of Access > Ease of Access Center > Make the computer easier to see 并找到 Make the focus rectangle thicker选项:

首先我不明白的是为什么这个选项被勾选了。 Simon Mourier 认为它是以前 Windows 安装的遗留物,但我怀疑这是真的。我绝对知道至少在我的开发电脑上没有人检查过这个,因为只有我能做到这一点。似乎 Windows 决定在某个时候根据某些系统参数检查此选项本身。

第二个难以理解的地方是为什么焦点矩形变成了dark-orange-red。但也许,这是设计使然。也许,Microsoft 中有人认为这种颜色是焦点矩形的最佳选择。

考虑到所有这些,我认为,对于我和其他需要在我们的应用程序中使用焦点矩形的开发人员来说,最好的选择是使用 SPI_GETFOCUSBORDERHEIGHT 和SPI_GETFOCUSBORDERWIDTH 系统参数值。