Функция DrawFocusRect: странный двухпиксельный прямоугольник фокуса в Windows 10

Я заметил, что прямоугольник фокуса изменился в одном из наших устаревших приложений, когда оно работает в Windows 10. Оказалось, что есть и другие приложения Microsoft старого стиля, в которых мы видим такой же эффект - например, в HTML Help Workshop. Прямоугольник фокуса должен быть пунктирным прямоугольником, состоящим из чередующихся черных и белых точек, но мы видим 2-пиксельный прямоугольник, смешанный с выделенной областью, которая выглядит как красно-оранжевый прямоугольник:

Проблема возникает только на 2 компьютерах с Windows 10 версии 1909. Один из них - версия Pro, другой - версия Home.

Прямоугольник фокуса рисуется в нашем приложении с помощью функции WinAPI DrawFocusRect. Документация для DrawFocusRect функция утверждает следующее:

Windows XP: прямоугольник фокусировки теперь может быть толще 1 пикселя, поэтому он более заметен для дисплеев с высоким разрешением и высокой плотностью, а также для специальных возможностей.

Но это не помогает понять, почему проблема возникает только на этих 2 компьютерах. Они оснащены обычными дисплеями с разрешением 96 точек на дюйм, и, насколько я знаю, в них не включены специальные возможности.

Что это могло быть и как исправить прорисовку прямоугольника фокуса, чтобы увидеть традиционный прямоугольник с черно-белыми точками размером 1 пиксель?


Если это помогает, вот пример кода, используемого для рисования прямоугольника фокуса в нашем приложении VB6:

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

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

1 ответ

Решение

Спасибо всем, кто прокомментировал мой вопрос. Ситуация прояснилась, но не во всех частях проблемы. В этом виде ответа я возобновляю все, что мы знаем к настоящему времени.

Да, действительно, в Windows 10 мы можем открыть Control Panel > Ease of Access > Ease of Access Center > Make the computer easier to see и найти Make the focus rectangle thicker вариант:

Первое, чего я не понимаю, это то, почему эта опция была отмечена. Саймон Мурье считает, что это унаследованный от предыдущей установки Windows, но я сомневаюсь, что это правда. Я точно знаю, что, по крайней мере, на моем компьютере разработчика никто не проверял это, так как только я мог это сделать. Похоже, что Windows в какой-то момент решает проверить эту опцию сама в зависимости от некоторых параметров системы.

Второй непонятный момент - почему прямоугольник фокуса стал темно-оранжево-красным. Но может быть, это намеренно. Возможно, кто-то в Microsoft решил, что этот цвет - лучший выбор для прямоугольника фокуса.

Принимая во внимание все это, я думаю, что лучший выбор для меня и других разработчиков, которым нужен прямоугольник фокуса в наших приложениях, - это нарисовать прямоугольник фокуса самостоятельно, используя толщину, определенную значениями системных параметров SPI_GETFOCUSBORDERHEIGHT и SPI_GETFOCUSBORDERWIDTH.

Другие вопросы по тегам