| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:GDI+、GdiPlus判断字体是否存在的C++代码源码
只看楼主 加入收藏
wsgsoft
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2019-12-9
收藏
 问题点数:0 回复次数:0 
GDI+、GdiPlus判断字体是否存在的C++代码源码
本篇文章属于《518抽奖软件开发日志》系列文章的一部分。



我在开发《518抽奖软件》(www.)的时候,需要判断用户选的字体是否存在(比如换了电脑环境等),如果不存在就采用默认字体。如何判断字体是否存在呢,基本逻辑是,枚举系统字体,看有没有这个字体。但是,字体可以有2个名字,本地名和英文名,所以要对比2个名字。代码如下。
程序代码:
int CALLBACK Proc_findFont(const LOGFONT* lplf, const TEXTMETRIC* lptme, DWORD FontType, LPARAM lParam)

{

    WCHAR* rslt = (WCHAR*)lParam;



    BOOL bOk = TRUE;

    BYTE x = lplf->lfPitchAndFamily;

    if (s_bFixedPitch && g_app.get_bits(x, 1, 2) != FIXED_PITCH)  bOk = FALSE;

    if (lplf->lfCharSet != s_charset && s_charset != DEFAULT_CHARSET)  bOk = FALSE;



    if (*s_name != 0)

    {

        WCHAR name[LF_FACESIZE] = { 0 };

        FontFamily ff(s_name);

        ff.GetFamilyName(name);

// 核心:检查2个名字,中文名和英文名

        if (_wcsicmp(lplf->lfFaceName, name) != 0 &&

            _wcsicmp(lplf->lfFaceName, s_name) != 0)

        {

            bOk = FALSE;

        }

    }



    if (*(lplf->lfFaceName) != L'@' && lplf->lfCharSet != SYMBOL_CHARSET && bOk)

    {

        BOOL bTrueType = FontType & TRUETYPE_FONTTYPE;

        BOOL bRaster = FontType & RASTER_FONTTYPE;

        BOOL bDevice = FontType & DEVICE_FONTTYPE;

        BOOL bVector = !(bRaster || bTrueType);

        if (bTrueType)

        {

            wcscpy(rslt, lplf->lfFaceName);

            return 0;

        }

    }

    return 1;

}



static void find_font(const WCHAR* name, unsigned int charset, BOOL bFixedPitch, WCHAR* rslt)

{

    memset(s_name, 0, sizeof(s_name));

    if (name) wcscpy(s_name, name);

    s_charset = charset;

    s_bFixedPitch = bFixedPitch;



    HDC hDc = GetDC(g_app.m_hMain);

    LOGFONT lf = { 0 };

    lf.lfCharSet = DEFAULT_CHARSET;

    EnumFontFamiliesEx(hDc, &lf, (FONTENUMPROC)Proc_findFont, (LPARAM)rslt, 0);

    ReleaseDC(g_app.m_hMain, hDc);

}



搜索更多相关主题的帖子: 判断 BOOL 字体 name 是否存在 
2023-09-26 13:42
快速回复:GDI+、GdiPlus判断字体是否存在的C++代码源码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019711 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved