设置 | 登录 | 注册

作者共发了23篇帖子。

【对比】Windows7系统下五种获取系统默认字体代码的效果

1楼 巨大八爪鱼 2016-5-24 15:28
[1]
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

运行结果:
文本框、单选框、复选框完全无法显示。
按钮和下拉菜单框的字显示正常。
2楼 巨大八爪鱼 2016-5-24 15:30
[2]
hfontCaption = NULL;

运行结果:
文本框、单选框、复选框完全无法显示。
按钮和下拉菜单框的字的字体不正常。
3楼 巨大八爪鱼 2016-5-24 15:31
[3]
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, (UINT)NULL);
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

[4]
ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(int);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, (UINT)NULL);
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);


运行结果:
所有控件字体正常。(仅仅是加了获取ncm的代码,而变量ncm后面根本没有用到)
4楼 巨大八爪鱼 2016-5-24 15:32
[5]
ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(int);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, (UINT)NULL);
hfontCaption = CreateFontIndirect(&ncm.lfCaptionFont);


运行结果:
所有控件字体正常。但和3、4字体不同。
5楼 巨大八爪鱼 2016-5-24 15:34
至于XP系统,上述五段代码编译后运行,效果都是一样的:

所有的控件都无法显示!
就连楷体都无法识别!
6楼 巨大八爪鱼 2016-5-24 15:35
楷体字的代码:
void InitFont(void)
{
    LOGFONT logfont;
    ZeroMemory(&logfont, sizeof(logfont));
    logfont.lfCharSet = GB2312_CHARSET; // 字符集
    lstrcpy(logfont.lfFaceName, TEXT("楷体")); // 字体名称
    logfont.lfHeight = 48; // 字体大小
    logfont.lfQuality = ANTIALIASED_QUALITY; // 字体品质
    logfont.lfWeight = FW_BOLD; // 是否为粗体
    //logfont.lfItalic = TRUE; // 是否为斜体
    hfontCustom = CreateFontIndirect(&logfont);
}
7楼 巨大八爪鱼 2016-5-24 15:37
本人似乎明白了一点!
因为自己忘了在主函数里加InitCommonControls();了!
所以XP系统下无法初始化XP风格的控件!
8楼 巨大八爪鱼 2016-5-24 15:38
于是赶快加上这句话:

9楼 巨大八爪鱼 2016-5-24 15:42
[1]
hfontCaption = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
10楼 巨大八爪鱼 2016-5-24 15:43
[2]
hfontCaption = NULL;

内容转换:

回复帖子
内容:
用户名: 您目前是匿名发表。
验证码:
看不清?换一张
©2010-2025 Purasbar Ver3.0 [手机版] [桌面版]
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。