如何让Win32使用Windows XP样式字体

时间:2010-06-12 17:47:40

标签: winapi fonts coding-style

我正在使用普通的C和WinAPI编写Win32应用程序。不允许使用MFC或C ++。为了使用适当的样式绘制控件,我使用清单,如相应的MSDN文章中所述。一切都很好,当我改变系统风格时,我的应用程序也会改变风格。但使用的字体很难看。如何强制应用程序使用标准系统字体?

1 个答案:

答案 0 :(得分:5)

您可以使用SystemParametersInfoSPI_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参数。