友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第35部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
{
return (HCURSOR) m_hIcon;
}
void CGundongDlg::OnTimer(UINT nIDEvent)
{
·156 ·
…………………………………………………………Page 166……………………………………………………………
第 6 章 文本和字体类
// TODO: Add your message handler code here and/or call default
DrawV();
DrawH();
CDialog::OnTimer(nIDEvent);
}
void CGundongDlg::DrawV() //竖直方向滚动函数
{
CRect rect; //每次重画区域大小
rect。left=10;
rect。right=m_str。GetLength()+rect。left+120;
CFont * font=GetFont();
LOGFONT logFont;
font…》GetLogFont(&logFont);
rect。top=Heighty;
rect。bottom=rect。top+logFont。lfHeight+40;
InvalidateRect(&rect);
Heighty+=logFont。lfHeight+18; //每步向下移动距离
if(Heighty》=maxHeight) Heighty=15; // 回到起始位置
UpdateWindow();
}
void CGundongDlg::DrawH() //水平向滚动函数
{
CRect rect; //每次重画区域大小
rect。top=15;
CFont * font=GetFont();
LOGFONT logFont;
font…》GetLogFont(&logFont);
rect。bottom=rect。top+logFont。lfHeight+80;
rect。left=WidthX…m_str。GetLength()…10;
rect。right=rect。left+m_str。GetLength()+150;
InvalidateRect(&rect);
if(WidthXSelectObject(&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 的负担,提高了显示质量和显示速度。
当前流行的操作系统绘图功能主要基于光栅图形学。包括基本图形(直线、圆弧、椭圆
弧)的扫描转换、多边形的扫描转换、区域填充、裁剪、反走样、投影、消隐等。
直线是操作系统频繁绘制的基本图形元素 。在不同分辨率的显示器上,为了保证绘制出
的直线有良好的视觉效果,需要确定最佳逼近于该直线的一组像素,最常用的方法包括数值
微分法(DDA),中点画线法和 Bresenham 算法。下面简单介绍数值微分法。
(x ; yP ) (x ; yP ) y kx b = +
已 知 过 端 点 , 的 直 线 段 L : , 直 线 斜 率 为
0 0 0 1 1 1
k (y y )/(x x ) = ,在 x 方向从 x 开始,向 x 步进,步长取 1 个像素,计算相应的 y
1 0 1 0 0 1
y kx b = + ( ; x round( ))x
坐标 。取像素点( 作为当前点的坐标。其他方法读者如果有兴趣可
以参
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!