目前共有4篇帖子。 内容转换:不转换▼
 
点击 回复
196 3
【函数】判断字体是否存在(即是否已安装)的函数
一派护法 十九级
1楼 发表于:2016-5-24 17:16
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;
}
一派护法 十九级
2楼 发表于:2016-5-24 17:41
【示例C语言控制台程序:判断一系列的字体是否存在】
#include <conio.h>
#include <locale.h>
#include <tchar.h>
#include <Windows.h>

int CALLBACK FontExistsProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam)
{
    return 0; // 直接终止EnumFontFamiliesEx函数的运行
}

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

// 判断字体是否存在的函数(2)
BOOL FontNameExists(LPTSTR szFontName)
{
    LOGFONT logfont;
    ZeroMemory(&logfont, sizeof(logfont));
    logfont.lfCharSet = DEFAULT_CHARSET;
    lstrcpy(logfont.lfFaceName, szFontName);
    return FontExists(&logfont);
}

int main(void)
{
    int i;
    LPTSTR list[] = {TEXT("黑体"), TEXT("白体"), TEXT("楷体"), TEXT("Times New Roman"), TEXT("楷体_GB2312"), TEXT("Consolas")};
    int n = sizeof(list) / sizeof(list[0]); // 字符串个数

    setlocale(LC_ALL, "chs");
    for (i = 0; i < n; i++)
    {
        if (FontNameExists(list[i]))
            _tprintf(TEXT("字体“%s”存在\n"), list[i]);
        else
            _tprintf(TEXT("字体“%s”不存在\n"), list[i]);
    }

    _getch();
    return 0;
}
一派护法 十九级
3楼 发表于:2016-5-24 17:42
【Win7下的运行效果】


【WinXP下的运行效果】

一派护法 十九级
4楼 发表于:2016-5-24 18:14
本来直接调用EnumFontFamiliesEx这个API函数也是可以的,但是这个函数非要传一个函数指针进去,不传不行,所以用起来不是很方便。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:196 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-5-24 18:14
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。