本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除
目录
1.实例说明
2.技术要点
3.实现过程
4.举一反三
3.7 图像字体
字体在图形、图像处理中具有举足轻重的作用,特殊的字体能够增加图像的显示效果。本节将通过几个实例介绍如何绘制特殊效果的字体。
实例116 旋转的文字
1.实例说明
在一些多媒体应用软件中,一些文字信息并不是按水平方向或垂直方向显示,而是按一定的角度倾斜显示,效果很好。本实例实现了文字的旋转,效果如图所示。

2.技术要点
实现字体的旋转非常简单,首先创建一个字体,在创建字体时指定倾斜角度,然后利用设备上下文选中字体,最后输出文字,这样文字就会在某一位置上按照字体指定的角度倾斜。创建一个字体可以调用CFont类的CreateFont方法,语法如下:
BOOL CreateFont(int nHeight,int nWidth,int nEscapement,int nOrientation,int nWeight,BYTE bItalic,BYTE bUnderline,BYTE cStrikeOut,BYTE nCharSet,BYTE nOutPrecision,BYTE nClipPrecision,BYTE nQuality, BYTE nPitchAndFamily,LPCTSTR lpszFacename);
参数说明:
● nHeight、nWidth:用于指定字体的高度和宽度。为正数时,字体映射机制会根据指定的高度或宽度从字体列表中选择一种接近的字体,以该字体的单元高度或宽度为参考。为负数时,字体映射机制也会选择一种字体,不过这时以字体字符高度或宽度为参考。单元是在实际输出字符的上下有一些空隙,而字符是忽略掉这些空隙之后的单元高度。
● nEscapement:以x轴为参考确定文本的倾斜角度。
● nOrientation:确定字符基线与x轴的倾斜角度。
● nWeight:确定字体的重量,即字体的粗细程度。
● bItalic:确定是否是斜体。
● bUnderline:确定是否有下划线。
● cStrikeOut:确定是否有删除线。
● nCharSet:用于指定字符集。
● nOutPrecision:确定字体映射机制如何根据提供的参数选择合适的字体。
● nClipPrecision:用于确定字体的裁减精度。当文本的一部分延伸到指定区域外时,该参数用于确定文本被裁减的方式。
● nQuality:用于确定字体显示的品质。
● nPitchAndFamily:用于确定字符间距和字体属性。
● lpszFacename:确定字体名称。 
例如实现一个简单的旋转文字,代码如下:
CFont m_font;
        m_font.CreateFont(-14,-10,i*10,0,600,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
        CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,"宋体"); 
3.实现过程
(1)新建一个基于对话框的应用程序。
(2)主要程序代码如下:
void C旋转字体Dlg::OnBnClickedBtn1()
{
	// TODO:  在此添加控件通知处理程序代码
	CDC*pDC = GetDC();                                                            //获得设备上下文
	CFont m_font;
	pDC->SetBkMode(TRANSPARENT);                                                //设置背景透明
	CRect m_rect;
	GetClientRect(m_rect);                                                      //获得客户区域
	pDC->FillRect(m_rect, NULL);                                                 //填充区域
	pDC->SetViewportOrg(m_rect.Width() / 2, m_rect.Height() / 2);                    //设置原点
	for (int i = 1; i< 360; i += 18)
	{
		m_font.CreateFont(-14, -10, i * 10, 0, 600, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
			CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_ROMAN, _T("宋体"));               //创建字体
		pDC->SelectObject(&m_font);                                             //选入字体
		pDC->SetTextColor(RGB(255 - i, i * 50, i));                                   //设置文本颜色
		pDC->TextOut(0, 0, _T("战无不胜的毛泽东思想万岁"));                                   //输出文本
		m_font.DeleteObject();
	}
} 
(3)运行结果

4.举一反三
根据本实例,读者可以:
修改任意控件的字体属性



















