CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

关于字体的困惑!!希望大家指点迷津!

楼主VCYang(雨杨)2006-03-06 14:49:58 在 VC/MFC / 界面 提问

在一个Print(CDC   *pDC,   CPrintInfo   *pInfo)函数中有如下代码,意在改变当前字体用以打印:  
   
  CFont   ft;  
  ft.CreatePointFont(120,"MS   Sans   Serif");  
  ft.GetLogFont(&lg);  
  pDC->SelectObject(&ft);  
  pDC->GetTextFace(str);  
   
  可是令人不解的是,str得到的却总是“宋体”,应该是"MS   Sans   Serif"才对??  
  为什么会这样希望大家指点指点,先谢了。 问题点数:30、回复次数:7Top

1 楼VCYang(雨杨)回复于 2006-03-06 15:15:42 得分 0

Print(CDC   *pDC,   CPrintInfo   *pInfo)函数最开始写了段调试代码:  
   
  LOGFONT   lf;  
  CString   str;  
  pDC->GetCurrentFont()->GetLogFont(&lf);  
  pDC->GetTextFace(str);  
  中断后发现:  
  lf.lfFaceName   =   "System";  
  str   =   "宋体";    
  不明白此时pDC用的到底是哪种字体……Top

2 楼everandforever(Forever)回复于 2006-03-06 15:22:30 得分 5

看看打出来的英文字母是什么体的。  
  汉字肯定是宋体。Top

3 楼YufengShi(浪子)回复于 2006-03-06 15:32:24 得分 20

//   This   code   fragment   shows   how   to   create   a   font   object,  
  //   select   the   font   object   into   a   DC   (device   context)   for   text  
  //   drawing,   and   finally   delete   the   font   object.  
   
  CClientDC   dc(this);  
   
  CFont   font;  
  VERIFY(font.CreatePointFont(120,   _T("Arial"),   &dc));  
   
  //   Use   the   font   you   just   created.  
  CFont*   def_font   =   dc.SelectObject(&font);  
  dc.ExtTextOut(5,   5,   ETO_OPAQUE,   NULL,   _T("Hello"),   NULL);  
  dc.SelectObject(def_font);  
   
  //   Finished   with   the   font,   now   delete   the   font   object.  
  font.DeleteObject();  
  Top

4 楼wawaku(一堆裤衩!)回复于 2006-03-06 16:25:14 得分 5

关注中....Top

5 楼VCYang(雨杨)回复于 2006-03-06 16:30:18 得分 0

找到原因了:  
  原来使用"MS   Sans   Serif"创建字体时,并没有创建成功,但是CreatePointFont仍然返回1。  
  而且GetLogFont(&lg)查看该字体的名称也填充了"MS   Sans   Serif"!给人以错觉,以为成功了。  
  可是系统却使用了默认字体,于是出现了str得到的是“宋体”。  
  只有当使用无效字体时,系统才会使用默认字体,可见"MS   Sans   Serif"是个错误的字体名称。  
   
  正确的应该使用"Microsoft   Sans   Serif"创建字体,这时pDC->GetTextFace(str);  
  str得到的才是"Microsoft   Sans   Serif"。  
   
  Top

6 楼VCYang(雨杨)回复于 2006-03-06 17:33:49 得分 0

不知道我的结论是否正确,有没有人使用"MS   Sans   Serif"成功创建字体?  
  Top

7 楼VCYang(雨杨)回复于 2006-03-07 11:10:58 得分 0

经过进一步求证,得知:  
  MS   Sans   Serif   是早先的bitmap字体,适合用于屏幕显示  
  Microsoft   Sans   Serif   是新近的TrueType字体,   适合用于屏幕显示和打印。  
  在打印时由于选择的Bitmap字体MS   Sans   Serif,不适合打印,系统自动选择了默认字体进行打印。所以在OnDraw中使用MS   Sans   Serif字体时没有问题的,而在OnPrint中就不能使用该字体了,应该选用适合打印的TrueType字体。Top

相关问题

  • 指点迷津----工作的困惑
  • 成长的困惑.请指点迷津.
  • c的困惑,望高手指点迷津,高分相送!
  • 指点迷津
  • 指点迷津
  • 望指点迷津
  • 小弟有一个困惑很久的问题,那问大哥愿指点迷津!!
  • 有关同时使用模板和友元函数的困惑,望指点迷津
  • 请高手指点迷津.
  • 高手指点迷津!!!!!

关键词

  • 字体
  • 打印
  • dc
  • 系统
  • microsoft
  • sans serif
  • 宋体
  • getlogfont
  • pdc
  • mssans serif

得分解答快速导航

  • 帖主:VCYang
  • everandforever
  • YufengShi
  • wawaku

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo