按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
// TODO: Change any attributes of the DC here
return m_brush; //改变对话框背景颜色
·157 ·
…………………………………………………………Page 167……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
// return hbr;
}
void CGundongDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
if(TIMER!=0)
KillTimer(TIMER);
}
运行结果如图 6…2 所示。
图 6…2 “动态字幕”示例运行结果
技巧:制作 3D 空心字
有时在编程实践中需要输出一些特效文字,比如 3D 空心文字。要在 Visual C++程序中输
出 3D 空心效果的文字,可以先输入 3D 文字然后建立一个路径对象,向路径对象输出该文
字,之后用当前画刷填充区域内部并用当前画笔勾画路径的轮廓就可达到此目的。下面通
过一个实际的示例来说明具体的实现方法。
实例 6…2:字体和文本输出实例。源代码在光盘中“06实例 6…2HollowFont ”目录下。
下面的例子是基于 SDI 结构的,其中核心源代码如下:
CHollowFontView::CHollowFontView()
{
LOGFONT lf;
lf。lfHeight = …180; //字体字符的高度
lf。lfWeight = 0; //字符平均宽度
lf。lfEscapement =0;
lf。lfOrientation=0; //字符角度
lf。lfWeight=FW_HEAVY; //字符的粗细度
lf。lfItalic = FALSE; //倾斜
·158 ·
…………………………………………………………Page 168……………………………………………………………
第 6 章 文本和字体类
lf。lfUnderline = FALSE; //下划线
lf。lfStrikeOut = FALSE; //删除线
lf。lfCharSet = GB2312_CHARSET; // 中文字符集
lf。lfOutPrecision = OUT_STROKE_PRECIS; //字体输出结果和要求的匹配程度
lf。lfClipPrecision = CLIP_STROKE_PRECIS; //如何裁剪落于裁剪区之外的字符
lf。lfQuality = DRAFT_QUALITY; //字体属性匹配的精确程度
lf。lfPitchAndFamily = VARIABLE_PITCH|FF_MODERN;//字体间距和字体族
strcpy(lf。lfFaceName;〃楷体_GB2312〃); //楷体
m_font。CreateFontIndirect(&lf);
m_sText=_T(〃空心汉字〃);
}
void CHollowFontView::OnDraw(CDC* pDC)
{
CHollowFontDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(m_font。GetSafeHandle()!=NULL) //如果成功建立字体
{
CFont *pOldFont = (CFont *)pDC…》SelectObject(&m_font);
pDC…》SetBkMode(TRANSPARENT);
int cx = 100; cy = 100; //文本输出位置
CString sTemp = m_sText;
cx += 3;
cy += 3;
pDC…》SetTextColor(GetSysColor(COLOR_3DDKSHADOW)); // 以下先输出突出的 3D 文本
pDC…》TextOut(cx+2;cy…2;sTemp);
pDC…》TextOut(cx+2;cy+2;sTemp);
pDC…》SetTextColor(GetSysColor(COLOR_3DHILIGHT));
pDC…》TextOut(cx+1;cy…2;sTemp);
pDC…》TextOut(cx…2;cy+1;sTemp);
pDC…》TextOut(cx…2;cy…2;sTemp);
pDC…》SetTextColor(GetSysColor(COLOR_3DSHADOW));
pDC…》TextOut(cx…1;cy+1;sTemp);
pDC…》TextOut(cx+1;cy…1;sTemp);
pDC…》TextOut(cx+1;cy+1;sTemp);
·159 ·
…………………………………………………………Page 169……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
pDC…》SetTextColor(GetSysColor(COLOR_3DLIGHT));
pDC…》TextOut(cx;cy…1;sTemp);
pDC…》TextOut(cx…1;cy;sTemp);
pDC…》TextOut(cx…1;cy…1;sTemp);
//然后通过路径对象将以上要输出的文本变成空心
// 向路径输出“汉字”
pDC…》BeginPath();
pDC…》TextOut(cx;cy;sTemp;8);
pDC…》EndPath();
//填充路径
pDC…》SetPolyFillMode(WINDING); //设置填充模式
pDC…》StrokeAndFillPath();//绘制路径外观
pDC…》SelectObject(pOldFont);
}
}
函数 pDC…》StrokeAndFillPath 用于先封闭所有的开放路径,然后用当前画刷和填充方式
填充区域内部 。由于当前画刷是一个实心的白色画刷(WHITE_BRUSH) ,因此,文字的显示
效果就变成了空心,同时该函数用当前画笔勾画路径的轮廓。运行结果如图 6…3 所示。
图 6…3 “3D 空心字”例程运行结果
·160 ·
…………………………………………………………Page 170……………………………………………………………
第 6 章 文本和字体类
6。5 本章小结
本章介绍了 Windows GDI 输出文本和字体的一般概念。在对 MFC 字体类 CFont 的主要
成员属性及方法作了较为详尽的讲解的基础上,介绍了 GDI 输出文本的方法 。同时,通过两
个例程介绍了产生“动态”字幕和“空心字”的技巧和方法。通过本章的学习,读者应能够
学到利用类 CFont 创建自定义字体的方法以及进行多种样式文本输出的方法。
·161 ·
…………………………………………………………Page 171……………………………………………………………
第 7 章 图形图像
第 7 章 图形图像
随着计算机技术的发展,数字图像处理,技术得到了广泛应用,如模式识别、人脸识别、
/编辑等都涉及到了计算机的图形图像处理技术 。本章将为读者介绍 Visual C++ 中图
图像融合
像处理技术的相关知识,主要包括以下几个方面的内容:
o 屏幕秽土的主要函数,及其调用方法;
o 图形设备接口及其主要 MFC 类;
o 画刷和画笔的使用。
7。1 绘图的基础知识
在当今的操作系统中,应用最广泛的是拥有友好、美观图形界面的操作系统。因此绘图
成为了一项核心技术。
要了解绘图的原理,首先需要知道显示设备。当前的显示设备主要包括基于阴极射线管
(
CRT )的显示器以及液晶显示器。阴极射线管主要由电子枪,聚焦系统、加速电极,偏转系
统,荧光屏构成。电子枪发出高速的电子束,经过聚焦系统、加速系统和偏转系统到达荧光
屏的特定位置。电子束轰击荧光屏发出荧光,形成亮点。要保持显示一幅稳定的画面,必须
不断地发射电子束。
计算机的显示功能是由图形处理器(显卡)来完成的。图形处理器是图形系统结构的重要
元件,是连接计算机和显示终端的纽带 。早期的图形处理器只包含简单的存储器和帧缓冲区,
它们实际上只起了一个图形的存储和传递作用,一切操作都必须有 CPU 来控制。现在的图形
处理器不单存储图形,而且能完成大部分图形函数,专业的图形卡已经具有很强的 3D 处理
能力,大大减轻了 CPU 的负担,提高了显示质量和显示速度。