您好,欢迎来到花图问答。
搜索
您的当前位置:首页Windows 下枚举字体过程 (MFC)

Windows 下枚举字体过程 (MFC)

来源:花图问答
Windows 下枚举字体过程

// enumfonts.cpp : 定义控制台应用程序的入口点。

//

#include \"stdafx.h\"

#include \"enumfonts.h\"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

int CALLBACK MyFontEnumProcw(CONST LOGFONTW *, CONST TEXTMETRICW *, DWORD, LPARAM);

//Global

DWORD g_dwFontCount = 0;

typedef struct tagFontFilters

{

DWORD dwFontType;

LPWSTR lfFaceName;

LPWSTR elfFullName;

LPWSTR elfStyle;

LPWSTR elfScript;

}FontFilters;

FontFilters g_filters[] =

{

{ TRUETYPE_FONTTYPE, NULL, L\"BousungEG-Light-GB\

{ TRUETYPE_FONTTYPE, NULL, L\"GBInnMing-Bold\

{ TRUETYPE_FONTTYPE, NULL, L\"GBInnMing-Heavy\

{ TRUETYPE_FONTTYPE, NULL, L\"GBJenLei-Medium\

{ TRUETYPE_FONTTYPE, NULL, L\"GBLinGothic-Medium\

{ TRUETYPE_FONTTYPE, NULL, L\"GBNanSun-Light\

{ TRUETYPE_FONTTYPE, NULL, L\"GBWeiBei-Bold\

{ TRUETYPE_FONTTYPE, NULL, L\"GBYenRound-Bold\

{ TRUETYPE_FONTTYPE, NULL, L\"GBZenKai-Medium\

{ TRUETYPE_FONTTYPE, NULL, L\"Pop3EG-Bold-T-GB\

{ TRUETYPE_FONTTYPE, NULL, L\"SingKaiEG-Bold-GB\

{ TRUETYPE_FONTTYPE, NULL, L\"SingyiEG-Ultra-GB\

{ TRUETYPE_FONTTYPE, NULL, L\"TInnMing-Medium\

{ TRUETYPE_FONTTYPE, NULL, L\"TLinGothic-Bold\

{ TRUETYPE_FONTTYPE, NULL, L\"TNanSung-Light\

{ TRUETYPE_FONTTYPE, NULL, L\"TSingYi-Ultra\

{ TRUETYPE_FONTTYPE, NULL, L\"TWeiBei-Bold\

{ TRUETYPE_FONTTYPE, NULL, L\"TZenKai-Medium\

};

HANDLE g_hFile = NULL;

WCHAR g_lastName[LF_FULLFACESIZE] = { 0 };

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

CoInitialize(NULL);

setlocale(LC_ALL, \"chs\");

int nRetCode = 0;

HMODULE hModule = ::GetModuleHandle(NULL);

if (hModule != NULL)

{

if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))

{

_tprintf(_T(\"错误: MFC 初始化失败\\n\"));

nRetCode = 1;

return nRetCode;

}

}

else

{

_tprintf(_T(\"错误: GetModuleHandle 失败\\n\"));

nRetCode = 1;

return nRetCode;

}

WCHAR path[MAX_PATH];

GetModuleFileNameW(hModule, path, MAX_PATH);

PathRemoveFileSpecW(path);

PathAppendW(path, L\"my_enum_font_test.txt\");

g_hFile = CreateFile(path/*L\"c:\\\emp\\\\my_enum_font_test.txt\"*/,

GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ, NULL, CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

NULL);

if (g_hFile)

{

WCHAR dwUnicodeStyle = 0xfeff;

DWORD dwWritten;

WriteFile(g_hFile, &dwUnicodeStyle, sizeof(dwUnicodeStyle), &dwWritten, NULL);

HWND hWnd = GetDesktopWindow();

HDC hdc = GetDC(hWnd);

HDC hMyDC=CreateCompatibleDC(hdc);

LOGFONTW lf = { 0 };

BYTE charsets[] = {

ANSI_CHARSET,

DEFAULT_CHARSET,

SYMBOL_CHARSET,

SHIFTJIS_CHARSET,

HANGEUL_CHARSET,

HANGUL_CHARSET,

GB2312_CHARSET,

CHINESEBIG5_CHARSET,

OEM_CHARSET,

JOHAB_CHARSET,

HEBREW_CHARSET,

ARABIC_CHARSET,

GREEK_CHARSET,

TURKISH_CHARSET,

VIETNAMESE_CHARSET,

THAI_CHARSET,

EASTEUROPE_CHARSET,

RUSSIAN_CHARSET,

MAC_CHARSET,

BALTIC_CHARSET,

};

for (int i = 0; i < sizeof(charsets) / sizeof(charsets[0]); i++)

{

lf.lfCharSet = charsets[i]; // DEFAULT_CHARSET;

lf.lfFaceName[0] = 0;

EnumFontFamiliesExW(hMyDC/*hdc*/, /*NULL*/&lf, MyFontEnumProcw, NULL, 0);

}

//EnumFontFamiliesExW(hMyDC/*hdc*/, NULL, MyFontEnumProcw, NULL, 0);

DeleteDC(hMyDC);

ReleaseDC(hWnd, hdc);

CloseHandle(g_hFile);

}

return nRetCode;

}

BOOL IsMeet(DWORD FontType, PENUMLOGFONTEXDVW pFont, FontFilters *pFilter)

{

if (pFilter->dwFontType == 0 ||

(pFilter->dwFontType != 0 && (pFilter->dwFontType & FontType)))

{

//wprintf(L\"full name=\\\"%s\\\"\\n\

if (pFilter->elfFullName)

{

if (_wcsicmp(pFilter->elfFullName, pFont->elfEnumLogfontEx.elfFullName) == 0)

{

return TRUE;

}

}

if (pFilter->elfScript)

{

if (_wcsicmp(pFilter->elfScript, pFont->elfEnumLogfontEx.elfScript) == 0)

{

return TRUE;

}

}

if (pFilter->elfStyle)

{

if (_wcsicmp(pFilter->elfStyle, pFont->elfEnumLogfontEx.elfStyle) == 0)

{

return TRUE;

}

}

if (pFilter->lfFaceName)

{

if (_wcsicmp(pFilter->lfFaceName,

{

return TRUE;

}

}

}

return FALSE;

pFont-

>elfEnumLogfontEx.elfLogFont.lfFaceName) == 0)}

int CALLBACK MyFontEnumProcw(CONST LOGFONTW *lpelfe,

CONST TEXTMETRICW *lpntme,

DWORD FontType,

LPARAM lParam)

{

PENUMLOGFONTEXDVW pFont = (PENUMLOGFONTEXDVW)lpelfe;

if (_wcsicmp(g_lastName, pFont->elfEnumLogfontEx.elfFullName))

{

wcscpy_s(g_lastName, LF_FULLFACESIZE, pFont->elfEnumLogfontEx.elfFullName);

if (g_hFile)

{

CStringW s;

s.Format(L\"full=%s, script=%s, style=%s, face=%s\\r\\n\

pFont->elfEnumLogfontEx.elfFullName,

pFont->elfEnumLogfontEx.elfScript,

pFont->elfEnumLogfontEx.elfStyle,

pFont->elfEnumLogfontEx.elfLogFont.lfFaceName);

DWORD dwWritten;

WriteFile(g_hFile, (LPCWSTR)s, sizeof(WCHAR)*s.GetLength(), NULL);

}

}

if (FontType & TRUETYPE_FONTTYPE)

{

NEWTEXTMETRICEX *pEx = (NEWTEXTMETRICEX *)lpntme;

}

&dwWritten, BOOL bMeet = FALSE;

for (int i = 0; i{

if (IsMeet(FontType, pFont, &g_filters[i]))

{

bMeet = TRUE;

break;

}

}//end for

if (bMeet)

{

CStringW s;

s.Format(L\"\\nFontType=%d,\"\\

L\"dvNumAxes=%d,\\n\"\\

L\"fullname=%s,Script=%s,Style=%s\\n\"\\

L\"\CharSet=%d,\\n\"\\

L\"\lfClipPrecision=%d,\\n\"\\

L\"\lfEscapement=%d,\\n\"\\

L\"\lfFaceName=%s,\\n\"\\

L\"\lfHeight=%d,\\n\"\\

L\"\lfItalic=%d,\\n\"\\

L\"\lfOrientation=%d,\\n\"\\

L\"\lfOutPrecision=%d,\\n\"\\

L\"\lfPitchAndFamily=%d,\\n\"\\

L\"\lfQuality=%d,\\n\"\\

L\"\lfStrikeOut=%d,\\n\"\\

L\"\lfUnderline=%d,\\n\"\\

L\"\lfWeight=%d,\\n\"\\

L\"\lfWidth=%d,\\n\

FontType,

pFont->elfDesignVector.dvNumAxes,

pFont->elfEnumLogfontEx.elfFullName,

pFont->elfEnumLogfontEx.elfScript,

pFont->elfEnumLogfontEx.elfStyle,

pFont->elfEnumLogfontEx.elfLogFont.lfCharSet,

pFont->elfEnumLogfontEx.elfLogFont.lfClipPrecision,

pFont->elfEnumLogfontEx.elfLogFont.lfEscapement,

pFont->elfEnumLogfontEx.elfLogFont.lfFaceName,

pFont->elfEnumLogfontEx.elfLogFont.lfHeight,

pFont->elfEnumLogfontEx.elfLogFont.lfItalic,

pFont->elfEnumLogfontEx.elfLogFont.lfOrientation,

pFont->elfEnumLogfontEx.elfLogFont.lfOutPrecision,

pFont->elfEnumLogfontEx.elfLogFont.lfPitchAndFamily,

pFont->elfEnumLogfontEx.elfLogFont.lfQuality,

pFont->elfEnumLogfontEx.elfLogFont.lfStrikeOut,

pFont->elfEnumLogfontEx.elfLogFont.lfUnderline,

pFont->elfEnumLogfontEx.elfLogFont.lfWeight,

pFont->elfEnumLogfontEx.elfLogFont.lfWidth

);

s.Replace(L\"\\n\

wprintf(s);

if (g_hFile)

{

DWORD dwWritten;

WriteFile(g_hFile, (LPCWSTR)s, sizeof(WCHAR)*s.GetLength(), &dwWritten, NULL);

}

}

return 1;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务