如何让Win32使用Windows XP风格的字体

iks*_*nov 3 winapi fonts coding-style

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

Ole*_*leg 5

您可以使用SystemParametersInfowith 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;
Run Code Online (Sandbox Code Playgroud)

如果你知道LOGFONT参数在示例的末尾看到如何在win32 windows项目中更改默认窗口字体,那么如何在窗口/控件中创建和设置字体的示例,但是使用LOGFONT不来自GetStockObject(DEFAULT_GUI_FONT),而是SystemParametersInfo使用SPI_GETNONCLIENTMETRICS参数返回.