“Исправьте” Диалоговое окно / шрифт UI в Windows

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

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

Как я "по закону" выбираю правильный шрифт?

8
задан In silico 31 May 2010 в 10:40
поделиться

1 ответ

"Правильный" способ получить шрифт, используемый в диалоговых окнах, таких как окна сообщений и т.д. будет функция SystemParametersInfo():

// C++ example
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(NONCLIENTMETRICS);
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
    &metrics, 0);
HFONT font = ::CreateFontIndirect(&metrics.lfMessageFont);
::SendMessage(ctrlHWND, WM_SETFONT, (WPARAM)font, MAKELPARAM(TRUE, 0));

Не забудьте уничтожить шрифт при уничтожении элементов управления:

::DeleteObject(font);

Вы можете посмотреть в документации MSDN для NONCLIENTMETRICS и SystemParametersInfo() чтобы узнать, какие еще общесистемные параметры вы можете получить.

8
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

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