#windows #winapi #dialog #rc
#Windows #winapi #диалоговое окно #rc
Вопрос:
Я пытаюсь получить диалоговое окно Win32 размером 500×520 пикселей, но в моем файле .rc из-за этих настроек окно получается больше, чем я ожидал.
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 500, 520
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
Есть ли где-нибудь коэффициент масштабирования?
Ответ №1:
Единицы измерения в диалоговом ресурсе — это диалоговые единицы, которые нормализуются размерами шрифта диалогового окна с помощью довольно сложного процесса. Вы можете преобразовать единицы диалоговых окон в пиксели экрана с помощью MapDialogRect()
.
В документации для GetDialogBaseUnits()
есть намного больше деталей, но рекомендуемый подход заключается в вызове MapDialogRect()
и позволении ему выполнять тяжелую работу за вас.
Комментарии:
1. Да, причина , по которой
GetDialogBaseUnits
вам не следует использовать , заключается в том, что его вычисления основаны на системном шрифте по умолчанию, который больше никто не использует,,. К сожалению, если рассматриваемое окно не является диалогом, у вас нет особого выбора, так какMapDialogRect
это не работает.2. @CodyGray Документация для GetDialogBaseUnits объясняет, как работают модули. Он также сообщает вам, какую функцию следует вызвать, чтобы получить размеры для внесистемного шрифта, который вы также можете использовать для недиалогового окна.