比如,我想判断运行我程序的环境下是否安装了Arial Unicode MS字体
如果安装了就使用该字体设置窗体,
如果没有,就使用SimSun
请教~~~

解决方案 »

  1.   

    直接用Arial Unicode MS创建字体,如果失败再改成用SimSun创建。
      

  2.   

    我试验过创建的,就算系统没有Arial Unicode MS字体也能create成功
    if(m_DlgFont.CreatePointFont(90, _T("Arial Unicode MS")))
    {
       AfxMessageBox(_T("OK"));
    }EnumFonts还在查msdn看如何使用
      

  3.   

    试了一下,果然不行,看来只能EnumFonts了。
      

  4.   

    恩 看了会msdn终于试验成功了
    我看上面写说不用EnumFonts这个
    要用EnumFontFamiliesEx用法大概这样
    先写个回调函数
    int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
    {
    CString strName = lpelf ->elfLogFont.lfFaceName;
    AfxMessageBox(strName);
    return 10;
    }
    这个lpelf ->elfLogFont.lfFaceName 就是我要找的字体名
    如果系统里面有这个字体的话 这个函数就会返回 return 10;下面是创建字体
    if(m_DlgFont.CreatePointFont(90, _T("Arial Unicode MS")))
    {
                    CFont* pFont = m_ctlMstrTree.GetFont();
    LOGFONT lf;
                    memset(&lf, 0x00, sizeof(LOGFONT));
                    pFont->GetLogFont(&lf);
    CString strTest = lf.lfFaceName; CClientDC dc (this);
    int iRet = EnumFontFamiliesEx(dc, &lf, (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
    }
    就是如果创建Arial Unicode MS字体成功 那么就用EnumFontFamiliesEx检查系统里是否有该字体
    如果返回10 那么就有 否则就没有