【发布时间】:2010-06-12 17:47:40
【问题描述】:
我正在使用纯 C 和 WinAPI 编写一个 Win32 应用程序。不允许使用 MFC 或 C++。为了让控件使用适当的样式进行绘制,我使用了清单,如相应的 MSDN 文章中所述。一切都很好,当我更改系统样式时,我的应用程序也会更改样式。但是使用的字体很难看。如何强制应用使用标准系统字体?
【问题讨论】:
标签: winapi fonts coding-style
我正在使用纯 C 和 WinAPI 编写一个 Win32 应用程序。不允许使用 MFC 或 C++。为了让控件使用适当的样式进行绘制,我使用了清单,如相应的 MSDN 文章中所述。一切都很好,当我更改系统样式时,我的应用程序也会更改样式。但是使用的字体很难看。如何强制应用使用标准系统字体?
【问题讨论】:
标签: winapi fonts coding-style
您可以使用SystemParametersInfo 和SPI_GETNONCLIENTMETRICS 参数来检索当前字体。 SystemParametersInfo 将考虑当前主题并为标题、菜单和消息对话框提供字体信息。 (参见GetStockObjecthttp://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 参数代替。
【讨论】: