我在做ObjectARX程序,在AutoCAD中写文字时需要用到字体的文件名,但我通过CFontComboBox获取的是字体名称,如何通过字体名称获取字体文件名?
如:通过“宋体”获取他的MS-DOS名称:SIMSUN.TTF
网上有说通过遍历注册表,我试了,但注册表中的宋体名称为“宋体 & 新宋体 (TrueType)” ,与 CFontComboBox中的不能匹配,高手出来指点一下啊
如:通过“宋体”获取他的MS-DOS名称:SIMSUN.TTF
网上有说通过遍历注册表,我试了,但注册表中的宋体名称为“宋体 & 新宋体 (TrueType)” ,与 CFontComboBox中的不能匹配,高手出来指点一下啊
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);
// 2. parameter : size of the buffer [IN], size of the output [OUT]里面对应,这里描述了已安装的字体文件包含的所有字体。因为是未公开的函数,请自己解析结构。
……你自己用代码读几个系统字体文件,然后比较其返回Buffer的内容,基本就能对照着猜出来了。都说了是未公开的函数,结构肯定是未公开的。要自己动手丰衣足食。调试的时候有内存观察工具,自己看内存。先从英文字体对照起,然后用中文字体验证自己推测的是否正确。