Кошмар макета пользовательского интерфейса с WinAPI - PullRequest
2 голосов
/ 03 ноября 2010

Я хотел бы знать, что мне делать с макетом GUI под WinAPI / MFC.

В идеальном мире я должен просто создать форму / диалог через редактор ресурсов, и все должно работать. В реальном мире редактор диалогов - древний бегемот из ледникового периода и не поддерживает большинство элементов управления comctl32.

Вот тут и возникает проблема. Диалоговый редактор использует блоки DLU, и когда я создаю новые элементы управления во время выполнения, я должен выражать их в смещениях пикселей.

Я наткнулся на одну статью о вычислении DLU на основе шрифта http://support.microsoft.com/kb/145994/en-us,, но также где-то увидел предупреждение о том, что в некоторых случаях диалоги могут иметь несистемные шрифты, поэтому такой подход не очень безопасен. Кроме того, в статье, похоже, рассматриваются только английские символы, без учета всех других символов в пространстве Юникода, которые могут быть шире?.

Кто-нибудь провел исследование в этом направлении и нашел лучший способ?

P.S .: Нет Winforms / WPF / Delphi, требования.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

MapDialogRect (упоминается в статье) - это функция, которую Windows использует для преобразования диалоговых единиц в ресурсе диалога в пиксельные единицы.MapDialogRect работает (где GetDlgBaseUnits терпит неудачу), потому что он задал фактический дескриптор диалоговому окну, и может отправить ему сообщение WM_GETFONT для получения фактического шрифта, с которым будет отображаться диалог.

2 голосов
/ 03 ноября 2010

редактор диалогов - древний бегемот из ледникового периода и не поддерживает большинство элементов управления comctl32

Нет необходимости напрямую поддерживать элементы управления, вы можетеиспользуйте его только для позиционирования, вставив его в качестве пользовательского элемента управления и заполнив класс окна на странице свойств.Например, вот так я вставляю элементы управления ссылками в VS2005: как пользовательский элемент управления с классом "SysLink".

...