77范文网 - 专业文章范例文档资料分享平台

VC++6.0入门第五章 图形和文本输出(4)

来源:网络收集 时间:2018-12-29 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

VC++6简明教程

DEFAULT_PITCH|FF_DONTCARE, \大号字\ pDC->SelectObject (&NewFont2); pDC->SetTextColor(RGB(155,155,155)); pDC->TextOut(x,y,outstr[3]); pDC->SelectObject (pOldFont); pDC->SelectObject (&NewFont2); pDC->SetTextColor(RGB(155,155,155)); pDC->TextOut(x,y,outstr[3]); pDC->SelectObject (pOldFont); }

分析如表5-6所示:

表5-6

文本串1 文本串2 文本串3 文本串4 文本属性 红色 绿色 蓝色 灰色 求下一行位置 求同行字符串尾部位置 求下一行位置 格式化 默认字体 高度20,宽度10,粗体,黑体字 高度30,斜体,下划线,大号字 字体

请注意pOldFont的使用,在第一次调用SelectObject()函数,函数返回老的字体设置,由CFont对象指针pOldFont接受,在OnDraw()函数的最后再使用SelectObject()是恢复原来的字体设置。

5.3 处理绘图 5.3.1 简单的图形输出

CDC提供了基本的绘图操作函数,如画点,画线,画圆,画矩形,画多边形等等,简单介绍如下: 1. 点

pDC->SetPixel(CPoint(200,200),RGB(255,0,0)); //在[200,200]的位置画一个红点

2. 线

pDC->MoveTo(0,0); //直线起点的坐标为(0,0)

pDC->LineTo (100,100); //从起点(0,0)到终点(100,100)画一条直线 pDC->MoveTo (0,100); pDC->LineTo (100,0);

3. 矩形

CRect rect(0,0,100,100); //画一个长100,宽100的矩形 pDC->Rectangle(&rect);

4. 圆和椭圆

CRect rect(0,0,100,100); //在矩形内画圆 pDC->Ellipse(&rect);

CRect rect(0,0,50,100); //在矩形内画椭圆

16

第5章 图形与文本输出

pDC->Ellipse(&rect);

5. 多边形

CPoint poly[4]; //画一个平行四边形 poly[0]=CPoint(0,0); poly[1]=CPoint(50,50); poly[2]=CPoint(50,100); poly[3]=CPoint(0,50); pDC->Polygon(poly,4);

6. 其它图形

CDC::Pie // 画饼图 CDC::Chord //画弦

CDC::FillRect //用指定颜色填充矩形且不画边线 CDC::Draw3DRect //用于绘制名种3D边框 CDC::RoundRect //画圆角矩形 绘图函数的具体的使用方法可以查阅MSDN。

5.3.2 库存对象

不管以CDC类指针形式还是以CDC子类对象形式获得设备上下对象,系统都默认指定了一组绘图属性,如表5-7所示。

表5-7 系统默认绘图属性

绘图属性 画笔 画刷 背景颜色 背景模式 刷子原点 当前绘图位置 混合模式 映射模式 默认值 一个像素宽的黑色实线 白色的实心刷 白色 OPAQUE 设备坐标(0,0) 逻辑坐标(0,0) R2_COPYPEN MM_TEXT 改变默认值的函数 SelectObject,SelectStockObject SelectObject,SelectStockObject SetBKColor SetBKMode SetBrushOrg MoveTo SetRop2 SetMapMode

库存对象是由操作系统维护的用于绘制屏幕的常用对象,包括库存画笔、画刷、字体等。使用SelectStockObject()函数可以直接选择库存对象修改系统默认值。可直接选用的库存对象如表5-8所示。

表5-8 系统默认绘图属性

GDI分类 Fonts ANSI_FIXED_FONT ANSI_VAR_FONT DEVICE_DEFAULT_FONT OEM_FIXED_FONT SYSTEM_FONT Pens BLACK_PEN WHITE_PEN NULL_PEN 库存对象值 17

VC++6简明教程

Brushs BLACK_BRUSH DKGRAY_BRUSH GRAY_BRUSH HOLLOW_BRUSH LTGRAY_BRUSH NULL_BRUSH WHITE_BRUSH

下面的实例演示了如何使用库存对象:

程序清单5-12:在视图中选用画笔和画刷库存对象画图的OnDraw()函数 void CExam5View::OnDraw(CDC* pDC) { CExam5Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; rect.SetRect (CPoint(0,0),CPoint(200,200)); pDC->SelectStockObject (WHITE_PEN); //选用白色画笔 pDC->SelectStockObject (GRAY_BRUSH);//选用灰色画刷 pDC->Rectangle (rect); pDC->MoveTo(0,0); pDC->LineTo (200,200); pDC->MoveTo (0,200); pDC->LineTo (200,0); }

演示效果如图5-10所示。

图5-10 选用库存对象设置绘图属性

18

第5章 图形与文本输出

5.3.3设置绘图坐标系

首先要介绍逻辑坐标和设备坐标的概念,一般地说,如果要把一幅大小为400mm×800mm的图画显示在500像素×200 像素的windows窗口中,前者称为逻辑坐标,后者称为设备坐标。它们的关系如图5-11所示:

400mm 500像素

200像素

逻辑坐标

图5-11 逻辑坐标与设备坐标

800mm 设备坐标 设备坐标系的原点总是在窗口的左上角,它的单位是像素。而逻辑坐标系的单位有多种,可以是像素,也可以是厘米、毫米、英寸等,逻辑坐标按映像模式可分为三大类,一共八种模式:

(1) MM_TEXT

默认的映像模式,原点在左上角,向右x增加,向下y增加。 (2) 固定比例的映射模式 向右x增加,向下y减少。 (3) 可变比例的映射模式

允许改变比例因子和原点。在用户改变窗口大小时,绘制的内容会随之改变。如果改变一个轴的比例,则所绘的图像也会在其它轴上相应的改变。

表5-9 映像模式

类别 默认模式 固定比例的映射模式 映像模式名称 MM_TEXT MM_LOMETRIC MM_HIMETRIC MM_LOENGLISH MM_HIENGLISH MM_TWIPS 可变比例的映射模式 MM_ISOTROPIC MM_ANISOTROPIC 像素 0.1mm 0.01mm 0.01inch 0.001inch 1/1440inch 可调整(x=y) 可调整(x!=y) 逻辑单位

要准确的确定绘图效果,要正确地设置映像模式,可以使用CDC::SetMapMode()函数更改映像模式。例如:

CClientDC dc;

int OldMode=dc.SetMapMode(MM_LOMETRIC);

并可以使用CDC::SetViewportOrg()函数和CDC::SetWindowOrg函数移动逻辑坐标系的原点。例如,下面程序语句段将坐标系的原点移动到客户区中央:

19

VC++6简明教程

CRect rect;

GetClientRect(rect);

pDC->SetViewportOrg(rect.width()/2,rect.height()/2);

现在所面临的问题是如何区分使用逻辑坐标和设备坐标的场合。一般来说,MFC的CDC绘图函数都使用逻辑坐标为参数;CWnd的成员函数一般使用设备坐标为参数,如返回鼠标位置作为屏幕位置测试时,一般也是使用设备坐标。设备坐标系统分为三类:

(1) 工作区(Viewport)坐标系统

它以窗口客户区左上角为原点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息传给框架的位置消息参数以及CDC一些用于绘图的成员都是使用工作区坐标。

(2) 窗口(Windows)坐标系统

它以窗口左上角为坐标原点(0,0),它包含窗口控制菜单、标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用。

(3) 屏幕(Screen)坐标系统

它以屏幕左上角为原点(0,0)。当以CreateDC()或GetDC()取得设备上下文使用的是屏幕坐标系。一般设置和取得光标的位置的函数SetCursorPos()和GetCursorPos()是使用屏幕坐标;弹出式菜单使用屏幕坐标;CreateWindow()、MoveWindow()等函数用于设置窗口相对于屏幕的位置,使用的也是屏幕坐标系统。

MFC使用ClientToScreen()和ScreenToClient()两个函数,用于完成工作区坐标和屏幕坐标之间的转换工作。逻辑坐标和设备坐标的转换是经常发生的事情,例如,用户在视图滚动后单击鼠标,会得到鼠标的设备坐标。如果要保存这个数据到文档,则需要把它转化为逻辑坐标。相反,当调用MFC绘图函数绘图时,Windows自动将逻辑坐标转换成设备坐标再绘图。CDC也提供了成员函数LPToDP()和DPToLP()完成两种坐标之间的转换。5.3.5节中例5-3演示了不同映像模式的使用。

5.3.4创建和使用自定义画笔和画刷

创建CPen的方法有两种: (1) 定义时直接创建

CPen Mypen(PS_SOLD,2,RGB(255.0.0)); (2) 定义CPen对象,再调用CreatePen()函数

CPen pen;

pen.CreatePen(PS_SOLD,2,RGB(255,0,0));

其中第一个参数是笔的风格,可选值有:PS_SOLD(实线),PS_DOT(虚线),PS_NULL (空画笔)。第二个参数是线的宽度,第三个参数是线的颜色。

表5-10画笔样式及说明

样式 PS_DASH PS_DASHDOT PS_DASHDOTDOT PS_DOT 说明 虚线 点划线 双点划线 点线 样式 PS_INSIDEFTAME PS_NULL PS_SOLID 说明 实线(边框线) 无 实线

创建画刷的方法有下面几种:

(1) 创建实心画刷CreateSolidBrush()函数

CBrush bs;

20

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VC++6.0入门第五章 图形和文本输出(4)在线全文阅读。

VC++6.0入门第五章 图形和文本输出(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/395611.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: