Как настроить размер шрифта на CEditbox, чтобы он соответствовал тексту? - PullRequest
0 голосов
/ 02 мая 2019

Я использую MFC Framework на работе.

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

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

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

Я не эксперт по инфраструктуре MFC.

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

ПРИНЯТ
FAILED
НЕПРАВИЛЬНО - ТЕСТ ДЛЯ САМОПРОВЕРКИ
ТЕСТ ДЛЯ САМОПРОВЕРКИ ПРОЙДЕН

1 Ответ

0 голосов
/ 02 мая 2019

Прежде всего, поле редактирования - это элемент пользовательского интерфейса, который позволяет пользователю печатать текст, но отправленные вами образцы строк скорее выглядят как статус или результат. Придется ли пользователю печатать что-то вроде «FAILED - SELF TEST»? Я думаю, что вам скорее нужен элемент управления только для чтения, такой как статический элемент управления (обычно утопленный, вытравленный или в стиле статического края), как предложил @Barmak Shemirani.

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...