Windows绘图及文本输出.ppt_第1页
Windows绘图及文本输出.ppt_第2页
Windows绘图及文本输出.ppt_第3页
Windows绘图及文本输出.ppt_第4页
Windows绘图及文本输出.ppt_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

11 Windows绘图及文本输出 Windows环境是基于图形操作的,图形设备接口(GDI)是一个在 Windows应用程序中执行与设备无关的函数库。这些函数在不同的 输出设备上产生图形及文字输出。 1. 设备描述表 设备描述表描述了所选定的绘图工具、字体、字体颜色等在设备上绘 制(或者说是映射)的方式及设备上可使用的输出区域等属性。当 程序显示文字或绘图时,首先必须获得一个设备描述表句柄,完成 输出文字或绘图之后,还必须及时释放该句柄。以下是设备描述表 常用函数: (1) GetDC函数 该函数获取指定窗口的客户区域或整个屏幕的显示设备描述表的句柄 ,以便可以在GDI函数中使用该句柄来在显示设备中绘图。函数原 型为: HDC GetDC(HWND hWnd); (2) ReleaseDC函数 ReleaseDC函数用来释放设备描述表句柄,其函数原型为: int ReleaseDC(HWND hWnd, HDC hDC); (3) BeginPaint函数 BeginPaint函数为在指定窗口中画图作准备工作,并且把与画图有关的信息填 写到PAINTSTRUCT结构中,函数原型为: HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint); 其中lpPaint是指向PAINTSTRUCT结构的指针。结构PAINTSTRUCT的原型 如下: typedef struct tagPAINTSTRUCT HANDLE hDC; /设备描述表句柄 BOOL rErase; /确定背景是否已被重画 RECT rePaint; /给出无效矩形的边界 BOOL fRestore; /内部使用的保留字段 BOOL fIncUpdate; /保留字段 BYTE rgbReserved; /保留字段 PAINTSTRUCT; (4) EndPaint函数 EndPaint函数通知Windows所有输出操作均已处理完毕,并释放显示缓冲区 。其函数原型为: void EndPaint(HWND hwnd, LPPAINTSTRUCT lpPaint); 2. 图形刷新 (1)显示缓冲区 显示缓冲区定义与窗口用户区有关的内容,包括输出设备、当前绘图工 具、颜色,以及其它一些GDI输出函数产生输出所需的信息。在窗 口中绘图,需要使用窗口的句柄,根据窗口句柄,可以得到窗口用 户区的显示缓冲区句柄,所有GDI输出函数都需要一个显示缓冲区 句柄,没有它就无法完成输出。显示缓冲区中有缺省的画笔、画刷 和缺省字模。 每当对窗口的操作可能影响用户区内容时,Windows发送 WM_PAINT消息给窗口函数,通常用BeginPaint函数来响应 WM_PAINT消息。如果要在没有WM_PAINT消息的时刻画用户区 ,必须使用GetDC函数得到显示缓冲区的句柄。显示缓冲区是一种 共享资源,一个应用程序占有它之后,其它应用程序就无法得到它 。因此,应用程序在利用显示缓冲区画完窗口内容之后,就必须使 用ReleaseDC函数释放它。同理,要求用EndPaint函数释放由 BeginPaint函数获得的显示缓冲区。 (2) WM_PAINT消息 要求Windows发送WM_PAINT的情况有:改变窗口大小,覆盖用户 区的菜单或对话框关闭,使用UpdateWindow和ScrollWindow函 数等。 Windows并非WM_PAINT消息的唯一来源,使用InvalidateRect或 InvalidateRgn函数也可以产生绘图窗口的WM_PAINT消息。这 两个函数把用户区全部或部分标记成无效用户区而要求重新显示。 (3) 非WM_PAINT消息 在处理非WM_PAINT消息时,应用程序获取窗口用户区设备描述表句 柄使用GetDC函数,它常常用来对用户的某些动作提供反馈。 3. 映像模式 (1) 坐标系统 显示缓冲区默认的坐标系统中用户区的左上角是原点,即点(0,0)。向 右的每个像素表示X轴方向的一个单位,向下的每个像素表示Y轴方 向的一个单位。 (2) 映像模式的设置 通过修改映射模式和显示原点,可以改变坐标系统。Windows应用程 序可通过调用SetMapMode函数来设定映射模式,通过调用 SetViewPortOrg函数,可以把坐标系统原点移到任何位置。默认 的映射模式为MM_TEXT,即默认的坐标系统。当前设备描述表的 映射方式可通过调用GetMapMode函数得到。 SetMapMode函数 int SetMapMode(HDC hdc,int nMapMode); 说明:参数nMapMode是映射模式。映射共有8种映射模式,取值及 含义如下: GetMapMode函数 DWORD GetMapMode (HDC hDC) SetViewPortOrg函数 DWORD SetViewPortOrg(HDC hDC,int x,int y) 绘图工具和颜色的设置与应用 1. 画笔的应用 Windows使用当前在设备描述表中已选择的画笔来画线。程序中可以 选择Windows的预定义画笔,也可以选择自定义的画笔。 画笔的操作包括创建画笔、将画笔选入设备描述表和删除画笔。 对于三种预定义画笔,可使用GetStockObject函数来选择其中的一种 。 应用程序也可根据实际需要创建一种自定义的逻辑画笔。 (1) 函数CreatePen HPEN CreatePen(int fnPenStyle,int nWidth,COLORREF clrref); 说明:clrref参数是一个COLORREF类型的颜色值,指定画笔的颜色 ,可用宏指令RGB构造这个值,如: clrref=RGB(byRed,byGreen,byBlue); (2) 函数CreatePenIndirect HPEN CreatePenIndirect(LOGPEN FAR* lpLogPen); 下面给出一段程序,说明建立、选择和释放画笔的一般方法,假定程序 要用一支宽度为3的黑色作图,则程序如下: HPEN hPen,hOldPen: hPen=CreatePen(PS_SOLD,3,RGB(0,0,0); /创建画笔 hPen if(hPen) hOldPen=SelectObject(hDC,hPen); /将 hPen 选入设备描述表 ,同时返回原画笔句柄 hOldPen /进行绘图操作 SelectObject(hDC,hOldPen); /恢复原画笔 hOldPen DelectObject(hPen); /删除hPen画笔,释放内存空间 2. 画刷的应用 当我们在绘制一些区域图形时,需要使用画刷填充内部区域。 画刷的创建和应用与画笔很相似,操作画刷也包括创建、选入设备描述表和删除。 Windows系统中预定义的刷子有七种,应用程序可以通过GetStockObject函数选 用其中一个。 仅靠这七种刷子往往不能满足要求,应用程序可通过如下两种函数创建自己的画刷。 (1) 函数CreateHatchBrush HBRUSH CreateHatchBrush(int fnStyle,COLORREF clrref); (2) 函数CreateSolidBrush HBRUSH CreateSolidBrush(COLORREF clrref); 3. 常用绘图函数 GDI提供各种各样的输出操作,从画线到写字应有尽有。 (1) 画点函数SetPixel (2) 画线函数LineTo/LineToEx与移动函数MoveTo/MoveToEx (3) 画矩形函数Rectangle (4) 画圆或椭圆函数Ellipse (5) 画圆弧函数Arc (6) 画扇形函数Pie 如图所示,在窗口中显示正弦曲线。 实例sin 文本的输出方法与字体的设置 在Windows编程中,文本操作首先要获得文本句柄。此外,应用程序还要设 置字体、字符大小、字符颜色等有关属性,并将这些属性选入设备环境。 1. 设置文本的设备环境 字体描述了所要显示的文本的大小、类型和外形。在Windows中,字体一般 又可以分成两大类型:逻辑字体和物理字体。物理字体是为特殊设备设计的 ,因而是设备相关的。而逻辑字体定义的字符集是设备无关的。 (1) 选择系统字体 常用的默认字体为SYSTEM,Windows使用该字体作为系统界面字体。 一般需要执行如下步骤: 定义字体句柄变量,形式如下: HFONT hF; /hF为字体的句柄 调用函数GetStockObject获得系统字体句柄,它返回的是系统的默认 字体。 hF=GetStockObject( ); 调用函数SelectObject将字体选入设备环境。 SelectObject(hdc,hF); (2) 自定义字体 可调用函数CreateFont或CreateFontIndirect创建自定义字体。 (3) 设置字体颜色和背景颜色 应用程序通过调用函数SetTextColor设置字体颜色。函数原型为 : SetTextColor(hdc,crColor); /crColor为设置的颜色 应用程序还可以调用函数SetBkColor设置背景颜色。函数原型为 : SetBkColor(hdc,crColor); 2. 文本的输出 文本的输出过程包括获取字体信息、格式化文本、调用函数输出文本等 具体过程。 (1) 获取字体信息 应用程序在输出文本之前必须获取当前使用字体的有关信息,使用 函数GetTextMetrics可以获取一个字体文本度量并将它放入一个类 型为TEXTMETRIC的数据结构中,然后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论