更新时间:2015-11-30 22:08:08浏览次数:1+次
常见的文字处理软件都支持对阴影字或者立体字的特效处理。这两种特效的实现原理都很简单;在不同的位置使用不同色彩的画刷输出相同的文本。在对阴影进行处理时,可以使用纯色的处理,还可以使用线条。让线条作为阴影,简单的方法就是使用影线画刷填充背景。下面,代码实现这种字体特效的实现过程。
新建GDI+工程,在菜单项中新建一个菜单项”文字特效“,并在下面新建一个子菜单项”阴影特效",建立消息响应:
void CTextRanderingView::OnShadow()
{
// TODO: 在此添加命令处理程序代码
Graphics graphics(this->m_hWnd);
//this->RedrawWindow();
FontFamily fontFamily(L"Arial");
Gdiplus::Font font(&fontFamily, 100, FontStyleBold, UnitPixel);
CRect rect;
this->GetClientRect(&rect);
//////文本输出框
RectF textout(font.GetHeight(0.0), rect.Height() / 2, rect.Width(), rect.Height());
////////在两个不同的位置绘制文本,形成阴影
graphics.SetTextRenderingHint(TextRenderingHint(0));
//////soilidbrush的色彩透明度为100,暗黑
SolidBrush solidbrush(Color(100, 0, 0, 0));
SolidBrush redbrush(Color(255, 255, 0, 0));
graphics.DrawString(L"阴影字", 6, &font, PointF(27.0f, 27.0f), &solidbrush);
graphics.DrawString(L"阴影字", 6, &font, PointF(12.0f, 20.0f), &redbrush);
/////另一种阴影字,阴影委=为线条
////构造影线画刷
HatchBrush brush_tmp(HatchStyle(2), Color::Black, Color::White);
int reptime = 40;
/////先画背景
for (int i = 0; i < reptime; i++)
{
graphics.DrawString(L"阴影字", 6, &font, PointF(textout.X + i + 2, textout.Y + i + 2), &brush_tmp);
}
/////再画前景
graphics.DrawString(L"阴影字", 6, &font, PointF(textout.X, textout.Y), &SolidBrush(Color::Red));
}
代码实现:
相关资讯