Я пытаюсь определить размер DPI шрифта на целевом компьютере с Windows и изменить шрифт нашего приложения так, чтобы он выглядел так же, как если бы у целевого компьютера было то же dpi, что и у устройства dev. (Таким образом, большее целевое DPI означало бы, что мы сделали бы наши шрифты меньше, чем во время разработки).
Мне интересно, есть ли проблемы с приведенным ниже решением и, в частности, является ли LOGPIXELSX = 88 правильным.
Фон
Я изменяю размеры всех элементов управления и шрифтов в наших формах в соответствии с текущим разрешением экрана Windows. Однако, если у кого-то значение Font DPI установлено выше, мы должны учесть это и сделать шрифт меньшим (чтобы он в конечном итоге соответствовал нужному размеру на экране). Наши шрифты уже довольно большие (тем более что мы изменяем их размеры с разрешением экрана). Дополнительный размер из-за более высокого DPI делает текст слишком большим.
Мое решение до сих пор
Из того, что я могу сказать, если мы используем GetDeviceCaps, как показано ниже, а затем получаем CurrentFontDPI и делаем это:
(Игнорирование изменения размера шрифта из-за нового разрешения экрана):
NewFontSize = CurrentFontSize * (DevelopmentDPI / CurrentFontDPI)
Function CurrentFontDPI
Dim hwnd, hDC, logPix, r As Long
Dim LOGPIXELSX=88
hwnd = GetDesktopWindow()
hDC = GetDC(hwnd)
logPix = GetDeviceCaps(hDC,LOGPIXELSX )
r = ReleaseDC(hwnd, hDC)
CurrentFontDPI= logPix
конечная функция
К вашему сведению, приведенный выше код является частью более широкой подпрограммы в «связанном SO вопросе] [1]. Я пропустил оставшуюся часть кода, так как казалось, что есть хотя бы одна ошибка (в ней был NewFont = OldFont * (NewDPI-OldDPI), который даст вам нулевой размер шрифта, если DPI не изменился)
[1]: http://www.BungalowSoftware.com тест