Win32 - есть ли способ получить размер поля или границы вокруг полосы прокрутки? - PullRequest
0 голосов
/ 07 августа 2020

Как получить область между содержимым, отображаемым в клиентской области (например, в блокноте), и полосой прокрутки. Там есть небольшая щель / граница. Как это определяется?

TIA !!

Вот пример: Обратите внимание, что часть маленькой буквы «j» отображается, но между ней и полосой прокрутки справа есть граница. Как узнать этот пробел, потому что клиент RECT включает пробел?

введите описание изображения здесь

1 Ответ

1 голос
/ 08 августа 2020

Блокнот использует стандартный элемент управления EDIT для своей текстовой области. Элемент управления EDIT реализует два сообщения: EM_GETMARGINS и EM_GETRECT. Значения, возвращаемые EM_GETMARGINS и EM_GETRECT, зависят от выбранного шрифта.

Для Courier New при 96 DPI:

height   client rect EM_GETMARGINS EM_GETRECT  right margin
         left right  left right    left right  by EM_GETRECT
10pt     0    489    2    1        3    487    2
20pt     0    489    5    3        6    485    4

Для Lucida Console при 96 DPI:

height   client rect EM_GETMARGINS EM_GETRECT  right margin
         left right  left right    left right  by EM_GETRECT
10pt     0    489    0    0        1    488    1
20pt     0    489    0    1        1    487    2

Для Consolas с разрешением 96 DPI:

height   client rect EM_GETMARGINS EM_GETRECT  right margin
         left right  left right    left right  by EM_GETRECT
10pt     0    489    3    3        5    485    4
20pt     0    489    7    6        8    482    7

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

Это значения по умолчанию. Блокнот может изменять их, но для Windows 10 значения указаны выше. Помните, что на Windows 10 один белый пиксель принадлежит вертикальной полосе прокрутки (это можно проверить, наведя на нее курсор, что приведет к выделению большого пальца полосы прокрутки и изменению курсора с i-луча на стрелку).

Это похоже, что вы используете Consolas и получаете поля по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...