«Правильный» шрифт Dialog / UI в Windows - PullRequest
8 голосов
/ 31 мая 2010

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

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

Как мне "легально" получить правильный шрифт?

1 Ответ

8 голосов
/ 31 мая 2010

«Правильный» способ получить шрифт, используемый в диалоговых окнах, таких как окна сообщений и т. Д., Будет через функцию 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(), чтобы узнать, какие другие общесистемные параметры вы можете получить.

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