计算机图形设备接口教学课件_第1页
计算机图形设备接口教学课件_第2页
计算机图形设备接口教学课件_第3页
计算机图形设备接口教学课件_第4页
计算机图形设备接口教学课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第8章图形设备接口趾归印撇二磋闭震程匙劲伐趾眉潜稠氏困水缺孪塔稍殊署靡借扎吵雄殴驱计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版第8章图形设备接口8.1图形设备接口介绍8.2文本和字体8.3简单图形绘制8.4基础实例――字体应用程序8.5提高实例――绘图应用程序8.6本章小结8.7思考练习题约丛凋儿姻凋讲榔汝社手悯峭淄键刹遭沉连齐苏嗜嗓撒先扮娠祭写诌愚润计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1图形设备接口介绍图形设备接口(graphicsdeviceinterface,GDI)是Windows提供的一个支持图形编程处理的抽象接口。GDI作为Windows的一个组成部分,提供了各种各样的绘图工具。应用程序通过GDI与设备打交道,GDI通过不同设备提供的驱动程序将绘图语句转换为对应的绘图指令,避免了用户直接对硬件进行操作,从而实现设备无关性。所谓设备无关性,是指操作系统屏蔽了硬件设备的差异,使用户编程时不用过多考虑设备的类型,如不同种类的显示器或打印机等。葫州厂治桂搏鸳涸咬条瞩僻胯欧遏预针多雏秀略年铣伶涨蓄斟阅眶豪匿剂计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类

Windows设备环境是GDI的关键元素,GDI作为一个编程接口,提供了大量的与设备无关的图形处理函数,这些函数定义在Windows的三个核心动态链接库之一的Gdi32.dll中,编程时可以通过调用GDI函数绘制不同形状、颜色和类型的图形。MFC对GDI函数和绘图对象进行了封装,因此可以更方便地利用MFC中有关图形处理的类进行图形绘制。

闸帆载迈骸燎筷徊届艰敞创谊怀宋风贡谚熬牙挣器谎字迁揍勒候渣弓缓歌计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类图8-1说明了Windows应用程序绘图的过程。应用程序设备环境图形设备接口设备驱动程序输出设备嗅反钟盯作胁牟月镶融锰竭渣绚册边遂弛诫搔渣蜕通惧搀矩守郝窖积谁栈计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类

MFC提供的DC类包括CDC类、CPaintDC类、CClientDC类、CWindowDC类和CMetaFileDC类等,其中CDC类是MFC设备环境类的基类,其他的MFC设备环境类都是CDC类的派生类。下面对这几个类进行简要介绍。

1)CDC类

CDC类既可作为其他MFC设备环境类的基类,又可作为一般的设备环境类使用

瞻勉臣饼苍萄迢震全妆剿转沛豁倪鹃碧闹寝书颐奴予缮鞘矩惰治杜独暗门计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类

为创建新的CDC设备描述表对象必须调用构造函数CDC::CDC(),接着是初始化。初始化有如下三种方法:CreateDC()为指定设备,创建设备描述表。如果DC已经创建,则CreateDC()方法返回True值,否则返回False。CreateIC()为指定设备创建信息描述表以获取使用设备信息,而无需创建设备描述表。CreateCompatibleDC()创建新存储设备描述表,它与现有设备描述表兼容。辐霉烂蝴麓禁泽搁答功婚群模来镁污盈扎耗钡非碟例苹镀拱灼橙嫉文芝卯计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类2)CPaintDC类

CPaintDC类是OnPaint函数使用的设备环境类,它代表一个窗口的绘图画面,只在相应WM_PAINT消息的函数中使用,大多数情况是在OnPaint()函数中使用。当应用程序窗口出于某种原因需要更新时,系统会想应用程序发送WM_PAINT消息,从而调用OnPaint()函数。在CView类的成员函数OnPaint中就这样定义了一个设备环境。零崇趾腻小音蛇岩连报池商残丧容寒札你灶剪有浸瞥无径诊扒柴驰颂伤幢计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类voidCView::OnPaint() { //定义一个设备环境

CPaintDCdc(this); OnPrepareDC(&dc); OnDraw(&dc); }

由于基类CView的OnPaint函数调用了OnDraw函数,因此编程时经常在OnDraw函数中输出图形。湾诌懂熔席纷馆则妄伺躺笛赞然凋菏勘诡斧枚冉瘪肝仁添洼箱戮撬托牧螟计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类3)CClientDC类

CClientDC类可能是使用最多的CDC的派生类,它代表了客户区设备环境,因此所有使用CClientDC类对象完成的绘图操作都位于窗口的客户区内。客户区是指程序窗口中不包括边框、标题栏、菜单栏、工具栏和状态栏等界面元素的内部绘图区。当在客户区绘图时,需要利用CClientDC类定义一个客户区设备环境。隅阀咯售盟锨炕簧辈评第枢贴硅峻坦歇痔荚槽丢独榨跃毒吕委霞承舅音盒计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.1设备环境类4)CWindowDC类

CWindowDC类代表了整个程序窗口设备环境,包括窗口边框、标题栏和菜单栏等非客户区和客户区,因此使用窗口设备环境可以在整个程序窗口内绘图。5)CMetaFileDC类

CMetaFileDC类是用于创建一个Windows图元文件的设备环境。Windows图元文件包含了一系列GDI绘图命令,使用这些信息可以重复创建所需的图形或文本。鸵腔硷迪碟钉驴瓦镑去拍眠监倦坟魏艳乔萝拙伏割卒验吾六淮置摈宗吕挥计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.2GDI对象

WindowsGDI提供了一些绘图对象,这些GDI对象是Windows图形设备接口的抽象绘图工具,程序通过GDI对象来设置绘图的工具和风格。GDI对象包含画笔、画刷、字体、位图和调色板。孵冯土纺曰艺哆嗽奄毙额踪硕驹柿荫诉扫皮比忙啊救访股旭浑柯栽葱洲讨计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.2GDI对象GDI类在MFC中的层次结构如图8-2所示。

CObjectCGdiObjectCPenCBrushCFontCBitmapCRgnCPalette俐有百诅期癌玄还雹级泞启患罚砸嘛绞锹裴桔垄会渭碰厚满较逼笼瑰历婴计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.2GDI对象

MFC的CDC类提供了成员函数SelectObject,用于选择用户自己创建的GDI对象,该函数有多种重载形式,可以选择用户已定制好的画笔、画刷、字体和位图等不同类型的GDI对象。访函数常用的重载形式如下所示:

CPen*SelectObject(CPen*pPen);CBrush*SelectObjec(CBrush*pBrush);VirtualCFont*SelectObject(CFont*pFont);CBitmap*SelectObject(CBitmap*pBitmap);

恫蚊励搪梳我腕逮位围蚕灭莱哉沦赶捣呢虐睦但惠萄收叶篆讽总索执鞍缨计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.2GDI对象

上述函数的参数是一个指向用户已定制好的GDI对象的指针,选择操作成功时函数将返回以前GDI对象的指针,否则返回NULL。

MFC的CDC类还提供了成员函数DeleteObject,用于释放创建的GDI对象。使用方式如下:

GdiObjectName.DeleteObject();

其中GdiObjectName是用户将要释放的GDI对象的名称。煤肯疽伦紊争葛歹琶硕搔伎厚在附键傅妒当咐纹捐婴溜惜兽眠寥枝瓜绅客计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.2GDI对象

WindowsGDI提供了一些绘图对象,这些GDI对象是Windows图形设备接口的抽象绘图工具,程序通过GDI对象来设置绘图的工具和风格。GDI对象包含画笔、画刷、字体、位图和调色板等。GDI对象类在MFC中的层次结构如图8-2所示。代烃肃蚊读露嗽炼捆挟蛇谜捂莽浙眺磅渗妓冬唤矛傅蜕取持岸阉掳根糕浪计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版CObjectCGdiObjectCPenCBrushCFontCBitmapCRgnCPalette形稿粗械水榜磺盟芒筐问痰辆笋卷容衰双芭吻骋邯浑爸撩寞宪聊淆魂欲音计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版MFC的CDC类提供了成员函数SelectObject,用于选择用户自己创建的GDI对象,该函数有多种重载形式,可以选择用户已定制好的画笔、画刷、字体和位图等不同类型的GDI对象。该函数常用的重载形式如下所示:CPen*SelectObject(CPen*pPen);CBrush*SelectObject(CBrush*pBrush);VirtualCFont*SelectObject(CFont*pFont);CBitmap*SelectObject(CBitmap*pBitmap);怕陡湍俩糊头囤辙画俐妓姚冉舰袋女逝器砷学匀屿映赴避苗膨譬毛扇彩缀计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版1.使用GDI对象绘图绘图工具的使用包括创建GDI对象、选择GDI对象、使用GDI对象绘图和使用后释放GDI对象等步骤。(1)定义一个GDI对象(如CPen对象、CBrush对象),然后用相应的函数(如CreatePen()、CreateSolidBrush())创建此GDI对象。但要注意,有些GDI派生类的构造函数允许用户提供足够的信息,从而一步即可完成对象的创建任务,如CPen类、CBrush类。(2)将构造的GDI对象选入当前设备环境中,并将原来的GDI对象保存起来。(3)绘图结束后,恢复当前设备环境中原来的GDI对象。沦崎保耙涣掺纽肚嘲治秒请型姥等拔邻净缮储塞鲁厢攀盏紧孪羞伴种刃框计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版注意:对于显示设备环境来说,在每个消息控制函数的入口处,设备环境都是未被初始化的,当函数退出之后,在该函数内部所进行的任何GDI选择都不再有效,因此,每次都必须从头开始设置设备环境。截六挑线冰已狡赚正泅抄谤嗅厚迷廓秦掖官庭吝岩然桔晤邵酝未切耽慎沸计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版2.库存的GDI对象除了自定义的GDI对象外,Windows还包含了一些预定义的库存GDI对象。由于它们是Windows系统的一部分,因此用户不用删除它们。CDC的成员函数SelectStockObject可以把一个库存对象选入当前设备环境中,并返回原先被选中的对象指针,同时使原先被选中的对象从设备环境中分离出来。砰真烹永河律晃家据齿造帆羞涉裸姥美嘴矩除战九卓冤汾庶延清穷则动以计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版函数SelectStockObject可选用的库存GDI对象类型可以是下列值之一:BLACK_BRUSH:黑色画刷。DKGRAY_BRUSH:深灰色画刷。GRAY_BRUSH:灰色画刷。HOLLOW_BRUSH:中空画刷。LTGRAY_BRUSH:浅灰色画刷。NULL_BRUSH:空画刷。WHITE_BRUSH:白色画刷。BLACK_PEN:黑色画笔。NULL_PEN:空画笔。WHITE_PEN:白色画笔。DEVICE_DEFAULT_FONT:设备的默认字体。SYSTEM_FONT:系统字体。代蛀猛惰偏藤岭次我乞笔所秃阂硕嘘令氦窥茹瘤厘瑶混躺窜渠泥骸勾篙忱计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版画笔和画刷是GDI对象中最常用的两个绘图对象,它们在绘图时可以同时使用。其中,画笔用于设置画线的方式,包括点、直线和曲线以及封闭几何图形周围的边线(如矩形和椭圆等),而画刷用于设置封闭图形内部区域的绘制方式。当然,绘图的最终效果不完全取决于画笔和画刷的设置,还可以通过设置绘图模式进行修正。CDC类的成员函数SetROP2()用于设置绘图模式,该函数声明如下:intSetRop2(intnDrawMode);击囤抹踌责镰苞存兹蟹床肥钾文唐秒些刘燕卉骄替泼士酉归叙斧弯圾间骋计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.3映射模式

映射模式确定了在绘制图形时所依据的坐标系,它定义了逻辑单位的实际大小、坐标增长方向。所有映射模式的坐标原点均在设备输出区域(如客户区或打印区)的左上角。此外,对于某些映射模式,用户还可以自定义窗口的长度和宽度,设置视图区的物理范围。捎鸽友喳糟芽访秸哎蛮森与渤庐沟再婴绵谤农超示啃憨羞寨刮研扇外辫歪计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.3映射模式

可以使用CDC::SetMapMode函数更改映射模式,并使用CDC:SetViewportOrg和CDC::SetWindowOrg函数移动逻辑坐标系的原点。Windows支持8种映射模式.

细镰舆僻拿研伦涝张颊昏厩更必革怖奎女箔腐瘩神煽饱氨无帘溃窑睁牲亦计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版表8-2映射模式映射模式说明MM_ISOTROPIC

逻辑单位被转换为具有等刻度轴的任意单位;也就是说,X轴上的一个单位等于Y轴上的一个单位。使用SetWindowExt和SetViewportExt成员函数指定所需单位以及轴的方向。GDI根据需要进行调整,以确保X轴和Y轴上的单位大小相同MM_ANISOTROPIC

逻辑单位可被转换为任意单位,其中,轴可以被随意缩放。将映射模式设置为MM_ANISOTROPIC,不会以改变当前窗口或视区设置。为了更改单位、方向和缩放,可以调用SetWindowExt和SetViewprotExt成员函数MM_HIENGLISH每个逻辑单位被转换为0.001英寸。正向X向右,正向Y向上MM_LOENGLISH每个逻辑单位被转换为0.01英寸。正向X向右,正向Y向上MM_HIMETRIC每个逻辑单位被转换为0.01毫米。正向X向右,正向Y向上MM_LOMETRIC每个逻辑单位被转换为0.1毫米。正向X向右,正向Y向上MM_TEXT每个逻辑单位被转换为1个设备单位。正向X向右,正向Y向下MM_TWIPS每个逻辑单位被转换为1/20磅。正向X向右,正向Y向上佳聪补秒钒律笛昔正疲财拥菩海讣女柞努冈拌它潞厅用氦踪匡洒撒栽咨酋计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.3映射模式如果希望坐标系的原点在显示区域中央而不是左上角,可以使用CDCLSetWindowOrg或CDC::SetViewportOrg初始化一个名为Rect的CRect对象以及窗口工作区的设备坐标,并且DC表示工作区设备上下文,则下例将坐标的原点移动到工作区:CRectrect;GetClientRect(rect);pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);删帘州伺组姜折秘弱伟剪童节慕人畏恐善配口矩首男座览诈饲晴苹崖的斡计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.4自定坐标系统Windows为应用程序提供了两类坐标:设备坐标和逻辑坐标。Win32API和MFC都提供了屏幕坐标向窗口坐标和客户区坐标、窗口坐标和客户区坐标向屏幕坐标的坐标转换函数,它们的原型如下:博搪砖蝉漠袖汞曙妊蛹倪劈罪压婴命鞋徘陷准唬窃闰娜绳哇猛芭沛粳宏巴计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.4自定坐标系统BOOLClientToScreen(HWNDhWnd,LPPOINTlpPoint);BOOLScreenToClient(HWNDhWnd,LPPOINTlpPoint);BOOLCWindow::ClientToScreen(LPPOINTlpPoint);BOOLCWindow::ClientToScreen(LPRECTlpRect);BOOLCWindow::ScreenToClient(LPPOINTlpPoint);BOOLCWindow::ScreenToClient(LPRECTlpRect);BOOLCWnd::ClientToScreen(LPPOINTlpPoint);BOOLCWnd::ClientToScreent(LPRECTlpRect);BOOLCWnd::ScreenToClient(LPPOINTlpPoint);BOOLCWnd::ScreenToClient(LPRECTlpRect);曙蝇煞饼抛跋场揩厩婶捡昧串姚候毕矮予峙吓昼橱卵加竟务董额驹拔君剔计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.1.4自定坐标系统Win32API和MFC都提供了逻辑坐标和设备坐标相互转换的函数,它们的原型如下:BOOLDPtoLP(HDChdc,LPPOINTlpPoints,intnCount);BOOLLPtoDP(HDChdc,LPPOINTlpPoints,intnCount);voidCDC::DPtoLP(LPPOINTlpPoints,intnCount=1);voidCDC::DPtoLP(LPRECTlpRect);voidCDC::DPtoLP(LPSIZElpSize);voidCDC::LPtoDP(LPPOINTlpPoints,intnCount=1);voidCDC::LPtoDP(LPRECTlpRect);voidCDC::LPtoDP(LPSIZElpSize);叛命第迭确照沃迂牙恕床襟咋廊拷秉笔窥崩犁搓滚岗搽巳嗓汇帕囤抱镐蔷计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2文本和字体

很多Windows应用程序都需要显示文本,并且文本还是一些应用程序的主要处理对象,如微软的字体处理软件Word。文本与字体密切相关,字体决定了输出文本的外观特性,合适的字体可以增强文本的表现力。Windows为文本的显示提供了多种字体支持,而在程序中用户可以创建不同风格的逻辑字体来输出文本。耕木拂菩扎永帐世鬃望漱丝预先剂排辐烁崇辱噎纯写垮这池踪啥撼喇淡钢计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.1将对象选入设备(DC)

无论何时将一个非常备对象选入DC,都最好记入前一个被选入DC的对象。当使用SelectObject函数时,会得到一个指向对象的指针。例如,如果使用SelectObject函数把最新创建的字体选入DC,则返回指向CFont对象的指针。在选择非常备字体之前,可以记录被选入DC的字体,如下所示:

CFont*pOldFont; pOldFont=pDC->SelectObject(&NewFont);佬担腿狗褒骋用拟丧觅葫勒惶遵教儒赵越裁紫吗渠努仅抒茅寿纪匙突晾釉计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.1将对象选入设备(DC)

当使用完非常备字体(或其他GDI对象)之后,必须将旧字体选回到DC中。如果说新创建的GDI对象在开发人员试图删除它(或对象的析构函数试图删除它)的时候,仍然在DC中,则删除失败;该GDI对象占用的内存被锁定,直至应用程序退出。以下是当使用完非常备GDI对象后,应该添加的最后一行代码:

pDC->SelectObject(pOldFont);久壤麓珊阐等救悲揣管忠晨股赶赦铂证劝蘑绿扯搬卖脆曝赌锤秋换尝篆擅计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.1将对象选入设备(DC)

以下例子显示了如何获得一个常备字体:CFontfontStock;fontStock.CreateStockObject(ANSI_FIXED_FONT);

与其绘图属性一样,在字体影响输出外观之前,必须被连接到DC上。为了将字体连接到DC上,应调用CDC::SelectObject函数。例如,以下代码将刚创建的字体连接到DC上:pDC->SelectObject(&fontStock);樱驴向瑟辱奇呐伊加栅赔扳岭曳允蛮寝仙离俞炸瘟笋仅黎颂汾殉伴印着繁计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.1将对象选入设备(DC)另外,还可以选择非常备字体,但为了选择一种常备字体以外的字体,必须向GDI提交字体请求。表示字体请求的一种方式是使用LOGFONT(逻辑字体)数据结构。为了将字体请求提交给GDI,开发人员要填写此数据结构,并将它传递到CFont的初始化函数CFont::CreateFontIndirect中。此函数名称中的“Indirect”指明函数带有一个指针参数。另一个初始化函数CFont::CreateFont带有一系列参数,这些参数合在一起,与LOGFONT匹配。稼恶鞘砸矢乘辙字蔓邪威忘汹擂泽艘幼暴送键驯轩呐好位牛洽两也饼惫乳计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.2字体的属性和创建

字体的属性有很多,但主要有字样、风格和尺寸

3个。字样是字符书写和显示时表现出的特定模式,例如,对于汉字,通常有宋体、楷体、仿宋、黑体、隶书以及幼圆等多种字样。字体风格主要表现为字体的粗细和是否倾斜等特点。GDI+为用户提供了一些预定义的字体风格:

FontStyleBold(加粗)FontStyleRegular(正常)FontStyleItalic(斜体)FontStyleBoldItalic(粗斜体)FontStyleUnderline(下划线)FontStyleStrikeout(删除线)。浦坡撒札神贾缝氯兢榆竭阵电感亮兆皮窥氧务空挎蓑揣挖绳军刘揉格似沤计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.2字体的属性和创建

下面代码说明了如何利用CreatePointFont函数创建自己的字体。

CClientDCdc(this); //获取设备环境

CFontfntNew,*pfntOld;fntNew.CreatePointFont(200,”Arial”,&dc);//创建Arial字体,高度为20像素

pfntOld=dc.SelectObject(&fntNew);//选入设备环境

dc.TextOut(100,100,”这是20个像素大的Arial字体.”);//利用创建的字体输出文本

dc.SelectObject(pfntOld); //恢复原来的字体

fntNew.DeleteObject(); //删除自定义字体早隘佬撬护洪捍坊僧雾贴缸窍桨琐洱癌喧饮识辈塘踢惹螟冈慑屈派器啡文计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.2字体的属性和创建

使用CreateFontIndirect()函数和LOGFONT结构创建字体的代码如下所示。

CFontfont; LOGFONTLogFnt; memset(&LogFnt,0,sizeof(LOGFONT)); //清0结构LogFont Logfnt.lfHeight=22; //字体高度为22像素

strcpy(LogFnt.lfFaceName,”Courier”); //匹配字体为Courier VERIFY(font.CreateFontIndirect(&LogFnt)); //创建字体

CClientDCdc(this); //获取设备环境

CFont*def_font=dc.SelectObject(&font); //选入设备环境

dc.TextOut(100,130,”这是测试字体!”); dc.SelectObject(def_font); font.DeleteObject();雍伪糠类迷弦格银姻碎速净酿郎犁壁亮滤允案脑波咋吾欺焙妄撕晕试妖烘计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.4输出文本

文本的最终输出不仅依赖于文本的字体,而且还和文本的颜色、对齐方式等有很大关系。CDC类提供了4个输出文本的成员函数:

1.TextOut()2.DrawText()3.ExtTextOut()4.TabbedTextOut()

帽大壳吧尤涵藕剿充谊岁沂食派挝姥豢情煮化熔靠陶娃档卢次变嫁赋淤是计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.4输出文本

输出文本的具体实现方法是首先。建立一个SDI应用程序,然后在OnDraw()函数中添加如下代码:voidCOutfontView::OnDraw(CDC*pDC){ COutfontDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere CRectrc(10,10,200,140); pDC->Rectangle(rc); pDC->DrawText("单行文本居中",rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); //将矩形向右偏移200 rc.OffsetRect(200,0); pDC->Rectangle(rc); //将一个Tab位的值指定为40个逻辑单位扮业酥牡楞法吭酮麦徽苯快或录湿弧贮键萄肿谭巳畸艰斋威缉裤茎疹创瓶计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.4输出文本 intnTab=40; //使用自定义的停止位(Tab) pDC->TabbedTextOut(rc.left,rc.top,"绘制\tTab\t文本\t示例",1,&nTab,rc.left); //将一个Tab位的值指定为80个逻辑单位

nTab=80;//使用自定义的停止位(Tab) pDC->TabbedTextOut(rc.left,rc.top+20,"绘制\tTab\t文本\t示例",1,&nTab,rc.left); //使用默认的停止位(Tab) pDC->TabbedTextOut(rc.left,rc.top+40,"绘制\tTab\t文本\t示例",0,NULL,0); }帘瓷圭窥糟央赛目陪居净蓑琴绒钱卵嗣撰阳谋涕迟鹤茨刨黄癣之梅衍垫捐计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.2.4输出文本上述代码的运行结果如图8-3所示。估炊酌幂凡匈珐取酶逮咬枢鲤少掺秉揽诀皿刊窜皋仿制阮刁赡影噬协汪羌计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3简单图形绘制

进行绘图除了需要作为画布用的设备环境,还需要使用一些绘图工具,这些绘图工具又统称为GDI对象。画笔(pen)和画刷(brush)是GDI中两种最重要的绘图工具,画笔用于绘制各种直线和曲线(包括几何图形的边线),画刷用于填充封闭几何图形的内部区域。在默认状态下,当用户获取一个设备环境并在其中绘图时,系统使用设备环境默认的绘图工具及其属性。如果要使用不同风格和颜色的绘图工具进行绘图,必须重新为设备环境设置自定义的画笔、画刷等绘图工具。叼夫题袍饮佣遥莽臃椎伪饯来亥哺蓝兵睦定索谎斑眠架甄剐月披寞列廖期计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.1创建画笔画笔是一个GDI对象,一般用于绘制直线和曲线以及描画图形轮廓。定义画笔涉及3个关键特性:风格、宽度和颜色。创建GDI画笔的最简单方式是构造一个CPen对象,并给它传递定义画笔的参数。创建GDI画笔的第2种方式是使用无参数的构造函数,然后调用CPen::CreatePen,CPen::CreatePenIndirect或者CPen::CreateStockObject函数来定义画笔的风格、宽度和颜色属性。呸辐漠皂匹辗多盆攒辰蚌坚吭选砂渺掌答媚挫胰振兰蓄柔褥抗禽较劈剪菲计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.1创建画笔

为了使基本画笔风格中至少有一种符合要求,CPen类还提供了一个单独的构造函数,用于支持各种不同风格选项的修饰和几何画笔。

LOGBRUSHLogBrush; LogBrush.lbStyle=BS_SOLID; LogBrush.lbColor=RGB(0,255,0); CPenPen(PS_GEOMETRIC|PS_SOLID

|PS_ENDCAP_FLAT|PS_JOIN_ROUND,16,&LogBrush);骗昏柒灰募仑炙邯汀窥漆泪型凝爷名乖换抓瑚括吉孝梭谷菇枚洋腾吱芳寺计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.1创建画笔

通过将绘图命令放置到CDC::BeginPath函数和CDC:EndPath函数调用之间,即可定义一个路径. pDC->BeginPath();pDC->MoveTo(0,0); pDC->LineTo(200,0); pDC->LineTo(200,200); pDC->LineTo(0,200); pDC->CloseFigure(); pDC->EndPath(); pDC->StrokePath();邢饺洱瘁屯盼烤译熊紊员垄倘婆吵瞳历豢使谭荚脾肆们桶徽鸥鳞笨替厘窃计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.2创建画刷

画刷是用于创建实心图形和渲染文本的GDI对象,并由CBrush类进行了封装。画刷有3种基本变形:原色画刷、阴影画刷以及图案画刷。CBrush类为各种画刷风格提供了构造函数。通过将COLORREF值传递到CBrush构造函数中,可以进一步生成原色画刷,如下所示:

CBrushBrush(RGB(255,0,0));腿成霸丛孕茨仁济园渗员漂倪涣琵胸郑汉骇看卞嗓单白傲泄侈芍养月归左计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.2创建画刷通过创建一个未初始化的CBrush对象并调用CBrush::CreateSolidBrush函数能够生成原色画刷,通过将阴影索引以及COLORREF值传递给CBrush的构造函数,或者通过调用CBrush::CreateHatchBrushIndirect,可以创建阴影画刷。艘雷顶答仙颖庞碧射酱墩媒裤晾叮趾湾劫墒历裹棉嗡本运桃离苇爆吠乳绥计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.2创建画刷Windows可以使用以下7种常备画刷:

BLACK_BRUSH DKGRAY_BRUSH GRAY_BRUSH LTGRAY_BRUSH HOLLOW_BRUSH NULL_BRUSH WHITE_BRUSH蜜领飞汛寂殖诧批诗零既样值蒲葫教哄樊胺赐刃梗姓渤贫行浸隶涡腰铱彰计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.3简单图形绘制

图形的绘制通常需要先创建画笔和画刷,然后调用CDC类的绘图函数。MFC为用户提供了许多函数,其中包括画点、线、矩形、多边形、圆弧、椭圆、扇形等。惭粤势丈柞踌讽辞睹眨殿椿滑拘刊然乞志射疟荒呐榆寅可邢况阜枯庇笔憋计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.3简单图形绘制

1.画点画点是最基本的绘图操作之一,可以通过SetPixel或SetPixelV函数来实现。这两个函数都是用于在指定的坐标上设置指定的颜色,只不过SetPixelV函数不需要返回实际像素点的RGB值。

COLORREFSetPixel(intx,inty,COLORREFcrColor); COLORREFSetPixel(POINTpoint,COLORREFcrColor); BOOLSetPixelV(intx,inty,COLORREFcrColor); BOOLSetPixelV(POINTpoint,COLORREFcrColor); 巾估秧问验丸煎哭喝贷浆舆慑轧省雕结报酪粗誓售短者号黑姬牡灾爽娱晤计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.3简单图形绘制

2.画线

LineTo函数正是经当前位置所在点为直线起始点,另指定直线终点画出一段直线的。其原型如下:

BOOLLineTo(intx,inty); BOOLLineTo(POINTpoint);

如果当前要画的直线并不与上一条直线的终点相接,那么应该调用MoveTo函数来调整当前位置。此函数不但可以用于更新当前位置,而且还可以用于返回更新前的当前位置。其函数原形如下:

CPointMoveTo(intx,inty); CPointMoveTo(POINTpoint);若累司虹颊机潞帽瞎突陀藕额额妖缩蕊坠本佐敌昏握屋逞架跋畅井榴度岳计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.3简单图形绘制

3.折线 主要有Polyline、PolyPolyline和PolylineTo3个函数

BOOLPolyline(LPPOINTlpPoints,intnCount); BOOLPolylineTo(constPOINT*lpPoints,intnCount);

这两个函数用于画一系列连续的折线。

BOOLPolyPolyline(constPOINT*lpPoint,constDWORD*lpPolyPoints,intnCount);

此函数可用于绘制多条折线。其中lpPoints同前定义,lpPolyPoints表示各条折线所需的顶点数,nCount表示折线的数目。悠桔坏滴混刀龟嫩惭途胜耀亡蒸椰箱曲用府掘攫镜抉阎深宪寿孙哦夷桓券计算机软件工程基础课件,高等教育出版社,第三版计算机软件工程基础课件,高等教育出版社,第三版8.3.3简单图形绘制

4.矩形和圆角矩形

Rectangle和RoundRect函数分别用于矩形和圆角矩形的绘制,它们的原型如下:

BOOLRectangle(intx1,inty1,intx2,inty2); BOOLRectangle(LPCRECTlpRect);

温馨提示

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

评论

0/150

提交评论