怎样获取计算机中已经安装的所有字体,急

解决方案 »

  1.   

    列举 系统 fonts 目录下的所有文件:)
      

  2.   

    在提示一下吧:EnumFontFamiliesEx
      

  3.   

    int FAR PASCAL EnumFace(LPLOGFONT lplf,LPTEXTMETRIC lptm,short type,LPSTR lpdata);
    int glb_TotalFace=0;
    char glb_FaceName[305][LF_FACESIZE];。
    LPARAM lpdata=0;
     HANDLE hInst;
     HWND hwnd;
       HDC hdc;
     FONTENUMPROC lpfnEnumFace;
         hInst=AfxGetApp();
     hwnd=GetSafeHwnd();
     hdc=::GetDC(hwnd);
     
     lpfnEnumFace=(FONTENUMPROC)MakeProcInstance((FARPROC)EnumFace,hInst);
             EnumFonts(hdc,NULL,lpfnEnumFace,lpdata);
             FreeProcInstance(lpfnEnumFace);
     ::ReleaseDC(hwnd,hdc);。
    int FAR PASCAL EnumFace(LPLOGFONT lplf,LPTEXTMETRIC lptm,short type,LPSTR lpdata)
    {        if((glb_TotalFace)>=300)return 0;
    if((lplf->lfFaceName[0]!='@' && type==TRUETYPE_FONTTYPE)) 
    {
    lstrcpy(glb_FaceName[glb_TotalFace],lplf->lfFaceName);
    glb_TotalFace++;
    }
    /*
    if(lstrcmp(lplf->lfFaceName,"中國龍豪行書")==0)
    {
    int i;
    i=0;
    }
    */
    return 1;
    }
      

  4.   

    /*
    回调函数:枚举系统字体
    */
    BOOL CALLBACK AFX_EXPORT CIPPhoneDlg::EnumFamScreenCallBackEx(ENUMLOGFONTEX *pelf, NEWTEXTMETRICEX *, int FontType, LPVOID pThis)
    {
    if (FontType & RASTER_FONTTYPE)
    return 1;
    CString ss;
    if(FontType & TRUETYPE_FONTTYPE)
    ss=_T(pelf->elfLogFont.lfFaceName);
    int kk=((CIPPhoneDlg*)pThis)->m_FontList.AddString(ss);
    SYSFONTS[m_fontNum].strFonts=ss;
    m_fontNum++;
    return 1; 
    }/*
    函数:枚举字体,添加到combobox
    */
    BOOL CIPPhoneDlg::EnumerateFonts()
    {
    HDC hDC;
    hDC = ::GetWindowDC(NULL);
    LOGFONT lf;
    ZeroMemory(&lf,sizeof(lf));
    lf.lfCharSet = GB2312_CHARSET;
    if (!EnumFontFamiliesEx(
    hDC, // 设备描述表句柄
    &lf, // 逻辑字体信息指针
    (FONTENUMPROC)EnumFamScreenCallBackEx, // 回调函数指针
    (LPARAM) this,
    (DWORD) 0))
    return FALSE;

    ::ReleaseDC(NULL,hDC);
    return TRUE; 
    }
      

  5.   

    MSDN的例程有
    Samples\VC98\mfc\ole\wordpad