Как настроить размер шрифта на CEditbox, чтобы он соответствовал тексту?

Я использую фреймворк MFC на работе.

У меня есть CEdit элемент управления, в котором я отображаю статус.

Как мне изменить размер шрифта, чтобы текст поместился?
(Я хочу, чтобы размер шрифта был таким большим, чтобы уместился текст.)

Бонусные баллы: как центрировать текст?

Я не специалист по фреймворку MFC.

Вот несколько примеров текстов, которые будут отображаться:

ПРОЙДЕНО
НЕ ПРОЙДЕНО
НЕ ПРОЙДЕНО - САМОПРОВЕРКА
САМОПРОВЕРКА ПРОЙДЕНА


person Thomas Matthews    schedule 02.05.2019    source источник
comment
Если вы установите FAILED - SELF TEST той же ширины, что и PASSED, уменьшив размер шрифта, шрифт будет слишком мелким и нечитаемым. Думаю, ваш вопрос сформулирован неправильно. Чтобы центрировать, перейдите в редактор диалогов, установите для параметра «Выровнять» значение по центру или вызовите edit.ModifyStyle(0, ES_CENTER) на CEdit. Или используйте CStatic для отображения информации только для чтения.   -  person Barmak Shemirani    schedule 02.05.2019
comment
Размер кодирует информацию. Хотя разработчик может захотеть эффективно использовать экранное пространство, используя шрифт оптимального размера, дизайнер пользовательского интерфейса, безусловно, будет возражать. Различные размеры шрифтов не только делают пользовательский интерфейс непоследовательным, но и воспринимаются как дополнительные. Поскольку информация - это ширина текста на доступную область экрана, это не та метрика, которая интересует пользователя. Иногда лучший код - это код, который вы не пишете.   -  person IInspectable    schedule 02.05.2019


Ответы (1)


Во-первых, поле редактирования - это элемент пользовательского интерфейса, который позволяет пользователю вводить текст, но отправленные вами образцы строк выглядят скорее как статус или результат. Придется ли пользователю вводить что-то вроде «НЕ ПРОЙДЕН - САМОПРОВЕРКА»? Я думаю, вам скорее нужен элемент управления только для чтения, например статический элемент управления (обычно стиль утопленного, вытравленного или статического края), как предложил @Barmak Shemirani.

В любом случае я бы порекомендовал следующее:

  • Во-первых, вместо этого рассмотрите возможность увеличения элемента управления, если есть место. Обычно все элементы управления в диалоговом окне используют один и тот же шрифт (и это по умолчанию). Использование в некоторых элементах управления другого шрифта может выглядеть странно (хотя, возможно, приемлемо).
  • Во-вторых (если вы не увеличиваете элемент управления), поэкспериментируйте с размером шрифта, прежде чем пытаться программно установить размер шрифта: установите для текста значение FAILED - SELF TEST (самый длинный) и «вручную» установите размер шрифта на самый большой возможно (чтобы текст уместился) и посмотрите, получите ли вы приемлемый результат.

Если да, вы можете программно установить размер шрифта. MFC в некоторой степени является «тонкой оболочкой» WinAPI, и все элементы WinAPI доступны как открытые члены классов MFC (например, m_hWnd - дескриптор окна WinAPI любого CWnd-производного класса), поэтому вы лучше работаете с WinAPI. уровень здесь. Вы должны проверить / установить размер шрифта во время инициализации (сообщение WM_INITDIALOG, сопоставленное обработчику OnInitDialog()). Вот шаги:

  • Убедитесь, что шрифт (по умолчанию) в порядке: используйте функцию DrawText() с установленным флагом DT_CALCRECT. На самом деле это не будет рисовать текст, вместо этого он вернет необходимый размер (прямоугольник). Также добавьте немного поля (пожалуйста, поэкспериментируйте, но оно должно быть не менее 4 пикселей - две вертикальные линии для рамки и по 1 пикселю с каждой стороны). Если это меньше или равно размеру элемента управления (в качестве альтернативы вы можете протестировать ширину текста без дополнительных полей по сравнению с клиентской областью элемента управления, а не с общим размером), это означает, что шрифт по умолчанию в порядке и никаких других действий не требуется.
  • Если нет, получите шрифт элемента управления и создайте новый шрифт с теми же параметрами, за исключением размера, который должен быть уменьшен на 1 (остерегайтесь параметра или члена lfHeight, если он отрицательный, он должен быть «увеличен»). Проверьте, все ли в порядке с этим шрифтом, и, если нет, повторяйте этот шаг, пока текст не уместится.
  • Я бы не рекомендовал пытаться увеличить размер шрифта, так как это также потребует тестирования высоты элемента управления, но если вы готовы ...

Надеюсь, это поможет, хотя я не знаю, стоит ли это усилий.

person Constantine Georgiou    schedule 02.05.2019