目前共有23篇帖子。
【对比】Windows7系统下五种获取系统默认字体代码的效果
21楼 巨大八爪鱼 2016-5-24 16:25
22楼 巨大八爪鱼 2016-5-24 17:13
【XP下楷体字不能显示的解决方案】
int CALLBACK FontExistsProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam)
{
    return 0; // 直接终止EnumFontFamiliesEx函数的运行
}

// 判断字体是否存在的函数
BOOL FontExists(LPLOGFONT lpFont)
{
    HDC hdc = GetDC(NULL);
    BOOL bResult = (EnumFontFamiliesEx(hdc, lpFont, FontExistsProc, (LPARAM)NULL, (DWORD)NULL) == 0);
    ReleaseDC(NULL, hdc);
    return bResult;
}

// 创建自定义字体对象
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; // 是否为斜体

    // 如果字体不存在, 就更换名称
    if (!FontExists(&logfont))
        lstrcpy(logfont.lfFaceName, TEXT("楷体_GB2312"));
   
    hfontCustom = CreateFontIndirect(&logfont);
}
24楼 巨大八爪鱼 2016-5-24 20:27
代码[1]和代码[4]在两个系统下有着相似的效果。虽然hFontCaption都是赋的一样的值,仅仅是多获取了一下NCM,就会产生截然不同的效 果。据此可推测一定是SystemParametersInfo在获取NCM的同时也影响了GetStockObject。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
 
 
©2010-2025 Arslanbar [手机版] [桌面版]
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。