Я заказал Windows Fifth Edition Программирования несколько дней назад и начал работать с ним.
Я начинаю изучать win32 api, однако, я получил вопрос. Окна не смотрят современная перспектива/победа winxp/победы 7 стилей вообще. Как я фиксирую это?
Это в настоящее время похоже на это, загаженный шрифт и так далее.
Заранее спасибо!
Machiel
Чтобы получить правильный шрифт, вы должны вызвать это после CreateWindow (Ex)
:
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
HFONT hFont = ::CreateFontIndirect(&ncm.lfMessageFont);
::SendMessage(hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
По-видимому, вы на самом деле не читали книгу. Вы ищете WM_SETFONT . Есть причина, по которой общие элементы управления - не первое, о чем говорится в книге.
Вы можете проверить GetThemeSysFont
, чтобы заполнить LOGFONT
подходящим системным шрифтом, создать его с помощью CreateFontIndirect
и WM_SETFONT
, чтобы назначить его каждому элементу управления, который вы создаете.
Насколько мне известно, невозможно установить другое значение по умолчанию для вновь созданных окон в вашем приложении. Также нет способа установить все окна, которые вы уже создали, за один шаг (т. Е. Вместо того, чтобы просто перебирать их все или назначать по отдельности). Исключением являются диалоговые окна, которые при создании из ресурсов позволяют ресурсу указывать шрифт, используемый для всех элементов управления в диалоговом окне.
Возможно, вы захотите опубликовать снимки экрана, показывающие, о каких именно различиях вы говорите, это поможет понять, что вам нужно изменить.
В общем, я бы сказал, что вам, вероятно, потребуется включить соответствующий манифест в ваше приложение, чтобы ваше приложение использовало самые последние общие элементы управления.
Кроме того, в наши дни большая часть пользовательского интерфейса не разрабатывается с использованием кода в стиле SDK, его очень сложно программировать / поддерживать, вместо этого используйте какую-то библиотеку пользовательского интерфейса, по крайней мере, MFC.
Вам необходимо установить шрифт для каждого элемента управления с помощью WM_SETFONT , вы создаете шрифт, передав NONCLIENTMETRICS .lfMessageFont в CreateFontIndirect (используйте SystemParametersInfo (SPI_GETNONCLIENTMETRICS, ...) для получения NONCLIENTMETRICS)
Для диалоговых окон используется псевдошрифт « MS Shell Dlg « @ 8pt на