Почему я получаю размер элемента tmHeight структуры TEXTMETRI C в пикселях, а не в логических единицах? - PullRequest
0 голосов
/ 18 января 2020

Windows В документации GDI четко указано, что

Все размеры указаны в логических единицах; то есть они зависят от текущего режима отображения контекста дисплея.

Когда я делаю такую ​​вещь внутри WndPro c:

HDC hdc = GetDC(hwnd);
TEXTMETRIC textmetric;
GetTextMetrics(hdc, &textmetric);

tmHeight равен 16 баллам , что составляет

16 * GetDeviceCaps(hdc, LOGPIXELSY) / 72 

пикселей. Конечно, если я правильно понимаю эту статью: https://docs.microsoft.com/en-us/windows/win32/learnwin32/dpi-and-device-independent-pixels

Но когда я создаю stati c, редактируем элемент управления с некоторым текстом и указываем высоту элемента управления, равную 16 пикселям, это странно совпадает с текстом высота шрифта enter image description here

У меня вопрос, почему этот шрифт действительно умещается в 16 пикселей, когда он должен иметь размер 16 * 96/72 пикселей?

1 Ответ

0 голосов
/ 20 января 2020

Согласно TEXTMETRICA do c:

Структура TEXTMETRI C содержит основную c информацию о физическом шрифте. Все размеры указаны в логических единицах.

То есть tmHeight в логических единицах. Вам не нужно использовать следующий код для получения высоты символа.

lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

И режим отображения системы по умолчанию - MM_TEXT .

Каждая единица в пространстве страницы отображается в один пиксель; то есть масштабирование не выполняется вообще. Если перевод не используется (это значение по умолчанию), пространство страницы в режиме отображения MM_TEXT эквивалентно пространству физического устройства. Значение х увеличивается слева направо. Значение y увеличивается сверху вниз.

Таким образом, благодаря преобразованию сопоставления высота пикселя символа равна высоте элемента управления stati c.

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