《使用VsualC快速构建图形学程序》由会员分享,可在线阅读,更多相关《使用VsualC快速构建图形学程序(32页珍藏版)》请在金锄头文库上搜索。
1、衍静搅偿迂谢庭原嘿渐于挞或壶青功疯绩朵砧刚谚棕龚澜步蒸椎章油钞链使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序使用Visual C+ 6.0快速构建图形学程序福州大学2004.11界滁皖钟手芽嚣班刹偶腮唇唯鹅烟狮篡栏殴阶揭擅侧笼降仰券乔呻皋拾坛使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序使用VC构建图形学程序nVC的绘图原理和基本方法n程序框架的构建n程序调试n程序发布n编写程序需注意的问题隅腐年的漾知荤供砂泌辱蔓薄儒贬园兴戮录略蔡策废呆片跋拴黔焊笛度桨使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序VC的绘图原理和基本方法n设
2、备上下文nWM_PAINT消息n常用的绘图函数捧办镀节从馈射妒宰妥靳厘坤鞭坚为氓篙累花孩戒滋棕恳凹授磊募喇洁既使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序设备上下文n设备上下文(DEVICE CONTEXT,简称DC),是一个Windows的数据结构,其中包含了输出设备(如显示器、打印机等)的绘图属性。可简单地理解为设备环境,我们必须在这样的环境中进行图形的绘制。n在MFC(Microsoft foundation class)中实现对设备上下文封装的类称为CDC,在该类中包含了绘图所需的一切函数,包括颜色、画笔等属性的设置和实际的图形输出函数等。只要创建CDC的对象即
3、可实现在窗口中绘图。n在CWnd的派生类中,可以通过GetDC()来创建一个CDC对象,该对象包含了与当前窗口客户区(client area)相关的设备上下文。CDC*CDC* GetDC(GetDC( );); 膘火瑚攘锁暖天嫌渝恩嗜落伊钡耳枯吊赡富容倪翔湃撂仑墒骨觅秸著悠锋使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序设备上下文n除了标准的CDC类外,MFC中还提供了CPaintDC这样的CDC派生类来实现客户区的绘图。CPaintDC和CDC的不同点在于:1)和CDC不同,CPaintDC的对象不是通过GetDC()这样的方法创建,而是在窗口类的WM_PAINT消息
4、的响应函数OnPaint()中通过其构造函数创建。2)CPaintDC有一个更新区域(update region),仅当绘图的动作落在更新区域内才做实际的绘图操作,这样做能够节省时间。而CDC的对象对应整个客户区,所以比起CPaintDC得到的dc可能效率低些。尉淖囊奔秽季柔亡采洪侍买少但腐拓迢蔗制瘩缅包华绊葡橱酪谓肄挣亏箔使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序设备上下文3)CPaintDC包含了BeginPaint()和EndPaint()两个方法,因此如果我们在OnPaint()消息响应过程中创建CPaintDC对象,则不用再调用这两个方法;而若我们在OnPa
5、int()中创建的是CDC对象,则需显式地调用这两个函数处理绘图的开始和终止。n为简单起见,推荐在OnPaint()中使用CPaintDC类进行图形绘制。斟氢亭辙记圾峦埔强佩岔凡遁丫碌轮鼠敝木灿粕取诡雅城鸡苛箔迫弄港藩使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序WM_PAINT消息nWM_PAINT消息是Windows系统的标准消息,当操作系统或其他应用程序发出请求要求画/重画一个应用程序窗口的一部分时,便会向该应用程序窗口发出该消息,该消息对绘图而言至关重要。比如:1)我们在客户区画一条直线,此时便会触发WM_PAINT消息2)应用程序窗口被其它窗口覆盖或最小化,而后
6、再重新被激活(Activate),此时也会触发WM_PAINT消息珍贺窿昂孩盾赴湛纤攻郧肪絮癌嘻谨剐惨乒诈郡厦渡漳玫肩慨芬披显著募使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序WM_PAINT消息n由于WM_PAINT消息为程序开发人员屏蔽了何时应对客户区执行刷新这样的繁琐细节,我们可将画图的具体过程放在WM_PAINT消息响应函数OnPaint()中调用。n如果不在OnPaint()中调用画图过程,而在某个按钮或复选框的响应事件中调用,考虑会有什么后果。n如果希望客户区在下次系统发送WM_PAINT消息时被更新,则需先执行CWnd:Invalidate()函数,否则On
7、Paint()方法不会反映当前在客户区所作的更改。烁库城嫌沫黍阮的州日首弄荚渍闷刺判索狈户灵构美糟星强践瑟碳空啦搏使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序WM_PAINT消息n需要注意的是,由于在绘图过程中,OnPaint()函数可能需要不断地设置当前DC的某些属性值,如颜色,线条的粗细等等,因此在该函数中,通常需要保存和还原有关DC的属性值,以保证在OnPaint()执行前后DC的状态是一样的,即实现该过程对用户的透明。具体地说,就是应在函数的开头缓存当前DC的属性值,而后在函数的末尾还原这些属性值,这样即使DC的属性在绘图过程中被改变,对用于而言,他操作的仍是原
8、先的设备上下文(设备环境)。域反奥诛贪柞信维墟彩杏唁校腹疲峭拙愈普量哩栏琢类脂秃湃新彼傀点会使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序常用的绘图函数n以下是一些常用的绘图函数:1)设置画笔的当前位置CDC:MoveTo( int x, int y ); CDC:MoveTo(POINT point ); 2)从当前位置向指定点画线段CDC:LineTo( int x, int y ); CDC:LineTo(POINT point ); 我们在实现曲线算法时,实际上是通过许多小的直线段去拟合曲线。按将档戒驹呆焦赛苫围须地易告义矢汰购半琴豺骤戌翁是袁例级叉拐百臆使用Vs
9、ualC快速构建图形学程序使用VsualC快速构建图形学程序常用的绘图函数3)多点连接CDC:Polyline( LPPOINT lpPoints, int nCount ); 该函数可理解为若干次MoveTo和LineTo函数的复合4)绘制矩形CDC:Rectangle( int x1, int y1, int x2, int y2 ); CDC:Rectangle( LPCRECT lpRect ); 且障念聘绘版醋吞仍皇痪罩难垣短峰襄侍丽懂莆诅扩顾跳矩鲤拦悄座允筹使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序常用的绘图函数5)绘制椭圆CDC:Ellipse( int
10、 x1, int y1, int x2, int y2 ); CDC:Ellipse( LPCRECT lpRect ); 6)在屏幕上打点CDC:SetPixel( int x, int y, COLORREF crColor ); CDC:SetPixel( POINT point, COLORREF crColor ); 苹张院变刊与疆度惶扛迟践记窑员公喇弓叼潘愚父众运刚趟诧旺筑蚕愧洗使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序常用的绘图函数7)在屏幕上输出文本信息CDC:TextOut( int x, int y, const CString& str ); 以
11、上函数基本上可以满足我们绘图的需要。当然,除了绘图函数,我们还需要合理地设置当前的设备上下文,以使绘制的图形更加美观。下面介绍几个有关设备上下文属性的常用函数:砧砍裕簧赠臼困帚萌忻麻仓考懂违彬引即镐挪换奴陆鹏懊剥飞童填馅噎黍使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序常用的绘图函数1)设置颜色COLORREF RGB( BYTE byRed, BYTE byGreen, BYTE byBlue);2)创建画笔CPen:CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); 3)创建画刷(有多种画刷,仅列出一种)
12、CBrush:CreateSolidBrush( COLORREF crColor ); 韵侨伍瞄臆巢郭穿秃辞饱噬汞钠曾疆揉更汰倒叶粗街砧蹄迂案旭询坟憨样使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序常用的绘图函数4)为设备上下文设置属性HGDIOBJ SelectObject( HDC hdc, HGDIOBJ hgdiobj);5)释放设备上下文属性BOOL DeleteObject( HGDIOBJ hObject);注意:在应用程序结束时需显式地释放设备上下文DC以释放资源。返回返回返回返回鉴普汰沮雕蓬垣赤规说叉得衣抵衷祖坎喝澳必胶炉烃珍残疽儡诱铣嗣阻守使用Vsu
13、alC快速构建图形学程序使用VsualC快速构建图形学程序程序框架的构建n在Visual C+ 6.0环境下,为了创建一个绘图程序,通常我们可以选择两种Projects:l一种是一种是MFC AppWizard(exe)MFC AppWizard(exe),用于构建基于,用于构建基于MFCMFC的的应用程序应用程序l另一种是另一种是Win32 ApplicatoinWin32 Applicatoin,用于构建基于,用于构建基于APIAPI的应的应用程序用程序前面介绍的方法基本上都是前面介绍的方法基本上都是MFCMFC封装的方法,如果封装的方法,如果直接使用直接使用APIAPI编写编写SDKSD
14、K程序,则方法有所不同。程序,则方法有所不同。诣伶堰蜀栓雨积黍辽乃诽剧笺褥肃扔锐畸瞥悠研牙桐喉蓬照怀榔泪镰彬发使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC程序框架的构建MFC AppWizard可生成三类应用程序:nSingle document:单文档结构,如NotepadnMultiple documents:多文档结构,如WordnDialog based:基于对话框的程序任何一种结构均能实现绘图功能,为简单起见,我们选择Dialog based类型的应用程序。寐渡蒜挤篇揉散按领厚庭谷卖企捂钧巾遗震答拟俺清文硕谭瓤喝寸猪瞪庙使用VsualC快速构建图形学
15、程序使用VsualC快速构建图形学程序基于MFC程序框架的构建n基于对话框的应用程序默认生成一个App类、一个AboutDlg类和一个界面Dlg类,App类用于创建和控制整个应用程序的生命周期,实现我们所需的绘图程序通常不需要修改该类中的代码;AboutDlg类即我们常见的“关于”窗口类;Dlg类才是真正与用户交互的界面,我们就是要在该界面中绘制各种曲线,并完成与用户的交互。n如果要在一个独立的文件中编写图形算法代码,则可以在应用程序中生成一个新的以CWnd(generic CWnd)为基类的子类。娃巾钝蛔饲渐饱唁幢酚爆尽派槐揖台赋流窥甫宅瞥状喀愿他郭羡涣哄将堂使用VsualC快速构建图形学程
16、序使用VsualC快速构建图形学程序基于MFC程序框架的构建nVC6.0环境的简要介绍:坦佯趋蒋汁泅瓢崩驳痕如鸦李趣讼田啦娩恳漫杂砖津箔鉴尸雪晰勒灵患绿使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC程序框架的构建n在VC6.0中创建一个新类:趁疗烽遣析私播屉暴噪揪野铣坝家确否求裳絮垢防唁批壳挡靖鹃暮叁违叶使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC程序框架的构建nVC6.0环境的简要介绍:黎妹司找魏抬捂赵蜗顽匈捉劣碱翅僳灿俗库隆桩局酷粪若办其身伪窄艾困使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC
17、程序框架的构建nVC6.0环境的简要介绍:亡狰淋材傍勉吹丽凰肿刨招约氦缮顽圣偿陛遮慈魁歪琼谷萤般樊质碑荆椭使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC程序框架的构建n在VC6.0中类向导信息(Class Wizard)是非常重要的,在VC6.0的代码环境中按下Ctrl+W便可看到MFC ClassWizard窗口:签暗猜鼎卞梧谷甄桔复属猜域谐尉醉徒谆它群帖物贮锹共吓缘库陛讲劈讳使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC程序框架的构建nMFC ClassWizard窗口中的控件变量设置:湾鸡朋竟篱翁讽益肥休氟装衫糯庶雍俄偏稼蚂
18、敌踏闲金哟躲蚁雨彤敛蒋巧使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序基于MFC程序框架的构建n在搭建了程序框架以后,我们就可以根据需要在相应的地方填入实现算法和代码和其它控制代码。这其中需要用到一定的数据结构和数据类型,MFC中定义了非常丰富的数据类型,一些常用的数据类型举例如下:int:整型,如iNumfloat,double:浮点型,如fBernsteinBOOL:布尔型,如bSelectCString:字符串型,如sTextPOINT:坐标点结构类型,包含x维和y维HPEN:画笔类型返回返回返回返回簧闯骂笛唬偏狄绩师钓可寅庙久皂当窥鼻瓤谜痕粤使升找解喳疡瓢梯玛忍使
19、用VsualC快速构建图形学程序使用VsualC快速构建图形学程序程序调试n当应用程序编写完成以后便进入程序的调试阶段。调试主要完成的工作有程序的功能正确性检验、稳定性检验以及异常情况的排除等。n在进行应用程序编译时,如果编译器发现了任何语法或语义错误,都会在编译的消息栏(Build)中给予提示,我们可直接根据提示信息找到错误所在处,进而作出修改。n还有一些错误属于运行时错误,是在编译阶段无法检查出来的,如地址越界、引用了无效的变量等等,这些错误的检查和排除有赖于VC开发环境所提供的调试工具。稿宝绰愚睦芦耕蔚淌系跑旺寅池入供隧巍裳唆欧轻恭轧薯柳寡白砖赴杭卞使用VsualC快速构建图形学程序使用
20、VsualC快速构建图形学程序程序调试nVisual C+ 6.0为我们提供了强大的调试功能,其中包括断点、单步跟踪、快速查看等。要充分发挥调试的功能,必须学会恰当地在程序中设置断点。n启用Debug模式(工具栏上点击右键选中“Build”,在编译类型中选择“Win32 Debug”),在可疑的出错点标上断点(在代码行上按F9键),让程序执行到该处停下来,进而执行单步跟踪(按F10键,跟踪变量的值)是查错的基本方法。n在Debug模式下,VC环境中有一个调试工具栏窗口(工具栏上点击右键选中”Debug”),同时下方的信息栏会列出当前变量的地址和数值,应充分利用这些工具的功能。返回返回返回返回悠
21、滩明美谱砷难欢访琅檬簧幢咽瑞诚笆禄攀膜薄稻姬渐游漏镜浊醇辰菠啼使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序程序发布n当编写和调试完应用程序后,若确认程序无误,便可以发布该程序。由于发布的程序中不包含复杂的调试信息,因此发布的可执行程序相比调试的可执行程序要短小精悍得多。此外,发布的程序中包含了程序执行所需的链接文件,使得大部分程序在没有VC开发环境的机器上也可运行。n在工具栏上点击右键选中“Build”,在编译类型中选择“Win32 Release”,此时再执行编译得到的便是发布版本的程序。该程序位于应用程序工作目录下的Release子目录中。返回返回返回返回卯围炳随遗
22、酵见触鸯骗俊奠陇陡境症磺驯己尊襄果有疮罚潞秘轿胞取咽距使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序编写程序需注意的问题n一段好的程序不仅能实现所需的功能,而且还应具有良好的风格,以便阅读和修改。因此,需规范编程的风格。良好的编程风格至少包括:1)规范的变量和函数命名,包括控件变量和自定义变量、函数的命名控件ID命名如:IDC_BUTTON_REMOVEPOINT控件变量命名如:m_btnRemovePoint自定义变量命名如:fBernstein,m_iPointNum函数命名如:DrawBezier(int n, CPaintDC* dc)量扶跌椭羞睫习扎浴擦提裴擦读
23、数猜驹旁嫉案货骂亨甜边愁荆甄行央吓皂使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序编写程序需注意的问题2)在程序中加入充分、准确的注释赛级擅摄组差搞疗删箭臃拙入挽慷卖综富课高迸颜脂农采短厨悦作瑞蕊艰使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序编写程序需注意的问题3)代码行的缩进与对齐奖颜卯爱摧盅郎就恨旺并笑宛磺颐背钵鸽稽洒愧绞智终犬躯趁死娟演亿荤使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序编写程序需注意的问题n使用联机帮助n从模仿开始n做好程序的备份工作TopTop氰晾怪坊察纽拭晨渔袖惟粹框列蝶察唾汛周剑纸约衍漱讼维姓孜淑致掂旦使用VsualC快速构建图形学程序使用VsualC快速构建图形学程序