在CFont::CreateFont函数中的最后一个参数:lpszFacename就是字体样式名称。经过测试发现像微软雅黑、华文行楷、幼圆等字体无法绘制出对应的样式。
后来通过检测注册表来检查问题发现注册表中没有对应字体库,然后我又重新安装对应的字体库,注册表中也有了,通过以下代码检查:LONG   ires;   
 HKEY   hMyKey;   
 DWORD   Type   =   REG_SZ;     
 DWORD   count=   256;   
 byte   mstr[256]="";   
 ires=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",
  0, KEY_READ,&hMyKey);   
 if(ERROR_SUCCESS!=ires)   
  MessageBox("注册表读取错误");   
 else   
  ires=RegQueryValueEx(hMyKey,"微软雅黑 Bold (TrueType)",0,&Type,mstr,&count);   if  (mstr[0]=='\0') //没有安装 
  {return false;}
 else
  {return true;} 检测出微软雅黑等字体都安装了,但是绘制的时候除了微软雅黑的字体能显示正确,其他字体显示的都不对。
这是什么原因呢?
CFont支持所有字体样式还是只支持部分字体,能详细列举说明吗?

解决方案 »

  1.   

    DC可支持的字体可以通过 EnumFonts 或  EnumFontFamiliesEx 枚举
    oid CSDIt1View::OnDraw(CDC* pDC)
    {
      CSDIt1Doc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      if (!pDoc)
        return;  // TODO: add draw code for native data here
      int nSaveDC = pDC->SaveDC();  LOGFONT lgFont={0};
      lgFont.lfHeight = -MulDiv(72, pDC->GetDeviceCaps(LOGPIXELSY), 72);
      lgFont.lfCharSet = DEFAULT_CHARSET;
      _tcscpy_s(lgFont.lfFaceName, _T("微软雅黑"));
      lgFont.lfWeight = FW_BOLD;  CFont mFont;
      mFont.CreateFontIndirect(&lgFont);
      CFont *pOldFont = pDC->SelectObject(&mFont);  pDC->SetTextColor(RGB(255, 0, 0));
      pDC->TextOut(10, 10, lgFont.lfFaceName);  pDC->SelectObject(pOldFont);
      pDC->RestoreDC(nSaveDC);}
      

  2.   

    http://blog.csdn.net/visualeleven/article/details/6248115