获取系统字体常用方法如下:
LOGFONT lf = { 0 };
::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf);
但这种方法在xp、win7、win8下获取的都是宋体,我们期望的结果是在win78下返回微软雅黑,正确获取系统字体的方法下:
// WTL 获取标准字体方法:
CLogFont logFont;
logFont.SetMessageBoxFont();
// API 获取标准字体方法:
NONCLIENTMETRICS info;
info.cbSize = sizeof(NONCLIENTMETRICS);
if (SystemParametersInfo (SPI_GETNONCLIENTMETRICS, 0, &info, 0))
{
hSystemFont = CreateFontIndirect ((LOGFONT*)&info.lfMessageFont);
}
原理是获取消息窗口的字体,这个字体通常也是系统的标准字体。