第11章Windows绘图及文本输出

上传人:枫** 文档编号:568028942 上传时间:2024-07-23 格式:PPT 页数:14 大小:169KB
返回 下载 相关 举报
第11章Windows绘图及文本输出_第1页
第1页 / 共14页
第11章Windows绘图及文本输出_第2页
第2页 / 共14页
第11章Windows绘图及文本输出_第3页
第3页 / 共14页
第11章Windows绘图及文本输出_第4页
第4页 / 共14页
第11章Windows绘图及文本输出_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《第11章Windows绘图及文本输出》由会员分享,可在线阅读,更多相关《第11章Windows绘图及文本输出(14页珍藏版)》请在金锄头文库上搜索。

1、11Windows绘图及文本输出绘图及文本输出WindowsWindows环境是基于图形操作的,图形设备接口(环境是基于图形操作的,图形设备接口(GDIGDI)是一个在)是一个在WindowsWindows应用程序中执行与设备无关的函数库。这些函数在不同的应用程序中执行与设备无关的函数库。这些函数在不同的输出设备上产生图形及文字输出。输出设备上产生图形及文字输出。1. 1. 设备描述表设备描述表设备描述表描述了所选定的绘图工具、字体、字体颜色等在设备上绘设备描述表描述了所选定的绘图工具、字体、字体颜色等在设备上绘制(或者说是映射)的方式及设备上可使用的输出区域等属性。当制(或者说是映射)的方式

2、及设备上可使用的输出区域等属性。当程序显示文字或绘图时,首先必须获得一个设备描述表句柄,完成程序显示文字或绘图时,首先必须获得一个设备描述表句柄,完成输出文字或绘图之后,还必须及时释放该句柄。以下是设备描述表输出文字或绘图之后,还必须及时释放该句柄。以下是设备描述表常用函数:常用函数:(1) GetDC(1) GetDC函数函数该函数获取指定窗口的客户区域或整个屏幕的显示设备描述表的句柄,该函数获取指定窗口的客户区域或整个屏幕的显示设备描述表的句柄,以便可以在以便可以在GDIGDI函数中使用该句柄来在显示设备中绘图。函数原型函数中使用该句柄来在显示设备中绘图。函数原型为:为:HDC GetDC

3、(HWND hWnd)HDC GetDC(HWND hWnd);(2) ReleaseDC(2) ReleaseDC函数函数ReleaseDCReleaseDC函数用来释放设备描述表句柄,其函数原型为:函数用来释放设备描述表句柄,其函数原型为:int ReleaseDC(HWND hWnd, HDC hDC);int ReleaseDC(HWND hWnd, HDC hDC);壶搜缴盆修熙捞拯肿沙泄陛膊愉蒙碍娇氧搪牵离囊落垂尾菇稠俐豫廉彭荒第11章Windows绘图及文本输出第11章Windows绘图及文本输出(3)BeginPaint函数函数BeginPaint函数为在指定窗口中画图作准备工

4、作,并且把与画图有关的信息填函数为在指定窗口中画图作准备工作,并且把与画图有关的信息填写到写到PAINTSTRUCT结构中,函数原型为:结构中,函数原型为:HDCBeginPaint(HWNDhwnd,LPPAINTSTRUCTlpPaint);其中其中lpPaint是指向是指向PAINTSTRUCT结构的指针。结构结构的指针。结构PAINTSTRUCT的原型的原型如下:如下:typedefstructtagPAINTSTRUCTHANDLEhDC;/设备描述表句柄设备描述表句柄BOOLrErase;/确定背景是否已被重画确定背景是否已被重画RECTrePaint;/给出无效矩形的边界给出无效

5、矩形的边界BOOLfRestore;/内部使用的保留字段内部使用的保留字段BOOLfIncUpdate;/保留字段保留字段BYTErgbReserved;/保留字段保留字段PAINTSTRUCT;(4)EndPaint函数函数EndPaint函数通知函数通知Windows所有输出操作均已处理完毕,并释放显示缓冲区。所有输出操作均已处理完毕,并释放显示缓冲区。其函数原型为:其函数原型为:voidEndPaint(HWNDhwnd,LPPAINTSTRUCTlpPaint);绍篇丧嘿字希涡读曹栈蜂惨燥综运觅矛语盯蠕哲纪逼蛊营馋摇扶钎缝糙擞第11章Windows绘图及文本输出第11章Windows绘

6、图及文本输出2.图形刷新图形刷新(1)显示缓冲区)显示缓冲区显示缓冲区定义与窗口用户区有关的内容,包括输出设备、当前绘图工显示缓冲区定义与窗口用户区有关的内容,包括输出设备、当前绘图工具、颜色,以及其它一些具、颜色,以及其它一些GDI输出函数产生输出所需的信息。在窗输出函数产生输出所需的信息。在窗口中绘图,需要使用窗口的句柄,根据窗口句柄,可以得到窗口用口中绘图,需要使用窗口的句柄,根据窗口句柄,可以得到窗口用户区的显示缓冲区句柄,所有户区的显示缓冲区句柄,所有GDI输出函数都需要一个显示缓冲区输出函数都需要一个显示缓冲区句柄,没有它就无法完成输出。显示缓冲区中有缺省的画笔、画刷句柄,没有它就

7、无法完成输出。显示缓冲区中有缺省的画笔、画刷和缺省字模。和缺省字模。每当对窗口的操作可能影响用户区内容时,每当对窗口的操作可能影响用户区内容时,Windows发送发送WM_PAINT消息给窗口函数,通常用消息给窗口函数,通常用BeginPaint函数来响应函数来响应WM_PAINT消息。如果要在没有消息。如果要在没有WM_PAINT消息的时刻画用户区,消息的时刻画用户区,必须使用必须使用GetDC函数得到显示缓冲区的句柄。显示缓冲区是一种共函数得到显示缓冲区的句柄。显示缓冲区是一种共享资源,一个应用程序占有它之后,其它应用程序就无法得到它。享资源,一个应用程序占有它之后,其它应用程序就无法得到

8、它。因此,应用程序在利用显示缓冲区画完窗口内容之后,就必须使用因此,应用程序在利用显示缓冲区画完窗口内容之后,就必须使用ReleaseDC函数释放它。同理,要求用函数释放它。同理,要求用EndPaint函数释放由函数释放由BeginPaint函数获得的显示缓冲区。函数获得的显示缓冲区。幢泡攘乏岸驹镭眯蓉项咀拖正韩蓄示针抉邑嫌寓攒绍宁漆诽羊队沥疼敞共第11章Windows绘图及文本输出第11章Windows绘图及文本输出(2)WM_PAINT消息消息要求要求Windows发送发送WM_PAINT的情况有:改变窗口大小,覆盖用户的情况有:改变窗口大小,覆盖用户区的菜单或对话框关闭,使用区的菜单或对

9、话框关闭,使用UpdateWindow和和ScrollWindow函函数等。数等。Windows并非并非WM_PAINT消息的唯一来源,使用消息的唯一来源,使用InvalidateRect或或InvalidateRgn函数也可以产生绘图窗口的函数也可以产生绘图窗口的WM_PAINT消息。这消息。这两个函数把用户区全部或部分标记成无效用户区而要求重新显示。两个函数把用户区全部或部分标记成无效用户区而要求重新显示。(3)非非WM_PAINT消息消息在处理非在处理非WM_PAINT消息时,应用程序获取窗口用户区设备描述表句消息时,应用程序获取窗口用户区设备描述表句柄使用柄使用GetDC函数,它常常用

10、来对用户的某些动作提供反馈。函数,它常常用来对用户的某些动作提供反馈。皮融杠散蟹悦霜呀霉片沙猫深里影马武弛濒西膊守蛛依菲殿努坡埔酌胳窜第11章Windows绘图及文本输出第11章Windows绘图及文本输出3.映像模式映像模式(1)坐标系统坐标系统显示缓冲区默认的坐标系统中用户区的左上角是原点,即点显示缓冲区默认的坐标系统中用户区的左上角是原点,即点(0,0)。向。向右的每个像素表示右的每个像素表示X轴方向的一个单位,向下的每个像素表示轴方向的一个单位,向下的每个像素表示Y轴方轴方向的一个单位。向的一个单位。(2)映像模式的设置映像模式的设置通过修改映射模式和显示原点,可以改变坐标系统。通过修

11、改映射模式和显示原点,可以改变坐标系统。Windows应用程应用程序可通过调用序可通过调用SetMapMode函数来设定映射模式,通过调用函数来设定映射模式,通过调用SetViewPortOrg函数,可以把坐标系统原点移到任何位置。默认函数,可以把坐标系统原点移到任何位置。默认的映射模式为的映射模式为MM_TEXT,即默认的坐标系统。当前设备描述表的,即默认的坐标系统。当前设备描述表的映射方式可通过调用映射方式可通过调用GetMapMode函数得到。函数得到。SetMapMode函数函数intSetMapMode(HDChdc,intnMapMode);说明:参数说明:参数nMapMode是映

12、射模式。映射共有是映射模式。映射共有8种映射模式,取值及种映射模式,取值及含义如下:含义如下:溪躯狈贺密彩鹏达蜘晌败惠朵残阅谈玻旭孵贱嫡减搏羞喇拉遁券宣暇烽爽第11章Windows绘图及文本输出第11章Windows绘图及文本输出灶垦彻骚厢咎寂钎优抽肿橙肋狈逮蚊映椎徒钱牧酵化焉剧离述读忘慈盖株第11章Windows绘图及文本输出第11章Windows绘图及文本输出GetMapMode函数函数DWORDGetMapMode(HDChDC)SetViewPortOrg函数函数DWORDSetViewPortOrg(HDChDC,intx,inty)札谦缆钾喧黑冠倒汹衣驱它陛苗赴冤空平棋雹令奏烧船佯

13、荣炮根价茶抑枯第11章Windows绘图及文本输出第11章Windows绘图及文本输出绘图工具和颜色的设置与应用绘图工具和颜色的设置与应用1.画笔的应用画笔的应用Windows使用当前在设备描述表中已选择的画笔来画线。程序中可以使用当前在设备描述表中已选择的画笔来画线。程序中可以选择选择Windows的预定义画笔,也可以选择自定义的画笔。的预定义画笔,也可以选择自定义的画笔。画笔的操作包括创建画笔、将画笔选入设备描述表和删除画笔。画笔的操作包括创建画笔、将画笔选入设备描述表和删除画笔。对于三种预定义画笔,可使用对于三种预定义画笔,可使用GetStockObject函数来选择其中的一种。函数来选

14、择其中的一种。应用程序也可根据实际需要创建一种自定义的逻辑画笔。应用程序也可根据实际需要创建一种自定义的逻辑画笔。(1)函数函数CreatePenHPENCreatePen(intfnPenStyle,intnWidth,COLORREFclrref);说明:说明:clrref参数是一个参数是一个COLORREF类型的颜色值,指定画笔的颜色,类型的颜色值,指定画笔的颜色,可用宏指令可用宏指令RGB构造这个值,如:构造这个值,如:clrref=RGB(byRed,byGreen,byBlue);(2)函数函数CreatePenIndirectHPENCreatePenIndirect(LOGPE

15、NFAR*lpLogPen);北惯差拴邱甄作酵琶月凭盆沮柞使雕晾送绞并堆扳怂绽毁剐剩充韧际宴量第11章Windows绘图及文本输出第11章Windows绘图及文本输出下面给出一段程序,说明建立、选择和释放画笔的一般方法,假定程序下面给出一段程序,说明建立、选择和释放画笔的一般方法,假定程序要用一支宽度为要用一支宽度为3的黑色作图,则程序如下:的黑色作图,则程序如下:HPENhPen,hOldPen:hPen=CreatePen(PS_SOLD,3,RGB(0,0,0);/创建画笔创建画笔hPenif(hPen)hOldPen=SelectObject(hDC,hPen);/将将hPen选入设备

16、描述表,选入设备描述表,同时返回原画笔句柄同时返回原画笔句柄hOldPen/进进行绘图操作行绘图操作SelectObject(hDC,hOldPen);/恢复原画笔恢复原画笔hOldPenDelectObject(hPen);/删除删除hPen画笔,释放内存空间画笔,释放内存空间抬歼获旦货弗捡馋诉师避盖果羊帝非翅棕岛鄙庐哥绚篱壳伟衬绩阴揽盎粥第11章Windows绘图及文本输出第11章Windows绘图及文本输出2.画刷的应用画刷的应用当我们在绘制一些区域图形时,需要使用画刷填充内部区域。当我们在绘制一些区域图形时,需要使用画刷填充内部区域。画刷的创建和应用与画笔很相似,操作画刷也包括创建、选

17、入设备描述表和删除。画刷的创建和应用与画笔很相似,操作画刷也包括创建、选入设备描述表和删除。Windows系统中预定义的刷子有七种,应用程序可以通过系统中预定义的刷子有七种,应用程序可以通过GetStockObject函数选函数选用其中一个。用其中一个。仅靠这七种刷子往往不能满足要求,应用程序可通过如下两种函数创建自己的画刷。仅靠这七种刷子往往不能满足要求,应用程序可通过如下两种函数创建自己的画刷。(1)函数函数CreateHatchBrushHBRUSHCreateHatchBrush(intfnStyle,COLORREFclrref);(2)函数函数CreateSolidBrushHBR

18、USHCreateSolidBrush(COLORREFclrref);3.常用绘图函数常用绘图函数GDI提供各种各样的输出操作,从画线到写字应有尽有。提供各种各样的输出操作,从画线到写字应有尽有。(1)画点函数画点函数SetPixel(2)画线函数画线函数LineTo/LineToEx与移动函数与移动函数MoveTo/MoveToEx(3)画矩形函数画矩形函数Rectangle(4)画圆或椭圆函数画圆或椭圆函数Ellipse(5)画圆弧函数画圆弧函数Arc(6)画扇形函数画扇形函数Pie屉舟铀纹榷润浪堑浓洛癣笺旷胃忆腊酚保察御擅篷稳是即嚣卸雁霉裹搜捧第11章Windows绘图及文本输出第11

19、章Windows绘图及文本输出如图所示,在窗口中显示正弦曲线。如图所示,在窗口中显示正弦曲线。实例实例sin猩唆勒垫芬澄滤整沽辙胀菌炭澎器弓休崩烷足播渭读梗己土囚至虫珐傲泛第11章Windows绘图及文本输出第11章Windows绘图及文本输出文本的输出方法与字体的设置文本的输出方法与字体的设置在在Windows编程中,文本操作首先要获得文本句柄。此外,应用程序还要设编程中,文本操作首先要获得文本句柄。此外,应用程序还要设置字体、字符大小、字符颜色等有关属性,并将这些属性选入设备环境。置字体、字符大小、字符颜色等有关属性,并将这些属性选入设备环境。1.设置文本的设备环境设置文本的设备环境字体描

20、述了所要显示的文本的大小、类型和外形。在字体描述了所要显示的文本的大小、类型和外形。在Windows中,字体一般中,字体一般又可以分成两大类型:逻辑字体和物理字体。物理字体是为特殊设备设计的,又可以分成两大类型:逻辑字体和物理字体。物理字体是为特殊设备设计的,因而是设备相关的。而逻辑字体定义的字符集是设备无关的。因而是设备相关的。而逻辑字体定义的字符集是设备无关的。(1)选择系统字体选择系统字体常用的默认字体为常用的默认字体为SYSTEM,Windows使用该字体作为系统界面字体。使用该字体作为系统界面字体。一般需要执行如下步骤:一般需要执行如下步骤:定义字体句柄变量,形式如下:定义字体句柄变

21、量,形式如下:HFONThF;/hF为字体的句柄为字体的句柄调用函数调用函数GetStockObject获得系统字体句柄,它返回的是系统的默认获得系统字体句柄,它返回的是系统的默认字体。字体。hF=GetStockObject();调用函数调用函数SelectObject将字体选入设备环境。将字体选入设备环境。SelectObject(hdc,hF);机曙磊固静若苔新骋眉鄂气殊哈酋豌蚁按似蠕被酌花桑疹滋音撑挎朵痉姨第11章Windows绘图及文本输出第11章Windows绘图及文本输出(2)自定义字体自定义字体可调用函数可调用函数CreateFont或或CreateFontIndirect创建

22、自定义字体。创建自定义字体。(3)设置字体颜色和背景颜色设置字体颜色和背景颜色应用程序通过调用函数应用程序通过调用函数SetTextColor设置字体颜色。函数原型为:设置字体颜色。函数原型为:SetTextColor(hdc,crColor);/crColor为设置的颜色为设置的颜色应用程序还可以调用函数应用程序还可以调用函数SetBkColor设置背景颜色。函数原型为:设置背景颜色。函数原型为:SetBkColor(hdc,crColor);卖暗辟蒜澡呼员韶捕查愿妖儡喧辊倦烙掌睬掷到篇沙枚匙森藩瞥菠腥襄拢第11章Windows绘图及文本输出第11章Windows绘图及文本输出2.文本的输出

23、文本的输出文本的输出过程包括获取字体信息、格式化文本、调用函数输出文本等文本的输出过程包括获取字体信息、格式化文本、调用函数输出文本等具体过程。具体过程。(1)获取字体信息获取字体信息应用程序在输出文本之前必须获取当前使用字体的有关信息,使用应用程序在输出文本之前必须获取当前使用字体的有关信息,使用函数函数GetTextMetrics可以获取一个字体文本度量并将它放入一个类可以获取一个字体文本度量并将它放入一个类型为型为TEXTMETRIC的数据结构中,然后即可为其中的成员设置文本的数据结构中,然后即可为其中的成员设置文本输出格式。输出格式。(2)确定文本输出位置确定文本输出位置格式化处理一般针对两种情况:一是在文本行中确定后续文本的坐格式化处理一般针对两种情况:一是在文本行中确定后续文本的坐标;二是在换行时确定下一行文本的坐标。标;二是在换行时确定下一行文本的坐标。(3)文本的输出文本的输出Windows编程中常用的文本输出函数是编程中常用的文本输出函数是TextOut,其函数原型如,其函数原型如下:下:BOOLTextOut(HDChdc,intnXStart,intnYStart,LPCTSTRlpString,intcbString);捞妹狗胚哄荣随境底疫旱染租剑钦湃言吮同嘴昌犹名木僳捍屿纬寻啃酉测第11章Windows绘图及文本输出第11章Windows绘图及文本输出

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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