我正在使用普通的C和WinAPI编写Win32应用程序。不允许使用MFC或C ++。为了使用适当的样式绘制控件,我使用清单,如相应的MSDN文章中所述。一切都很好,当我改变系统风格时,我的应用程序也会改变风格。但使用的字体很难看。如何强制应用程序使用标准系统字体?
答案 0 :(得分:5)
您可以使用SystemParametersInfo
和SPI_GETNONCLIENTMETRICS
参数来检索当前字体。 SystemParametersInfo将考虑当前主题并提供字幕,菜单和消息对话框的字体信息。 (请参阅GetStockObject
http://msdn.microsoft.com/en-us/library/dd144925(VS.85).aspx的评论)。该函数将检索NONCLIENTMETRICS
结构(请参阅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
参数在窗口/控件中创建和设置字体的示例,请参阅change the default window font in a win32 windows project示例的末尾,但不要使用do LOGFONT
GetStockObject(DEFAULT_GUI_FONT)
,但由SystemParametersInfo
返回SPI_GETNONCLIENTMETRICS
参数。