繁体   English   中英

如何让Win32 API窗口看起来更现代?

[英]How can I make the Win32 API window more modern looking?

我几天前订购了Programming Windows Fifth Edition,并开始使用它。

我开始学习win32 api,但是,我有一个问题。 窗户看起来并不像现代的winxp / win vista / win 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将其分配给您创建的每个控件。

据我所知,无法为应用程序中新创建的窗口设置不同的默认值。 也没有办法设置你已经在一个步骤中创建的所有窗口(即,而不是仅仅循环遍历所有窗口,或单独分配)。 例外是对话框,当从资源创建时,允许资源指定用于对话框上所有控件的字体。

您需要使用WM_SETFONT为每个控件设置字体,您可以通过将NONCLIENTMETRICS .lfMessageFont传递给CreateFontIndirect来创建字体(使用SystemParametersInfo (SPI_GETNONCLIENTMETRICS,...)来获取NONCLIENTMETRICS)

对于对话框 ,在<Vista上使用伪字体“ MS Shell Dlg ”@ 8pt,在= = Vista上使用“Segoe UI”@ 9pt

您可能希望发布一些关于您正在谈论的确切差异的屏幕截图,这有助于确定您需要更改的内容。

一般情况下,我会说您可能需要在应用程序中包含一个approprite清单,以便您的应用程序使用最新的常用控件。

此外,现在大多数UI都不是使用SDK样式代码开发的,这很难编程/维护,而是至少使用某种UI库,MFC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM