Как установить стандартный шрифт для всех окон в Приложении Win32?

Я хочу все средства управления (редактирование, перечислите управление, и т.д.) в моем приложении, чтобы иметь тот же шрифт, который не является системным значением по умолчанию. Как я делаю это? Есть ли какой-либо API Win32, который устанавливает стандартный шрифт приложения?

12
задан Canopus 2 June 2009 в 06:48
поделиться

4 ответа

Windows не предоставляет никакого механизма для шрифта всего приложения. Каждый класс окна может иметь собственное поведение при выборе шрифта для использования по умолчанию. Он может попытаться выбрать шрифт, используемый в диалогах оболочки Windows, или может просто нарисовать свой текст, используя ужасный растровый «системный» шрифт, автоматически выбранный для новых контроллеров домена.

Все классы окон общего управления Windows отвечают на WM_SETFONT , которое представляет собой стандартное оконное сообщение, сообщающее окну, какой шрифт вы хотите использовать. Когда вы реализуете свои собственные классы окон (особенно новые классы окон дочерних элементов управления), вы также должны написать обработчик для WM_SETFONT :

  1. Если у вашего класса окна есть дочерние окна, ваш WM_SETFONT ] обработчик должен переслать сообщение каждому из них.
  2. Если ваш класс окна выполняет какое-либо пользовательское рисование, убедитесь, что вы сохранили HFONT, который вы получаете, в обработчике WM_SETFONT , и выберите его в DC, который вы используете при рисовании окна.
  3. Если ваш класс окна используется как окно верхнего уровня, ему потребуется логика для выбора собственного шрифта, поскольку у него не будет родительского окна для отправки сообщения WM_SETFONT .

Обратите внимание, что диспетчер диалогов выполняет некоторые из это для тебя; при создании экземпляра шаблона диалогового окна шрифт нового диалогового окна устанавливается на шрифт, указанный в шаблоне, и диалоговое окно отправляет WM_SETFONT все свои дочерние элементы управления.

ему потребуется логика для выбора собственного шрифта, так как у него не будет родительского окна для отправки ему сообщения WM_SETFONT .

Обратите внимание, что диспетчер диалогов делает часть этого за вас; при создании экземпляра шаблона диалогового окна шрифт нового диалогового окна устанавливается на шрифт, указанный в шаблоне, и диалоговое окно отправляет WM_SETFONT все свои дочерние элементы управления.

ему потребуется логика для выбора собственного шрифта, так как у него не будет родительского окна для отправки ему сообщения WM_SETFONT .

Обратите внимание, что диспетчер диалогов делает часть этого за вас; при создании экземпляра шаблона диалогового окна шрифт нового диалогового окна устанавливается на шрифт, указанный в шаблоне, и диалоговое окно отправляет WM_SETFONT все свои дочерние элементы управления.

8
ответ дан 2 December 2019 в 04:43
поделиться

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

-1
ответ дан 2 December 2019 в 04:43
поделиться

Вы не можете, нет способа сделать это для всех элементов управления одновременно. Вам нужно будет установить его через редактор ресурсов, как предлагалось ранее, или вызвать SetFont () вручную для каждого элемента управления.

1
ответ дан 2 December 2019 в 04:43
поделиться

Удобный метод установки шрифта для всех дочерних окон за один вызов:

SendMessageToDescendants( WM_SETFONT, 
                          (WPARAM)m_fntDialogFont.GetSafeHandle(), 
                          0 ); 
4
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: