怎样获得字体文件的本地名? 比如,有字体文件simsun.ttc,本地名为“宋体 & 新宋体 &宋体-PUA”,我怎样通过这个文件得到这些信息呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注册表:HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts 没做过,试试以下代码。int EnumFonts( HDC hdc, // handle to DC LPCTSTR lpFaceName, // font typeface name FONTENUMPROC lpFontFunc, // callback function LPARAM lParam // application-supplied data);LOGFONT lf;CFont boldfont, *pOldFont;lf.lfWeight = FW_BOLD; lf.lfHeight = -12;memcpy((LPVOID)lf.lfFaceName, "Arial", sizeof("Arial"));boldfont.CreateFontIndirect(&lf);pOldFont = pDC->SelectObject(&boldfont);CString str11;pDC->GetTextFace(str11);//str11便是选入到设备空间的字体。 我是楼主,大家好。谢谢各位。我现在需要补充一下我的问题,就是现在想通过解析simsun.ttc文件的方式得到本地名,而不是通过注册表的方式查找。因为通过注册表方式查找,只能笼统的查出本地名,比如“宋体 & 新宋体 &宋体-PUA”包含三个字体,这三个字体都在simsun.ttc文件里面。我现在可以通过解析simsun.ttc文件得到英文名,SimSun,NSimSun,SimSun-PUA,但是这是英文名,我需要得到的是这些英文名对应的本地名,比如SimSun对应宋体,NSimSun对于新宋体。这些对应关系是不能通过查找注册表而得到的。我想问的问题其实是这个,不知我说清楚了没有。 你可以看看注册表 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts里面就有汉字,那你说这汉字从哪里来?微软怎么知道的? 使用未公开的函数:GetFontResourceInfoW typedef BOOL (WINAPI *PGFRI)(LPCWSTR, DWORD *, LPWSTR, DWORD); // 1. parameter : seems to be the filename [IN] // 2. parameter : size of the buffer [IN], size of the output [OUT] // 3. parameter : a buffer [OUT] // 4. parameter : an enumerated type // return value is a simple BOOL : ok / not ok // #define GetFontResourceInfo GetFontResourceInfoW HINSTANCE hDLL = LoadLibrary(_T("GDI32.DLL")); PGFRI GetFontResourceInfo = (PGFRI)GetProcAddress(hDLL, "GetFontResourceInfoW"); WCHAR fontName[] = L"Arial.ttf"; WCHAR wBuffer[1024]; DWORD dwBufSiz = sizeof(wBuffer); // a couple values I tested GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 0); // returns 1 (0x00000001) in wBuffer dwBufSiz = sizeof(wBuffer); GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 1); // "Arial" in Unicode dwBufSiz = sizeof(wBuffer); GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 2); // a (rather) large structure with some info dwBufSiz = sizeof(wBuffer); GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 3); // nothing special dwBufSiz = sizeof(wBuffer); GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 4); // the fullpath of the file dwBufSiz = sizeof(wBuffer); wangk,太谢谢了,我先试试,我就知道微软把它藏起来了 http://topic.csdn.net/t/20060406/10/4666853.html 下面两段代码,那个效率高呢? 如何在输出字符串中加上%号 如何将形如\u60c5\u65ad\u68a6\u91cc的字符串转换为汉字? 关于窗口的宽度和高度 VC调用VB的ocx出现的不常用变量类型如何转换 关于vector的引用做参数的问题 窗口类名! 实例句柄(hinstance)究竟有何用??初学者,请大哥大姐们指教 VC7.0是简体中文版还是创天中文版? 弱弱的问:在VC 中如何变换数据类型? 画刷无法画图,崩溃了,救命 求一个fstream的问题
int EnumFonts(
HDC hdc, // handle to DC
LPCTSTR lpFaceName, // font typeface name
FONTENUMPROC lpFontFunc, // callback function
LPARAM lParam // application-supplied data
);
LOGFONT lf;
CFont boldfont, *pOldFont;
lf.lfWeight = FW_BOLD; lf.lfHeight = -12;
memcpy((LPVOID)lf.lfFaceName, "Arial", sizeof("Arial"));
boldfont.CreateFontIndirect(&lf);
pOldFont = pDC->SelectObject(&boldfont);
CString str11;
pDC->GetTextFace(str11);//str11便是选入到设备空间的字体。
我现在需要补充一下我的问题,就是现在想通过解析simsun.ttc文件的方式得到本地名,而不是通过注册表的方式查找。
因为通过注册表方式查找,只能笼统的查出本地名,比如“宋体 & 新宋体 &宋体-PUA”包含三个字体,这三个字体都在simsun.ttc文件里面。
我现在可以通过解析simsun.ttc文件得到英文名,SimSun,NSimSun,SimSun-PUA,但是这是英文名,我需要得到的是这些英文名对应的本地名,比如SimSun对应宋体,NSimSun对于新宋体。这些对应关系是不能通过查找注册表而得到的。
我想问的问题其实是这个,不知我说清楚了没有。
里面就有汉字,那你说这汉字从哪里来?微软怎么知道的?
// 2. parameter : size of the buffer [IN], size of the output [OUT]
// 3. parameter : a buffer [OUT]
// 4. parameter : an enumerated type
// return value is a simple BOOL : ok / not ok // #define GetFontResourceInfo GetFontResourceInfoW HINSTANCE hDLL = LoadLibrary(_T("GDI32.DLL")); PGFRI GetFontResourceInfo = (PGFRI)GetProcAddress(hDLL, "GetFontResourceInfoW"); WCHAR fontName[] = L"Arial.ttf"; WCHAR wBuffer[1024];
DWORD dwBufSiz = sizeof(wBuffer); // a couple values I tested GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 0); // returns 1 (0x00000001) in wBuffer
dwBufSiz = sizeof(wBuffer);
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 1); // "Arial" in Unicode
dwBufSiz = sizeof(wBuffer);
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 2); // a (rather) large structure with some info
dwBufSiz = sizeof(wBuffer);
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 3); // nothing special
dwBufSiz = sizeof(wBuffer);
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 4); // the fullpath of the file
dwBufSiz = sizeof(wBuffer);