Как сделать окно Win32 API более современным? - PullRequest
9 голосов
/ 24 июля 2010

Я заказал Программирование Windows Fifth Edition несколько дней назад и начал работать с ним.

Я начинаю изучать API Win32, однако у меня возник вопрос.Окна совсем не выглядят современно в стиле winxp / win vista / win 7.Как это исправить?

В настоящее время это выглядит так, шрифт дерьма и все.

enter image description here

Заранее спасибо!

Machiel

Ответы [ 5 ]

12 голосов
/ 24 июля 2010

Чтобы получить правильный шрифт, вы должны вызывать его после 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));
4 голосов
/ 24 июля 2010

Вы, по-видимому, на самом деле не читали книгу. Вы ищете WM_SETFONT . Есть причина, по которой общие элементы управления - это не первое, что охватывает книга.

2 голосов
/ 24 июля 2010

Вам необходимо установить шрифт для каждого элемента управления с помощью WM_SETFONT , вы создаете шрифт, передавая NONCLIENTMETRICS .lfMessageFont в CreateFontIndirect (Использовать SystemParametersInfo (SPI_GETNONCLIENTMETRICS, ...) для получения НЕКЛИЕНТМЕТРИКИ)

Для диалоговых окон используется псевдо-шрифт " MS Shell Dlg " @ 8pt on = Vista

2 голосов
/ 24 июля 2010

Возможно, вы захотите установить GetThemeSysFont, чтобы заполнить LOGFONT соответствующего системного шрифта, создать его с помощью CreateFontIndirect и WM_SETFONT, чтобы назначить его каждому создаваемому элементу управления.

Насколько мне известно, нет способа установить другое значение по умолчанию для вновь созданных окон в вашем приложении. Также нет способа установить все окна, которые вы уже создали, за один шаг (то есть вместо того, чтобы просто циклически просматривать их все или назначать по отдельности). Исключение составляют диалоговые окна, которые при создании ресурсов позволяют ресурсу указывать шрифт, используемый для всех элементов управления в диалоговом окне.

0 голосов
/ 24 июля 2010

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

В общем, я бы сказал, что вам, вероятно, нужно включитьСоответствующий манифест с вашим приложением, так что ваше приложение использует новейшие общие элементы управления.

Кроме того, в наши дни большая часть пользовательского интерфейса не разрабатывается с использованием кода стиля SDK, его очень сложно программировать / поддерживать, вместо этого используйте какую-то библиотеку пользовательского интерфейса.МФЦ как минимум.

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