《visualc第二版》第8章图形和文本

上传人:san****019 文档编号:71612259 上传时间:2019-01-21 格式:PPT 页数:43 大小:655.81KB
返回 下载 相关 举报
《visualc第二版》第8章图形和文本_第1页
第1页 / 共43页
《visualc第二版》第8章图形和文本_第2页
第2页 / 共43页
《visualc第二版》第8章图形和文本_第3页
第3页 / 共43页
《visualc第二版》第8章图形和文本_第4页
第4页 / 共43页
《visualc第二版》第8章图形和文本_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《《visualc第二版》第8章图形和文本》由会员分享,可在线阅读,更多相关《《visualc第二版》第8章图形和文本(43页珍藏版)》请在金锄头文库上搜索。

1、第8章图形和文本,8.1设备环境和简单数据类 8.2图形设备接口 8.3图形绘制 8.4字体与文字处理,8.1设备环境和简单数据类,8.1.1设备环境和简单数据类 设备环境类CDC提供了绘制和打印的全部函数。为了能让用户使用一些特殊的设备环境,CDC还派生了CPaintDC、CClientDC、CWindowDC和CMetaFileDC类。 (1)CPaintDC比较特殊,它的构造函数和析构函数都是针对OnPaint进行的,但用户一旦获得相关的CDC指针,就可以将它当成任何设备环境(包括屏幕、打印机)指针来使用。CPaintDC类的构造函数会自动调用BeginPaint,而它的析构函数则会自动

2、调用EndPaint。 (2)CClientDC只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏)中进行绘图,点(0,0)通常指的是客户区的左上角。而CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。CWindowDC和CClientDC构造函数分别调用GetWindowDC和GetDC,但它们的析构函数都是调用ReleaseDC函数。 (3)CMetaFileDC封装了在一个Windows图元文件中绘图的方法。图元文件是一系列与设备无关的图片的集合,由于它对图象的保存比像素更精确,因而往往在要求较高的场合下使用,例如AutoCAD的图像保存等。目前的W

3、indows已使用增强格式(enhanced-format)的32位图元文件来进行操作。,8.1设备环境和简单数据类,8.1.2坐标映射 为了能保证打印的结果不受设备的影响,定义了一些映射模式,这些映射模式决定了设备坐标和逻辑坐标之间的关系,如表。 这样,我们就可以通过调用CDC:SetMapMode(int nMapMode)来设置相应的映射模式。 在MM_ISOTROPIC映射模式下,纵横比总是1:1;但在MM_ANISOTROPIC映射模式下,x和y的比例因子可以独立地变化,即圆可以被拉扁成椭圆形状。 在映射模式MM_ANISOTROPIC和MM_ISOTROPIC中,调用CDC: Se

4、tWindowExt(设置窗口大小)和CDC:SetViewportExt(设置视口大小)函数来设置所需要的比例因子。 所谓“窗口”,可以理解成是一种逻辑坐标下的窗口,“视口”是实际看到的那个窗口。根据“窗口”和“视口”的大小就可以确定x和y的比例因子,它们的关系如下: x比例因子 = 视口x大小/ 窗口x大小 y比例因子 = 视口y大小/ 窗口y大小,8.1设备环境和简单数据类,(1)创建一个默认的单文档应用程序Ex_Draw。 (2)在CEx_DrawView:OnDraw函数中添加下列代码: void CEx_DrawView:OnDraw(CDC* pDC) CEx_DrawDoc*

5、pDoc = GetDocument(); ASSERT_VALID(pDoc); CRect rectClient; GetClientRect(rectClient); / 获得当前窗口的客户区大小 pDC-SetMapMode(MM_ANISOTROPIC); / 设置MM_ANISOTROPIC映射模式 pDC-SetWindowExt(1000,1000); / 设置窗口范围 pDC-SetViewportExt(rectClient.right,-rectClient.bottom);/ 设置视口范围 pDC-SetViewportOrg(rectClient.right/2,re

6、ctClient.bottom/2); pDC-Ellipse(CRect(-500,-500,500,500); (3)编译运行,如图。,8.1设备环境和简单数据类,8.1.3CPoint、CSize和CRect CPoint、CSize和CRect类的构造函数 CPoint类带参数的常用构造函数原型如下: CPoint( int initX, int initY ); CPoint( POINT initPt ); CSize类带参数的常用构造函数原型如下: CSize( int initCX, int initCY ); CSize( SIZE initSize ); CRect类带参数

7、的常用构造函数原型如下: CRect( int l, int t, int r, int b ); CRect( const RECT l、t、r、b指定CRect的left、top、right和bottom成员的值。srcRect 和lpSrcRect用一个RECT结构或指针来初始化CRect的成员。point指定矩形的左上角位置。size指定矩形的长度和宽度。topLeft和bottomRight指定CRect的左上角和右下角的位置。,8.1设备环境和简单数据类,CRect类的常用操作 传递LPRECT、LPCRECT或RECT结构作为参数的任何地方,都可以用CRect对象来代替。 构造一

8、个CRect时,要使它符合规范。即使其left小于right,top小于bottom。一个不符合规范的矩形,CRect的许多成员函数都不会有正确的结果。常常用CRect:NormalizeRect函数使一个不符合规范的矩形合乎规范。 成员函数InflateRect和DeflateRect用来扩大和缩小一个矩形。由于它们的操作是相互的,也就是说,若指定InflateRect函数的参数为负值,那么操作的结果是缩小矩形,因此下面只给出InflateRect函数的原型: void InflateRect( int x, int y ); void InflateRect( SIZE size ); v

9、oid InflateRect( LPCRECT lpRect ); void InflateRect( int l, int t, int r, int b ); x指定扩大CRect左、右边的数值。y指定扩大CRect上、下边的数值。size中的cx成员指定扩大左、右边的数值,cy指定扩大上、下边的数值。lpRect的各个成员指定扩大每一边的数值。l、t、r和b指定扩大CRect左、上、右和下边的数值。 对于前两个重载函数来说,CRect的总宽度被增加了两倍的x或cx,总高度被增加了两倍的y或cy。 成员函数IntersectRect和UnionRect用来将两个矩形进行相交和合并。原型如

10、下: BOOL IntersectRect( LPCRECT lpRect1, LPCRECT lpRect2 ); BOOL UnionRect( LPCRECT lpRect1, LPCRECT lpRe,8.1设备环境和简单数据类,8.1设备环境和简单数据类,8.1.4颜色和颜色对话框 一个彩色象素常用的颜色空间有RGB和YUV两种。 CDC使用的是RGB颜色空间。COLORREF是用来表示RGB颜色的一个32位的数据类型,它可以用十六进制表示一个RGB值: 0x00bbggrr rr、gg、bb表示红、绿、蓝三个颜色分量的16进制值。使用下列的宏操作: GetBValue 获得32位R

11、GB颜色值中的蓝色分量 GetGValue 获得32位RGB颜色值中的绿色分量 GetRValue 获得32位RGB颜色值中的红色分量 RGB 将指定的R、G、B分量值转换成一个32位的RGB颜色值。 MFC的CColorDialog类为应用程序提供了颜色选择通用对话框。构造函数: CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL ); dwFlags表示定制对话框外观和功能的系列标志参数。可以是下列之一或”|”组合: CC_ANYCOLOR 在基本颜色单元中列出所有可得到的颜色 CC_

12、FULLOPEN 显示所有的颜色对话框界面 CC_PREVENTFULLOPEN 禁用“规定自定义颜色”按钮 CC_SHOWHELP 在对话框中显示“帮助”按钮 CC_SOLIDCOLOR 在基本颜色单元中只列出所得到的纯色 单击对话框“确定”退出(即DoModal返回 IDOK)时,可调用下列成员获得相应的颜色。 COLORREF GetColor( ) const; / 返回用户选择的颜色。 void SetCurrentColor( COLORREF clr ); / 强制使用clr作为当前选择的颜色 static COLORREF * GetSavedCustomColors( );

13、/ 返回用户自己定义颜色,8.2图形设备接口,Windows为设备环境提供了各种各样的绘图工具,例如用于画线的“画笔”、填充区域的“画刷”以及用于绘制文本的“字体”。MFC封装了这些工具,并提供相应的类来作为应用程序的图形设备接口GDI,这些类有一个共同的抽象基类CGdiObject,如表。,8.2图形设备接口,8.2.1GDI对象一般使用方法 选择GDI对象进行绘图时,往往遵循着下列的步骤: (1)在堆栈中定义一个GDI对象,用相应的函数创建此GDI对象。要注意:有些GDI派生类的构造函数允许用户提供足够的信息,从而一步即可完成对象的创建任务。 (2)将构造的GDI对象选入当前设备环境中,但

14、不要忘记将原来的GDI对象保存起来。 (3)绘图结束后,恢复当前设备环境中原来的GDI对象。 (4)GDI对象是在堆栈中创建中,程序结束后,框架会自动删除程序创建的GDI对象。 具体操作可像下面的代码过程: void CMyView:OnDraw( CDC* pDC ) CPen penBlack; / 定义一个画笔变量 penBlack.CreatePen( PS_SOLID, 2, RGB(0,0,0); / 创建画笔 / 将此画笔选入当前设备环境并保存原来的画笔 CPen* pOldPen = pDC-SelectObject( / 恢复设备环境中原来的画笔 ,8.2图形设备接口,8.2

15、.2画笔 画笔是绘制各种直线和曲线的一种图形工具,可分为修饰画笔和几何画笔两种类型。几何画笔不但有修饰画笔的属性,还跟画刷的样式、阴影线类型有关,通常用在对绘图有较高要求的场合。修饰画笔通常用在简单的直线和曲线等场合。 一个修饰画笔通常具有宽度、风格和颜色三种属性。画笔的宽度用来确定所画的线条宽度,它是用设备单位表示的。默认的画笔宽度是一个像素单位。画笔的颜色确定了所画的线条颜色。画笔的风格确定了所绘图形的线型,它通常有实线、虚线、点线、点划线、双点划线、不可见线和内框线等七种风格。如表。,8.2图形设备接口,创建一个修饰画笔,可以使用CPen类的CreatePen函数,其原型如下: BOOL

16、 CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); 参数nPenStyle、nWidth、crColor指定画笔的风格、宽度和颜色。此外,还有一个CreatePenIndirect函数也是用来创建画笔对象,它的作用与CreatePen函数是完全一样的,只是画笔的三个属性不是直接出现在函数参数中,而是通过一个LOGPEN结构间接地给出。 BOOL CreatePenIndirect( LPLOGPEN lpLogPen ); 此函数用由LOGPEN结构指针指定的相关参数创建画笔,LOGPEN结构如下: typedef struct tagLOGPEN /* lgpn */ UINT lopnStyle; / 画笔风格 POINT lopnWidth;/ POINT结构的y不起作用,而用x表示画笔宽度 COLORREF lopnColor; / 画笔颜色 LOGPEN; 注意: l 修饰画笔的宽度大于1个像素时,画笔的风格只能取

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号