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

iyfjxgzm  于 2023-03-13  发布在  Windows
关注(0)|答案(5)|浏览(285)

几天前我订购了Windows第五版编程,并开始使用它。
我开始学习win32 API,但是,我有一个问题。窗口看起来一点也不现代winxp/win vista/win 7的风格。我该怎么解决这个问题?
它目前看起来像这样,垃圾字体和所有。

先谢了!
马希尔

lawou6xi

lawou6xi1#

要获得正确的字体,应该在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));
46qrfjad

46qrfjad2#

很显然,你并没有真正读过这本书,你在寻找WM_SETFONT,这是有原因的,通用控件不是这本书首先涉及的内容。

eh57zj3b

eh57zj3b3#

您可能希望选中GetThemeSysFont以填充适当系统字体的LOGFONT,使用CreateFontIndirect创建它,并使用WM_SETFONT将它分配给您创建的每个控件。
据我所知,没有办法为应用程序中新创建的窗口设置不同的默认值。也没有办法在一个步骤中设置所有已经创建的窗口(即,不是循环遍历所有窗口,或者单独分配)。例外是对话框,当从资源创建时,允许资源指定对话框上所有控件使用的字体。

cgyqldqp

cgyqldqp4#

您需要使用WM_SETFONT为每个控件设置字体,通过将NONCLIENTMETRICS.lfMessageFont传递给CreateFontIndirect(使用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,...)获取NONCLIENTMETRICS)来创建字体
对于dialog boxes,在〈Vista上使用伪字体“MS Shell Dlg“@8pt,在〉= Vista上使用伪字体“Segoe UI”@9pt

4zcjmb1e

4zcjmb1e5#

你可能想发布一些屏幕截图,确切地说,你在谈论什么差异,这将有助于弄清楚你需要改变什么。
一般来说,我会说,你可能需要包括一个适当的清单与您的应用程序,使您的应用程序使用最新的公共控件。
此外,现在大多数UI不是使用SDK风格的代码开发的,这很难编程/维护,而是使用某种UI库,至少是MFC。

相关问题