CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请教画立体字的方法。突起或者陷下的效果

楼主OnlyHappy(说好不打脸)2004-08-01 08:36:49 在 VC/MFC / 基础类 提问

最好有源代码 问题点数:50、回复次数:4Top

1 楼hugos(疯狂老鼠)回复于 2004-08-01 08:41:24 得分 0

dos下自己画,windows下用word好了Top

2 楼OnlyHappy(说好不打脸)回复于 2004-08-01 08:47:01 得分 0

晕哦。俺要在程序的对话框中用GDI画出来Top

3 楼BLsoft(網龍ζ龍活)(Cyber-Security of [MVP])回复于 2004-08-01 08:47:13 得分 50

思路很简单,你可以先打出一行字来.然后在X   Y坐标上分别+1就可以了(当然RGB应该是不同值)  
  OR  
  CFont对象:    
   
  CFont   m_font;    
   
  ……    
   
  m_font.CreateFontIndirect(&lf);    
   
  其参数为一个指向LOGFONT结构的指针。LOGFONT结构主要定义了字体的属性,其定义可通过MSDN帮助查到:    
   
  typedef   struct   tagLOGFONT   {    
   
  LONG   lfHeight;    
   
  //字符字体高度    
   
  LONG   lfWidth;   //字符平均宽度    
   
  LONG   lfEscapement;    
   
  //文本行逆时针旋转角度    
   
  LONG   lfOrientation;   //字体角度    
   
  LONG   lfWeight;   //字体粗细程度    
   
  BYTE   lfItalic;   //倾斜    
   
  BYTE   lfUnderline;   //下划线    
   
  BYTE   lfStrikeOut;   //删除线    
   
  ……    
   
  }   LOGFONT;    
   
  在对其进行设置时,lfOutPrecision、lfClipPrecision、lfQuality   以及lfPitchAndFamily这几个成员变量一般可如下设置而无需改动:    
   
  LOGFONT   lf;    
   
  //lf定义字体属性    
   
  lf.lfOutPrecision=   OUT_STROKE_PRECIS;    
   
  lf.lfClipPrecision=   CLIP_STROKE_PRECIS;    
   
  lf.lfQuality   =   DRAFT_QUALITY;    
   
  lf.lfPitchAndFamily=   VARIABLE_    
   
  PITCH|FF_MODERN;    
   
  对于其他的成员变量则要根据实际需求进行具体的设定。例如,对于本文要显示的没有下划线和删除线并且没有倾斜处理的粗体幼圆汉字,可以采取如下设置:    
   
  lf.lfHeight   =   50;    
   
  lf.lfWidth   =   0;    
   
  lf.lfEscapement   =   0;    
   
  lf.lfOrientation   =   0;    
   
  lf.lfWeight   =   FW_HEAVY;    
   
  lf.lfItalic   =   FALSE;    
   
  lf.lfUnderline   =   FALSE;    
   
  lf.lfStrikeOut   =   FALSE;    
   
  lf.lfCharSet   =   GB2312_CHARSET;   strcpy(lf.lfFaceName,“幼圆”);    
   
  同其他使用CDC绘图类进行绘图的程序类似,对字体进行绘制处理也是在视类的OnDraw()函数中完成的。首先需要选择前面设定好的字体,由于3D文字的显示是靠两层(甚至更多层)文字的叠加而成,因此需要并将其背景设定透明,否则将仅在文字的轮廓处有3D效果,而文字内部仍是平面的:    
   
  CFont*   pOldFont   =   (CFont*)pDC->SelectObject(&m_font);    
   
  pDC->SetBkMode(TRANSPARENT);    
   
  在此为了说明原理仅选择了两层文字进行叠加,可通过API函数GetSysColor获得当前系统的三维高亮度色和三维低亮度色,并对字体进行设置,由于3维文字是文字在前,阴影在后,所以需要先对阴影部分进行绘制:    
   
  pDC->SetTextColor(::GetSysColor(COLOR_3DDKSHADOW));    
   
  pDC->TextOut(10,10,sTemp);   //sTemp为待显示文字    
   
  此时的效果如下图所示,但仍是2维文字:  
   
  <img   src="http://www.pconline.com.cn/pcedu/empolder/gj/vc/10302/pic/030226cw1.jpg">  
   
  为了显示出3维效果,需要在其上覆盖上一层高亮度文字,显然坐标不能仍是(10,10),否则显示出的文字仍是2维的。一般可通过错开一两个像素来达到不同光源位置的3D文字效果,比如在此就是在原位置向右上移动了3个像素,可通过在平面移动适当的距离来控制3D效果的深度:    
   
  pDC->SetTextColor(::GetSysColor(COLOR_3DHILIGHT));    
   
  pDC->TextOut(13,7,sTemp);    
   
  从下图可以看出此时已经具有了立体感相当强的视觉效果了:  
   
  <img   src="http://www.pconline.com.cn/pcedu/empolder/gj/vc/10302/pic/030226cw2.jpg">  
   
  另外,还可以通过设置路径对象来对普通的3D文字进行轮廓勾勒,使之具备特殊的3D效果:    
   
  pDC->BeginPath();   //开始路径    
   
  pDC->TextOut(13,7,sTemp,19);    
   
  //向路径输出汉字    
   
  pDC->EndPath();   //结束路径    
   
  pDC->SetPolyFillMode(WINDING);   //填充路径    
   
  pDC->StrokeAndFillPath();   //绘制路径外观、设置填充模式    
  Top

4 楼OnlyHappy(说好不打脸)回复于 2004-08-01 08:58:24 得分 0

正是我想要的。谢了Top

相关问题

  • 在哪儿可下载用GDI写的立体字的source code?
  • 请问如何用FLASH制作立体字,谢谢!
  • 为什么立体字上部分显示不全了?
  • 立体视觉
  • 怎样实现文字呈现立体效果呀?画上去的。
  • 生成一按钮,一点击,就陷下的
  • delphi画立体图????
  • 问一个问题:当鼠标移动到speedbutton上时,怎样让汉字具有立体效果?
  • 如何在photoshop5.0中对其文字加粗,用什么能做成一种光散射效果,有一点的立体感/
  • 高分寻求解决方案,如何在mdi窗口的工作区(mdi_1)中写入立体彩色的文字,thanks for all boys and girls!

关键词

  • 字体
  • 文字
  • 效果
  • lf
  • pdc
  • 路径
  • logfont
  • stemp
  • getsyscolor
  • 绘制

得分解答快速导航

  • 帖主:OnlyHappy
  • BLsoft

相关链接

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

广告也精彩

反馈

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