Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save zamabuvaraeu/2f29f4e54680425a774bc35c7a4ac66c to your computer and use it in GitHub Desktop.

Select an option

Save zamabuvaraeu/2f29f4e54680425a774bc35c7a4ac66c to your computer and use it in GitHub Desktop.

О сложности достижения идеально точного расположения элементов в шаблонах диалоговых окон Win32

Рэймонд Чен

У одного из клиентов возникли проблемы с тем, чтобы шаблон диалогового окна отображал именно то, что ему нужно.

Наш дизайнер указал размеры пользовательского интерфейса в пикселях. При создании диалогового окна с использованием единиц измерения DLU в файле .rc мы не смогли получить те же размеры, которые указал дизайнер. Мы пробовали различные комбинации шрифта и размера диалогового окна, но так и не смогли найти комбинацию без ошибок округления. Кроме того, при использовании маленьких размеров шрифта соотношение сторон элементов пользовательского интерфейса изменяется при более высоких значениях DPI.

Как создать пользовательский интерфейс с точными размерами в пикселях, используя шаблоны диалоговых окон Win32? Существует ли комбинация шрифта и размера шрифта, которая обеспечит соответствие 1 DLU = 1 пиксель?

Диалоговые окна не предназначены для точного позиционирования по пикселям. Они разработаны таким образом, чтобы масштабироваться в зависимости от шрифта и настроек дисплея пользователя. Например, пользователь может использовать систему с высоким разрешением (DPI) или просто предпочитать более крупный текст (чтобы, так сказать, его было видно), и диалоговые окна будут масштабироваться, чтобы соответствовать этим изменениям.

Вернитесь к самостоятельному расчету позиций и используйте этот метод Create­Window для размещения элементов управления именно там, где вам нужно. Вероятно, вам захочется создать собственный язык шаблонов для этого, вместо того чтобы жестко прописывать расположение элементов для каждого из ваших диалоговых окон.

Удачи.

¹ Думаю, можно получить шрифт, где 1 DLU = 1 пиксель, создав шрифт со средней высотой символа 8 пикселей и средней шириной символа 4 пикселя. С другой стороны, ваш дизайнер вряд ли будет доволен таким шрифтом!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment