我正在使用纯 C 和 WinAPI 编写 Win32 应用程序。不允许使用 MFC 或 C++。为了让控件使用适当的样式进行绘制,我使用了清单,如相应的 MSDN 文章中所述。一切都很好,当我更改系统样式时,我的应用程序也会更改样式。但使用的字体实在是太丑了。如何强制应用程序使用标准系统字体?
您可以使用SystemParametersInfo
with SPI_GETNONCLIENTMETRICS
参数来检索当前字体。 SystemParametersInfo 将考虑当前主题并提供标题、菜单和消息对话框的字体信息。 (见备注GetStockObject
http://msdn.microsoft.com/en-us/library/dd144925(VS.85).aspx http://msdn.microsoft.com/en-us/library/dd144925(VS.85).aspx)。该函数将检索NONCLIENTMETRICS
结构(见http://msdn.microsoft.com/en-us/library/ff729175(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/ff729175(v=VS.85).aspx)其中包含您需要的所有信息:
typedef struct tagNONCLIENTMETRICS {
UINT cbSize;
int iBorderWidth;
int iScrollWidth;
int iScrollHeight;
int iCaptionWidth;
int iCaptionHeight;
LOGFONT lfCaptionFont;
int iSmCaptionWidth;
int iSmCaptionHeight;
LOGFONT lfSmCaptionFont;
int iMenuWidth;
int iMenuHeight;
LOGFONT lfMenuFont;
LOGFONT lfStatusFont;
LOGFONT lfMessageFont;
#if (WINVER >= 0x0600)
int iPaddedBorderWidth;
#endif
} NONCLIENTMETRICS, *PNONCLIENTMETRICS, *LPNONCLIENTMETRICS;
如果您知道,如何在窗口/控件中创建和设置字体的示例LOGFONT
参数参见示例末尾更改 win32 windows 项目中的默认窗口字体 https://stackoverflow.com/questions/2885454/change-the-default-window-font-in-a-win32-windows-project/2887783#2887783,但使用 doLOGFONT
不是来自GetStockObject(DEFAULT_GUI_FONT)
,但返回的是SystemParametersInfo
with SPI_GETNONCLIENTMETRICS
参数代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)