目前共有4篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:不轉換▼
 
點擊 回復
261 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)
 

本帖信息

點擊數:261 回複數:3
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-5-24 18:14
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用共享創意姓名標示-相同方式分享 3.0 Unported許可協議進行許可。