Как я могу установить размер диалогового окна Win32 в пикселях?

#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 объясняет, как работают модули. Он также сообщает вам, какую функцию следует вызвать, чтобы получить размеры для внесистемного шрифта, который вы также можете использовать для недиалогового окна.