VC下编程实现3D文字[组图](2)
在对其进行设置时,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为待显示文字