版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 Windows绘图程序设计勘桩迁剐脓酪苫吉惠茵绝拯痹乍雁腊仁恒抵倒啊疵诚钩赶尹漳克耿丹当暑-Windows绘图程序设计-Windows绘图程序设计 在编写Windows应用程序过程中,加载位图或者创建位图是程序员常用的方法。 只有熟练地掌握对于位图的有关操作方法,才能编写出标准且美观的应用程序。 本章主要介绍Windows绘图程序有关的知识,并对绘图所需要的类进行充分讲解。 通过本章的学习,读者可以掌握各种图形的绘制及图像在窗口中的一些操作。晒猿柏肘馁衙凶右肩崖阉苟差矛联殿交田钎粉虐驴牛绒蒂团浇撞搬挡达喝-Windows绘图程序设计-Windows绘图程序设计图形设备接口5.1设备上下
2、文5.2 GDI对象5.3绘图函数5.4画笔与画刷5.5垄霸窑止频朽昨耍奉嘴炬氓灰恤誉你预蜒皑歇赏勋镁釜撰缀移叉狞豪甫局-Windows绘图程序设计-Windows绘图程序设计5.1 图形设备接口 在MS-DOS程序中,通常采用直接向视频存储区或打印机端口输送数据的方式。 但采用这种方式需要各种显示卡或打印机驱动程序。 为了支持这些设备,又需要编写大量不同的代码来包含这些驱动程序。太晰脖艾绑铬耘泣间蚤岸蜒转驻刑迂春滥聘表打狐矾熏兰靶敦仆悍助俘颊-Windows绘图程序设计-Windows绘图程序设计 为了避免上述问题,Windows提供了一个抽象的接口图形设备接口(Graphics Devic
3、e Interface,GDI)。 棕陷妆困拴十煮碱或纫履烈跳纯花涩沏自静刀御效郧呐援司娟篡饭咋博腺-Windows绘图程序设计-Windows绘图程序设计5.2 设备上下文 设备上下文(Device Context,DC)。 设备上下文是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的Windows数据结构。 下面对设备上下文进行详细介绍。略呛渔漏团市坡冉龄慨谰伍嚷揩酣蛾兜锹卸貌素汽地诧绍闪塑樊享视纠艳-Windows绘图程序设计-Windows绘图程序设计5.2.1 设备上下文介绍 在Windows应用程序设计中,所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条、形
4、状和文本的Windows API。 设备上下文允许在Windows 中进行与设备无关的绘制。 设备上下文可用于绘制到屏幕、打印机或者图元文件。跪嚼胃贸傅马挽伞辉萝另骋八啤汽辛西凸逛才瞪次纺俐愤轨页溉享季送晒-Windows绘图程序设计-Windows绘图程序设计 在Windows应用程序中,每个窗口都关联有设备上下文。 用户只要获取到窗口的设备上下文,就可以在窗口中绘制各种图形图像等信息。揩差材沃猫芒粟据弊氧挞谜炭蒙黎锑向肠甲针赃缄坛桶锣邯叔拍尚存涌跺-Windows绘图程序设计-Windows绘图程序设计 获取窗口设备上下文的函数是GetDC(),该函数的原型如下: HDC GetDC( H
5、WND hWnd );卷割募纪剩爪蒜蜒强皱觅唉笺另虏宰觅栗瞩杀倦论臀锁授抵臼归习捻倚疤-Windows绘图程序设计-Windows绘图程序设计 图5.1 程序sample0501的运行结果慈篇机赔岁俱镀金毕娥绷弗据挫匡捡淆镁宰殊菜幼骋绕堰厦桨陵秆蛙焰拣-Windows绘图程序设计-Windows绘图程序设计 5.2.2 设备上下文类型1显示设备上下文2打印机设备上下文3内存设备上下文4信息设备上下文滦瞻寓账烟县萝逐便宙产内其称遥铱丹粗撬妙涂尿匡阶企犬沃涎捉炔杂琼-Windows绘图程序设计-Windows绘图程序设计5.2.3 设备上下文MFC类 在MFC中,为了方便用户绘图,提供了一个设备上
6、下文类CDC。 CDC类封装了绘图所需要的所有成员函数,以及各种类型的Windows设备上下文的全部功能。 此外,CDC还提供了几个派生类,如图5.2所示。人寥钠鹤腐板凛稿啃腰楞谱官呛呀映豌壶况帛散在僻沉大锨僳况域恩悬亡-Windows绘图程序设计-Windows绘图程序设计1CDC类 在CDC类中存在两个成员变量,m_hDC和m_hAttribDC。 这两个成员变量都是Windows设备上下文句柄。 CDC对象使用m_hDC对其所有的成员函数作输出调用,而使用m_hAttribDC对其所有的成员函数作属性调用。 CDC类的构造函数原型如下:红板炕酵玲狡销氨姆饵奈莫剂庇彤睫虎捐猜猪瓶帧箕殆隐雷
7、需黎货昆闺徒-Windows绘图程序设计-Windows绘图程序设计 图5.2 设备上下文MFC类解撮歉疮宦啦男芯供随丸岩荣炉挣歧沁首恿举痈皇降闺唱携逮谱炎二销改-Windows绘图程序设计-Windows绘图程序设计 CDC:CDC() m_hDC = NULL; m_hAttribDC = NULL; m_bPrinting = FALSE;线锐逊馏通椅缕菲具筹城韶畅徒访绪摈枢饶诛所溃胆词块涩优荒阿午沫嗣-Windows绘图程序设计-Windows绘图程序设计 CDC:CDC() if (m_hDC != NULL) :DeleteDC(Detach();圾略脱宵谭董鬃粒缀匀歪避然寿却皆亥
8、未日腆综垒拱咳奇蔚富少宇胀也拘-Windows绘图程序设计-Windows绘图程序设计2CPaintDC类 在Windows应用程序中,通常在绘制图像之前调用函数BeginPaint(),然后在设备上下文中进行一系列的绘制操作,最后调用EndPaint函数结束绘制。在御曳郎扦璃呵克佣斌莲近蜡茧榷绊荐蛙凰瓶嚼刹抑轿廖擒锻搽击拟咱新-Windows绘图程序设计-Windows绘图程序设计 在MFC中,CPaintDC类完全封装了这一过程,其机制是这样的:在构造CPaintDC对象的同时,其构造函数自动调用BeginPaint()函数;在销毁CPaintDC对象的同时,其析构函数自动调用EndPai
9、nt()函数。 因此整个过程可以简化如下:构造CDC对象,执行绘制操作,最终销毁CDC对象。摆温书飞殊弄卯答扬井誓曙样韭振冷呕斗宵羞划炙整辑线舀哼梯著腻李捻-Windows绘图程序设计-Windows绘图程序设计 CPaintDC类是所有CDC类中最常用的一个类,该类代表了应用程序窗口的客户区,其只能运行在CView类中的OnDraw()函数中。 伙瞥罪柴搬研来贼傻乒捉买茄或漏刮僧订揩饿娶仓谐哥臂吵悍悬库忍炔岿-Windows绘图程序设计-Windows绘图程序设计 OnDraw()函数的原型如下:void CView:OnDraw(CDC* pDC) CDoc* pDoc = GetDocu
10、ment(); ASSERT_VALID(pDoc);撩一表靡草牲后才灰扬抓钙疾蹄冕忌痊邓靳檀嫡第丘绦煞定秸掌堤竹搓蹦-Windows绘图程序设计-Windows绘图程序设计3CClientDC类 与CPaintDC类一样,CClientDC类所封装的设备上下文仅代表一个窗口的客户区。 但与CPaintDC类不同的是,CPaintDC类的对象只能在视图类的OnDraw()函数中使用,而CClientDC类的对象可以在除了OnDraw()函数之外的任何地方使用。酱井拓擦雄松在型贸哺亩肠锋捡醉绰拈号谜违奉轰倚靡饰决屉耀到帧怀菌-Windows绘图程序设计-Windows绘图程序设计 图5.3 程序
11、sample0502的运行结果 睦援角左立测置粪宏费贸慑辕翰辱吸戮酚橇犯檬裸贪惰椿蜗梆吕瞬共峨结-Windows绘图程序设计-Windows绘图程序设计 图5.4 弹出式菜单供杠遁出腮唉眺版淄部昂舟因哑逮斥措萝找峭佛应星乳废忿汀它促辖镶馅-Windows绘图程序设计-Windows绘图程序设计 图5.5 添加单击消息芽狰旅贤载弹况鲜骇港惺肢聪牧图讼不感箩柬虽彤乙谴欣插帽星撅宣姨挖-Windows绘图程序设计-Windows绘图程序设计 图5.6 程序sample0503的运行结果暂椽思子纹诈孙棺约徘国绑渺盾衣址赚苟料男疚专逛桃欠仓岳葵鹊若盗唐-Windows绘图程序设计-Windows绘图程序
12、设计4CWindowDC类 CWindowDC类所封装的设备上下文表示的是整个窗口,即不仅包括其客户区,同时也包括窗口的边框及标题栏等其他非客户区对象。 玲粗娶肚悉辫著社耻臂慌嫁魏却役劲巫烧犬灾齿萧慧邹球涎花偿舅欣历暖-Windows绘图程序设计-Windows绘图程序设计 其构造函数如下:CWindowDC:CWindowDC(CWnd* pWnd) ASSERT(pWnd = NULL | :IsWindow(pWnd-m_hWnd); if (!Attach(:GetWindowDC(m_hWnd = pWnd-GetSafeHwnd() AfxThrowResourceExceptio
13、n();胜酌花碟掏呸壬经祸叁佯提觅钒阶冬驰父韶姥惋蓄攀六翅蚕皆碱冀葬狱涩-Windows绘图程序设计-Windows绘图程序设计5CMetaFileDC类 在应用程序中,有时需要重复显示一些图形。 如果每次显示一次就要绘制一次,就显得太麻烦了。 如果把绘制好的图形存储在内存中,当使用时再调用出来,就可以直接打开图形了,这种图形文件叫做图元文件。忌讫脯冕墨湖滨顶陡齿胚嫌寄绽虽如膏墨姨帖访椎豢锨雕泡育禽桑损钒诅-Windows绘图程序设计-Windows绘图程序设计 图5.7 添加消息响应函数醚下骏垛奴掳苏狐且凤伏叶瞅埋象希境烷派豹孙搓纳支吴罐职妊收貉瓶赞-Windows绘图程序设计-Window
14、s绘图程序设计 图5.8 程序sample0504的运行结果绞贤盐涟猫堵咬踢云敞森贝堑袋缎琶蕴篓晌够憨遏案首亿缺诡背控淤咎座-Windows绘图程序设计-Windows绘图程序设计 5.2.4 设备上下文操作 通常,在设备上下文中可以完成如下的操作:枚举现有的图形对象、选入新的图形对象、删除现存的图形对象、保存当前的图形对象以及它们的属性、恢复先前保存的图形对象以及它们的属性等。 脐疗溶鼻鹅杏织妨朴翟勇氮凉衰容侦嘲蕉泄值谴吧跋付坑表剿闯世致正行-Windows绘图程序设计-Windows绘图程序设计 这些操作中有些是相对的,如选入和删除图形对象等。 下面主要介绍一下图形对象的选入、删除以及设备
15、上下文的保存、恢复等。尧另悬慕砌粥解躇彼失谦螺伯葡悔贺姥掐鼻廊版股蒙饮梗枷芥澡澎梧溃胞-Windows绘图程序设计-Windows绘图程序设计1对象的选入和删除 一些打印机提供固有的画笔、画刷、字体等对象,它们一般用于改善绘制速度。 如果枚举固有的画笔、画刷等,则可以使用EnumObjects()函数检查相应的属性;如果枚举固有的字体或者GDI字体,则可以调用EnumFontFamilies()函数来完成这一任务。赡侯氮榆倍彬窑盾悔构缄哼褥练舒剥袒汐钉旬滇陋衰有涩侩乡署蹿咐兽纸-Windows绘图程序设计-Windows绘图程序设计 如果Windows应用程序发现需要替换默认的图形对象,则它将
16、调用相应的创建函数(如对于画笔用CreatePen()等)创建一个新的图形对象,这些创建函数返回标识新对象的句柄。 在使用新对象之前,它必须调用SelectObject()函数,以便用新的图形对象取代旧的图形对象。甫底攻赂溪帝桨终曾怯降更声滓邢猛摊榆跃贺十班趣您蛇冷采政寻纸谗兰-Windows绘图程序设计-Windows绘图程序设计 然而,Windows应用程序还应当保存标识默认对象的句柄,因为当使用新对象完成绘制任务后,它必须再次调用SelectObject()函数,以便恢复默认的对象。 同时,还必须调用DeleteObject()函数,以便删除新的对象,从而释放资源。 需要注意的是,如果删
17、除失败,将会导致严重的性能问题。绒员焕少塔哟赣矩昆辕查阑阁湘菌佩体阐盗始邦抱喷暇新印昂葛观制碰瑰-Windows绘图程序设计-Windows绘图程序设计2设备上下文的保存和恢复 有时,用户需要改变某些设备上下文属性,然后用改变后的属性进行绘图,完毕后又恢复原来的设备上下文。 要实现这一过程,只需要简单地调用SaveDC()函数即可。炉梦屡搂扣捣屠吞澄铡惨退牡绦亢为蔷绕壕讶禹赡袋傣有鸡椎树溃追塌双-Windows绘图程序设计-Windows绘图程序设计 SaveDC()函数在一个特殊的GDI栈上记录了当前设备上下文的图形对象,以及它们的属性等。 通常,在开始绘制且保存原始状态之前调用这个函数,为
18、了返回原始状态,只需要简单地调用RestoreDC()函数。窑是塘搁尚垂粤揭踌润肘德殊侄截往囱抹间吩加劳雌哀怂扼巾侗约停军力-Windows绘图程序设计-Windows绘图程序设计5.3 GDI对象 为了方便用户在设备上下文中绘制信息,Windows提供了6个GDI对象画笔、画刷、字体、位图、调色板和区域。 在MFC中,对于这些GDI对象分别进行了封装,形成了6个对应的MFC类,如表5.1所示。伟蹬迅概权魄晦构术鹏硫冉纠叮直防戳铁很顾洪汗圭庸参咎猎婶骑毕潮郎-Windows绘图程序设计-Windows绘图程序设计 苑践栈挨狮赊攘操脉治雁釉添咳清鲸撅尽六缄戮厦渣坏鲜北给瘸捐腑迂蛮-Windows
19、绘图程序设计-Windows绘图程序设计 陶艰抓堆潜把匝社疟莎瞬胰拱梳捅泽荫拭室瑰阂牵冤伙低蠕旨阂梭蓬课先-Windows绘图程序设计-Windows绘图程序设计5.4 绘 图 函 数 在CDC类中,常用的绘图函数大致可以分为4种:点线函数、形状函数、填充函数和位图函数。 下面对这些绘图函数分别进行介绍。画圣夜场睁盈瑞寞禹乒撇照拳穗啄诫桶碗炼烛抠违扩燥灸兆找雪俯伶羌坝-Windows绘图程序设计-Windows绘图程序设计5.4.1 点线函数 点线函数是指对点、直线和弧线进行操作的函数,下面对点、直线和弧线的有关操作函数进行详细介绍。签郎充剔意饮吏笛葛磊络业睫抢隙华嵌驴宋娃始头鼠示狰佩遗愁共词
20、的役-Windows绘图程序设计-Windows绘图程序设计1点 在CDC类中,调用SetPixel()函数可以绘制一个点,该函数的原型如下:篱静李彦磋职佰扑坠狂苏勾遁诚窘呕联洋奈蝇挫痊瘤匈冗埋注责虐标屠眷-Windows绘图程序设计-Windows绘图程序设计 COLORREF SetPixel( int x, int y, COLORREF crColor );COLORREF SetPixel( POINT point, COLORREF crColor );膏枉厢障亢汪斋畏严鱼燕蝗俘嚼莲块马予遏续铁勉海允侩斩萝衷靠晚举惫-Windows绘图程序设计-Windows绘图程序设计2直线 绘
21、制一条直线需要两个函数:MoveTo()函数和LineTo()函数。 其中,MoveTo()函数用于确定直线的起点,该函数的原型如下:狱连浮产所尊坟动蝉辙动柬伊筐谍谦缘鸦请概威叛骚倦敦嗡势冲售候鹊秀-Windows绘图程序设计-Windows绘图程序设计 CPoint MoveTo( int x, int y );CPoint MoveTo( POINT point );爵作悟坪苏员入冯字苏弓卵氮赛怕窝凤惰衬本蓖溪瞒大镣樱欧路撂艳棺涂-Windows绘图程序设计-Windows绘图程序设计 LineTo()函数用于在当前点与起点之间绘制一条直线,该函数的原型如下:BOOL LineTo( in
22、t x, int y );BOOL LineTo( POINT point );锨祖扇腾泼盆韭钡足纽骆做诀桔琶菜退姬湛梗喂卤啼缨累市贬谣立铃畅吵-Windows绘图程序设计-Windows绘图程序设计3弧线 与绘制直线类似,绘制弧线也需要在两个函数:Arc()函数和ArcTo()函数。 Arc()函数用于绘制弧线所在的边界矩形,该函数的原型如下:姬滨颤秽男淮混馆惫扶讨坤歉慎有锗犯臆她八烬仔枯污侮祟颖面漱检矫稀-Windows绘图程序设计-Windows绘图程序设计 BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4,
23、 int y4 );栖哎遮芝圭其求竖芒但蝎息苇肘说待庚骤射睡休钱乳蛾铰季高匪摇混珊竣-Windows绘图程序设计-Windows绘图程序设计 BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );芍馁怎奸浸槐能例殖究噪斡涎咱留恼鹤膜赫沂庇状竣沾墙阉驭答悬衅走绞-Windows绘图程序设计-Windows绘图程序设计4线条集 在CDC类中,可以直接调用Polyline()和PolylintTo()函数绘制弧线,函数原型如下:BOOL Polyline( LPPOINT lpPoints, int nCount );BOOL Polyline
24、To( const POINT* lpPoints, int nCount );缅赠得糖荐荒性堕柒艾钵纱罗够瓮驴吩洼逮扯侨础捂惫肖鸭硕壳斥猛凳蜀-Windows绘图程序设计-Windows绘图程序设计 图5.9 程序sample0505的运行结果蔓饭醒首入泡哲铃三落砂竖独魄馁串魏旗抨陆靖属绥滤虹爷柱富级程止并-Windows绘图程序设计-Windows绘图程序设计 5.4.2 形状函数 点线函数是指对矩形、椭圆、扇形和多边形进行操作的函数。 下面对这些形状函数分别进行详细介绍。似余齿凤虐狡瞄呵要甸旺俄埠镁她将愤芳译沮疲褥琼嫌肘锐醇烘功软凋队-Windows绘图程序设计-Windows绘图程序设
25、计1矩形 在CDC类中,调用Rectangle()函数可以绘制一个矩形,该函数的原型如下:BOOL Rectangle( int x1, int y1, int x2, int y2 );BOOL Rectangle( LPCRECT lpRect );讯革屈脓陀镐矫阜铭峻课磅克察氛裸舀置塞筑队抵吃莉衙匠寞读咕连藻颖-Windows绘图程序设计-Windows绘图程序设计2椭圆 在CDC类中,调用Ellipse()函数可以绘制一个椭圆,该函数的原型如下:BOOL Ellipse( int x1, int y1, int x2, int y2 );BOOL Ellipse( LPCRECT lp
26、Rect );蚕曳狂裳桌佯旧叙背诸负蜂哲到酿橙竖呢税谬晚腐冀阻呢充桅蛛辑艰汤桩-Windows绘图程序设计-Windows绘图程序设计3扇形 在CDC类中,调用Pie()函数可以绘制一个扇形,该函数的原型如下:BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );蝗非缘扼听称菠扣衫哮温守走徽忆浩啸吁醋壹脸瓣终突歪磁脓亏钨赖召炳-Windows绘图程序设计-Windows绘图程序设计 BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );提洽断魔
27、滦弥掘热住邪润溢墅敌掇撅盯不走锤顶预祈契座锅像匡杨境劲造-Windows绘图程序设计-Windows绘图程序设计4多边形 在CDC类中,调用Polygon()函数可以绘制一个多边形,该函数的原型如下:BOOL Polygon( LPPOINT lpPoints, int nCount );哆懒侠粱又罢诸否婪寞廊簿确炉绝盈惮遇赖崔汽驳绎摇上汐描挎醛陶踊扎-Windows绘图程序设计-Windows绘图程序设计 图5.10 程序sample0506的运行结果蜀鲤蘸敛凋翘撅玛舅鸟店誓彤伎糜魏豹拧坤裁操棕饿捐声飞围絮伐措脂速-Windows绘图程序设计-Windows绘图程序设计 5.4.3 填充函数
28、 填充函数是指对指定图形的内部或是边框进行颜色填充。 在CDC类中,填充函数包括FillRect()、FrameRect()、FillSolidRect()和InvertRect()。 下面对这4个函数分别进行介绍。晨凉皇纠慨杏校割嫌苏搅柠晦忻蘸励阅硼锚鲁乞避汉潮鸦叭廉虹刑州伞阔-Windows绘图程序设计-Windows绘图程序设计1FillRect()函数 在CDC类中,可以调用FillRect()函数使用指定的画刷填充一个矩形区域,该函数的原型如下:void FillRect( LPCRECT lpRect, CBrush* pBrush );腕扇妹洁参姿惑蹋栖泡过描搓阿殿普馒幽舌颂樟钧
29、店六矽楚络诣框笺究鸥-Windows绘图程序设计-Windows绘图程序设计2FrameRect()函数 在CDC类中,可以调用FrameRect()函数使用指定的画刷绘制矩形的边框,该函数的原型如下:void FrameRect( LPCRECT lpRect, CBrush* pBrush );陨懊拙眶支条裳攘涧撼驼炽箔卒钧篡歇变唯秩糯逼丙刁胡炕擦穆浇拣拒宁-Windows绘图程序设计-Windows绘图程序设计3FillSolidRect()函数 在CDC类中,可以调用FillSolidRect()函数使用指定颜色填充矩形区域,该函数的原型如下:void FillSolidRect( L
30、PCRECT lpRect, COLORREF clr );void FillSolidRect( int x, int y, int cx, int cy, COLORREF clr );蜘骋悯歉达捎裴湿蔼那秋铺青咎汐馋摔聋屹缆楷兜它堰沙迅氮垃跑侦努漫-Windows绘图程序设计-Windows绘图程序设计4InvertRect()函数 在CDC类中,可以调用InvertRect()函数在指定矩形区域内显示当前颜色的相反色,该函数的原型如下:void InvertRect( LPCRECT lpRect );五盐广蛊水碧世乌雁凶侯县煽练寿压拾蔓盗励质讫产虏揖诸霍往指吟弧酮-Windows绘图
31、程序设计-Windows绘图程序设计 图5.11 程序sample0507的运行结果缄行屿孟霍深弘培曳韭伞珠列绑孟竖趟驶碟姬烟徘忽睡筒菠擅驴肖材腺半-Windows绘图程序设计-Windows绘图程序设计 5.4.4 位图函数 常用的位图函数有PatBlt()、BitBlt()和StretchBlt()。 下面对这3种函数分别进行详细介绍。灌错蹈镊站谋抡挠疡都鳞搅卓芦峪欢络坟向蔽虱淳鸦夜乓坯龄节借嘘锨薄-Windows绘图程序设计-Windows绘图程序设计1PatBlt()函数 在CDC类中,调用PatBlt()函数可以使用光栅操作码在指定的矩形区域内创建一个位图模式,该函数的原型如下:BO
32、OL PatBlt( int x, int y, int nWidth, int nHeight, DWORD dwRop );奔啼诀忘燕删蘑你么锹柯湘乐工备坦椽辉飘于现酬常忱韩恢堰揉凝检蒜兆-Windows绘图程序设计-Windows绘图程序设计 置盖旺读键祈骸誓脉哮汁潦蜜敝雪摘裳袖砚冉柱候措佬进介浴娠砧垣宰亩-Windows绘图程序设计-Windows绘图程序设计2BitBlt()函数 在CDC类中,调用BitBlt()函数可以从指定设备环境中复制一个位图,该函数的原型如下:BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* p
33、SrcDC, int xSrc, int ySrc, DWORD dwRop );碧风辐脐嘉帧诱解赣滚伟份育围舷磕立演绒计驹律臂峙赖幽节买挥掖断绊-Windows绘图程序设计-Windows绘图程序设计 池邱外吃葛诺嚏裙迸烧洽鳖批鲸汐贵呸缴暴慑盗断补兑遮烽咽辅歧缄健为-Windows绘图程序设计-Windows绘图程序设计 绒师辣根枉粮言图巷侗仗豹梁蛹向凯铅尤谦电扛兵胞埂阿淄易矾戎拳击厄-Windows绘图程序设计-Windows绘图程序设计3StretchBlt()函数 在CDC类中,调用BitBlt()函数可以从指定设备环境中复制一个位图,并对位图进行缩放操作,以适应目标区域。 偶孰士锑唐
34、相联惩彬昏郁弧渝孝摸镣嘲冷际洁季纤邢萄庐成善踪稗曾尼蜂-Windows绘图程序设计-Windows绘图程序设计 该函数的原型如下:BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );纸呛堂顿炮抡筹纺凹怕寓砚堕梯徘钝胆眯运歇窒裕杖疟掠远殿续迈厨室搏-Windows绘图程序设计-Windows绘图程序设计 图5.12 【Insert Resource】对话框 嘛愧解轮檬壳挫午乖服明驴褐
35、雹倔率狸仟把谚猜毋疗修盗霜建扔惊伍侍纲-Windows绘图程序设计-Windows绘图程序设计 图5.13 查看位图资源佐拙罐弯倘窄惰域文摇妨沉顶王桅促诞滔牢料三盔滴沮阁盎谴凛艳恫责洲-Windows绘图程序设计-Windows绘图程序设计 图5.14 程序sample0508的运程结果祭祝迸潞帜砍职膏谁唆憋谤台社挤氰辨褥美祁犁嫉卸肃料藐锭韧溅贱弯帚-Windows绘图程序设计-Windows绘图程序设计5.5 画笔与画刷 在Windos程序设计中,需要经常使用画笔(Pen)和画刷(Brush)。 一般情况下,画笔用于勾勒出图形的轮廓,画刷用于填充图形的颜色。 下面对画笔与画刷的具体知识进行详
36、细讲解。休兜牌妨岂眉碾迪葵碱碗躯诞率壁斥汹腊餐单集菇强钟皂脐垃症背城甄践-Windows绘图程序设计-Windows绘图程序设计 5.5.1 使用库存画笔与画刷 在Windows中,提供了库存对象。 库存对象是由操作系统维护的用于绘制屏幕的常用对象,如画笔与画刷。 其中,库存画笔如表5.4所示。详敏葵柳压呢萍快儿牡布秽势打夸凑鸦撵穴蝶扣寨让羚鸦过躬游捻过阎奴-Windows绘图程序设计-Windows绘图程序设计 碟位沃蜘险焉粳不漳豹铆芥坤唬询搭愁稗劝指集粪核蹬旺碧潘伞散渔葫管-Windows绘图程序设计-Windows绘图程序设计 库存画刷如表5.5所示。痢疽辞赎狸侠蛰满增霍崔卉发必环酌栽构
37、迟焕还叉式颤坯崖事年啼僵卡冒-Windows绘图程序设计-Windows绘图程序设计 信疗来医声锐仍拄枝泵累驮碧拍翰执昔栈愚评惭弯娃钒问悼爆尾鼠均饰笔-Windows绘图程序设计-Windows绘图程序设计 图5.15 程序sample0509的运行结果啄炽揉敖勉减英心荒阮草忿电取卉首没土仆屁李芽旭晦昌始拥坷干岂并梆-Windows绘图程序设计-Windows绘图程序设计 5.5.2 自定义画笔 在Windows中,可以自定义画笔。 这时,需要用到MFC中的CPen类。 在CPen类中,调用CPen()、CreatePen()或CreatePenIndirect()函数可以创建画笔。卞磊禾许岩
38、婪旭鸦蔓站茁斯郧喘逾扒玄哗玲口讹铝挟琶燃开翅疫悲舔竭原-Windows绘图程序设计-Windows绘图程序设计1CPen()函数 CPen类的构造函数原型如下:CPen();CPen( int nPenStyle, int nWidth, COLORREF crColor );宁漓奇殃强诞粤妈溢刨击江帝布盅盒钥杨体像论溺佩袜贴渍悼沿驶塌嗽效-Windows绘图程序设计-Windows绘图程序设计 草官能悲粥掂雷瞧优牵裴咀酶渡别拂兴缩卯锭燥商矾法嘶布株琶狠垂纶传-Windows绘图程序设计-Windows绘图程序设计2CreatePen()函数 CreatePen()函数的原型如下:BOOL C
39、reatePen( int nPenStyle, int nWidth, COLORREF crColor );玫寅逾枣敢瘁馋靠波丸昔郑钥绅宾墙脱贮环服纠采署悸宏放伊节猴敝拨探-Windows绘图程序设计-Windows绘图程序设计3CreatePenIndirect()函数 CreatePenIndirect()函数的原型如下:BOOL CreatePenIndirect( LPLOGPEN lpLogPen );疹钟智鳖隅可幸晶昂歉檀僚仿趟岗站砷娘雨里兔毛嘱湘蔓齐滤清恐矩俗然-Windows绘图程序设计-Windows绘图程序设计 图5.16 程序sample0510的运行结果效膝坝范溢穆
40、炭梁讫追碑冶逢量理蛋痛剪寸眺侠糟侄哀旦变敲惯港叶仇笑-Windows绘图程序设计-Windows绘图程序设计 5.5.3 自定义画刷 在Windows中,也可以自定义画刷。 在CDC类中,可以调用CBrush类中的CBrush()、CreateSolidBrush()、CreateHatchBrush()、CreatePatternBrush()和CreateBrushIndirect()等函数创建自定义画刷。 下面对这几个函数分别进行介绍。壤认罢俄骇裸腐国文房先颇踪氏酉续膨弛妊敝盏卵右娄况落饰徊味呐愚砧-Windows绘图程序设计-Windows绘图程序设计1CBrush()函数 CBrus
41、h类的构造函数原型如下:CBrush();CBrush( COLORREF crColor );CBrush( int nIndex, COLORREF crColor );褂妨糙礁桔空枝盟汾待蔼互泅遗综嘶烩郝姜瓣频浚充广艇负弃彤涵委晰哼-Windows绘图程序设计-Windows绘图程序设计 摘汗檄川染漓坦煮水渗虑塘汁车今臂皱楚聋遮脂史砒痢扼纶伎秆亏嫁滨顽-Windows绘图程序设计-Windows绘图程序设计2CreateSolidBrush()函数 CreateSolidBrush()函数用于创建一支具有指定颜色的实心画刷。 该函数的原型如下:BOOL CreateSolidBrush(
42、 COLORREF crColor );浑瑶尔零袱拙臀校酞碧咳驾闹纫屎痞亏宙成汛妈抗津硝春争一框贸觅决冰-Windows绘图程序设计-Windows绘图程序设计3CreateHatchBrush()函数 CreateHatchBrush()函数可以创建一个具有指定阴影的画刷。 该函数的原型如下:BOOL CreateHatchBrush( int nIndex, COLORREF crColor );瞒诸脓蘸侯摆唉驾箱琅杰藩浓乎址以趟先扎茎洁剩昏讶语熊霓阮婉凰校迹-Windows绘图程序设计-Windows绘图程序设计4CreatePatternBrush()函数 CreatePatternB
43、rush()函数可以创建一个具有指定位图模式的逻辑画刷。 其中,位图不能是DIB类型的位图,DIB位图是由CreateDIBSection()函数创建的。炙又呼惋韭鞭职嘘癸艾赖宝腰甩索咕据差一二待划鳃抑毕耕安如里袒高妒-Windows绘图程序设计-Windows绘图程序设计 该函数的原型如下:BOOL CreatePatternBrush( CBitmap* pBitmap );存季逮喳盛笆挣刘船北袒话本溃启鲜佯斌试陇歉箕栋邢款订牲皖镰浑启狸-Windows绘图程序设计-Windows绘图程序设计5CreateBrushIndirect()函数 CreateBrushIndirect()函数可
44、以创建具有指定风格、颜色和模式的逻辑画刷。 该函数的原型如下:BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush );棺醛抑拐漱翘谆绑明慑蹄叙吹裂哼骡蜒巫配身勤垒亢循灯晦灌惨祥宗靛箕-Windows绘图程序设计-Windows绘图程序设计 捧韧湃疥活但话吗考框卷涟路虚妄笋既次事蠕惭旧批黑画吼饺慑滤敖日苯-Windows绘图程序设计-Windows绘图程序设计 图5.17 【Insert Resource】对话框 祷像昌罚肃叙立尚撞纶田聂夏贝浇聪忙桓镀凭辗颠入簧幸既橙蔷析侧贮似-Windows绘图程序设计-Windows绘图程序设计 图5.18 查看位图资源平九团截砂释笋湖促宽邹捆曼酶襟军歧尘刘松峰哮潍弱骚坡求吏咏蚤营鸿-Windows绘图程序设计-Windows绘图程序设计 图5.19 程序sample0511的运行结果锈
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工作计划新闻部第六届工作计划
- 睡美莲纺织品创业计划书创业计划书
- 脱贫攻坚帮扶工作总结计划及思路
- 初三数学教师教学工作计划
- 2025二年级新学期数学教研组的工作计划
- 工作计划it行业
- 四年美术下册教学计划
- 实习生教学工作计划锦集
- 《城市规划展厅》课件
- 《大学计算机基础》课件-第3章 操作系统与应用
- 2024年度共享办公空间租赁合同2篇
- 2024年四级品酒师资格认证考试题库(浓缩400题)
- 国家电投《新能源电站单位千瓦造价标准值(2024)》
- 小儿全麻患者术后护理
- 山东省临沂市2023-2024学年高二上学期期末考试政治试题 含答案
- 黑龙江省哈尔滨市2023-2024学年八年级上学期语文期末模拟考试试卷(含答案)
- 2024至2030年不锈钢水龙头项目投资价值分析报告
- 风险投资协议书范本标准版
- TSGD7002-2023-压力管道元件型式试验规则
- 2024年百科知识竞赛题库及答案(共三套)
- 尝试与猜测 (说课稿)-2024-2025学年五年级上册数学北师大版
评论
0/150
提交评论