 |
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; }
|
 |
【示例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; }
|
 |
【Win7下的運行效果】  【WinXP下的運行效果】 
|
 |
本來直接調用EnumFontFamiliesEx這個API函數也是可以的,但是這個函數非要傳一個函數指針進去,不傳不行,所以用起來不是很方便。
|