比如,有字体文件simsun.ttc,本地名为“宋体 & 新宋体 &宋体-PUA”,我怎样通过这个文件得到这些信息呢?

解决方案 »

  1.   

    注册表:HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts
      

  2.   

    没做过,试试以下代码。
    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便是选入到设备空间的字体。
      

  3.   

    我是楼主,大家好。谢谢各位。
    我现在需要补充一下我的问题,就是现在想通过解析simsun.ttc文件的方式得到本地名,而不是通过注册表的方式查找。
    因为通过注册表方式查找,只能笼统的查出本地名,比如“宋体 & 新宋体 &宋体-PUA”包含三个字体,这三个字体都在simsun.ttc文件里面。
    我现在可以通过解析simsun.ttc文件得到英文名,SimSun,NSimSun,SimSun-PUA,但是这是英文名,我需要得到的是这些英文名对应的本地名,比如SimSun对应宋体,NSimSun对于新宋体。这些对应关系是不能通过查找注册表而得到的。
    我想问的问题其实是这个,不知我说清楚了没有。
      

  4.   

    你可以看看注册表 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts
    里面就有汉字,那你说这汉字从哪里来?微软怎么知道的?
      

  5.   

    使用未公开的函数: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);
      

  6.   

    wangk,太谢谢了,我先试试,我就知道微软把它藏起来了
      

  7.   

    http://topic.csdn.net/t/20060406/10/4666853.html