版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、mfmfc c绘图绘图mfc编程学习的基本目标编程学习的基本目标可以进行简单的基于可以进行简单的基于mfc的图形界面编程的图形界面编程理解理解windows编程的基本概念。编程的基本概念。鉴于教学时间进度限制,更复杂的应用程序开发通过鉴于教学时间进度限制,更复杂的应用程序开发通过自学完成。自学完成。实现基本实现基本mfc应用程序需要掌握如下内容:应用程序需要掌握如下内容:windows编程基本概念编程基本概念文档文档/视图结构视图结构文档读写文档读写对话框及标准控件的使用对话框及标准控件的使用菜单栏的使用菜单栏的使用绘图及鼠标消息的处理绘图及鼠标消息的处理1/17/20222主要内容主要内容g
2、di与设备环境(与设备环境(dc)用用cdc绘图绘图应用举例应用举例绘图工具类绘图工具类1/17/20223图形设备接口(图形设备接口(gdi)windows提供了一个称为图形设备接口提供了一个称为图形设备接口(graphics device interface,gdi)的抽象接口。的抽象接口。gdi 作为作为windows的重要组成部分,负责管理用的重要组成部分,负责管理用户绘图操作时功能的转换。户绘图操作时功能的转换。用户通过调用用户通过调用gdi 函数与设备打交道,函数与设备打交道,gdi 通过通过不同设备提供的驱动程序将绘图语句转换为对应不同设备提供的驱动程序将绘图语句转换为对应的绘图
3、指令,避免了用户对硬件直接进行操作,的绘图指令,避免了用户对硬件直接进行操作,从而实现设备无关性(显示器或打印机)。从而实现设备无关性(显示器或打印机)。1/17/20224gdi的图形输出的图形输出应用程序可以使用应用程序可以使用gdi 创建如下图形输出创建如下图形输出矢量图形:画线和填充图形,包括点、直线、曲线、多矢量图形:画线和填充图形,包括点、直线、曲线、多边形、扇形和矩形等。边形、扇形和矩形等。光栅图形:通过光栅图形函数对以位图形式存储的数据光栅图形:通过光栅图形函数对以位图形式存储的数据进行操作,包括各种位图和图标的输出。进行操作,包括各种位图和图标的输出。屏幕:对若干行和列的像素
4、操作屏幕:对若干行和列的像素操作打印机:对若干行和列的点阵输出打印机:对若干行和列的点阵输出直接从内存到显存的复制操作,速度快,内存要求高。直接从内存到显存的复制操作,速度快,内存要求高。文本:以图形方式输出文本,以逻辑坐标为单位计算输文本:以图形方式输出文本,以逻辑坐标为单位计算输出位置,而出位置,而dos是以行为单位。用户可以设置文本的各是以行为单位。用户可以设置文本的各种效果,如加粗、斜体、设置颜色等。种效果,如加粗、斜体、设置颜色等。1/17/20225设备环境设备环境应用程序的输出面向设备环境应用程序的输出面向设备环境(device context,dc),是,是一个虚拟逻辑设备,也
5、称设备描述表或设备上下文。设备一个虚拟逻辑设备,也称设备描述表或设备上下文。设备环境环境dc 是由是由gdi 创建,用来代表设备连接的数据结构。创建,用来代表设备连接的数据结构。dc 的主要功能的主要功能允许应用程序使用一个输出设备。允许应用程序使用一个输出设备。提供应用程序、设备驱动和输出设备之间的连接。提供应用程序、设备驱动和输出设备之间的连接。保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。其属性,以及颜色和背景等影响图形输出的绘图模式。保存窗口剪切区域保存窗口剪切区域(c
6、lipping region),限制程序输出到输出设备中,限制程序输出到输出设备中窗口覆盖的区域。窗口覆盖的区域。1/17/20226设备坐标系统设备坐标系统设备坐标系统设备坐标系统x轴自左至右,轴自左至右,y轴从上到下,坐标原点在屏轴从上到下,坐标原点在屏幕左上角幕左上角0,0xyo1/17/20227主要内容主要内容gdi与设备环境(与设备环境(dc)用用cdc绘图绘图应用举例应用举例绘图工具类绘图工具类1/17/20228设备环境类设备环境类cdcmfc封装了封装了dc,提供,提供cdc 类及它的子类以类及它的子类以访问访问gdi。cdc类派生自类派生自cobject类,其子类包括类,其
7、子类包括cclientdccmetafiledccpaintdccwindowdccobject1/17/20229设备环境类的基本功能设备环境类的基本功能1/17/202210cdc类常用绘图函数类常用绘图函数arc:绘制一段弧:绘制一段弧chord:绘制弦形:绘制弦形ellipse:绘制椭圆或圆:绘制椭圆或圆moveto:将当前位置移动到指定位置:将当前位置移动到指定位置lineto:从当前位置到指定位置画一条直线:从当前位置到指定位置画一条直线polyline:画连接指定点的折线段:画连接指定点的折线段polybezler:根据两个端点和两个控制点画贝塞尔曲线:根据两个端点和两个控制点画
8、贝塞尔曲线pie:画冰块:画冰块polygon:根据两个或两个以上的顶点绘制一个多边形:根据两个或两个以上的顶点绘制一个多边形rectangle:根据指定的左上角和右下角坐标绘制一个矩形:根据指定的左上角和右下角坐标绘制一个矩形roundrect:画圆角矩形:画圆角矩形setpixel:画一个点:画一个点1/17/202211绘图颜色绘图颜色dword类型的类型的colorref数据用于存放颜色值数据用于存放颜色值“0 x00bbggrr”低位字节存放红色强度值低位字节存放红色强度值第第2 个字节存放绿色强度值个字节存放绿色强度值第第3个字节存放蓝色强度值个字节存放蓝色强度值高位字节存放高位字
9、节存放0可用可用rgb宏设置颜色值,将红、绿、蓝分量值转宏设置颜色值,将红、绿、蓝分量值转换为换为colorref类型的颜色数据类型的颜色数据colorref rgb(byte byred, / red component of color byte bygreen, / green component of colorbyte byblue / blue component of color );1/17/202212常用颜色对照表常用颜色对照表例:例:collorref red = rgb(255,0,0);1/17/202213在在mfc中获取中获取dc在如在如ondraw等函数中传递一
10、个指向等函数中传递一个指向cdc 对象的对象的指针指针如如ondraw(cdc* pdc);使用构造函数构建对象使用构造函数构建对象一般不构造一般不构造cdc对象对象在在cwnd类的类的onpaint函数中,定义函数中,定义cpaintdc对象对象cpaintdc dc(this);在在cwnd类的其它函数中,定义类的其它函数中,定义cclientdc和和cwindowdc的对象的对象cclientdc dc(this);cwindowdc dc(this);1/17/202214cclientdc、cpaintdc和和cwindowdc的区别的区别当窗口的某个区域需要重绘时激发窗口重绘消息当
11、窗口的某个区域需要重绘时激发窗口重绘消息wm_paint,相应消息,相应消息处理函数处理函数cwnd:onpaint将被调用。将被调用。cpaintdc一般只用于一般只用于onpaint函数函数中,在处理完窗口重绘后,中,在处理完窗口重绘后, cpaintdc对象的析构函数把对象的析构函数把wm_paint消消息从消息队列中清除,避免不断地重绘操作。坐标原点息从消息队列中清除,避免不断地重绘操作。坐标原点(0,0)是客户区的是客户区的左上角。左上角。cclientdc用于特定窗口客户区(窗口中除边框、标题栏、菜单栏、状用于特定窗口客户区(窗口中除边框、标题栏、菜单栏、状态栏外的中间部分)的输出
12、,其构造函数中包含了态栏外的中间部分)的输出,其构造函数中包含了getdc,析构函数中包析构函数中包含了含了releasedc,不需要显式释放,不需要显式释放dc资源。一般用于响应非重绘消息资源。一般用于响应非重绘消息(如键盘和鼠标消息)的绘图操作。坐标原点(如键盘和鼠标消息)的绘图操作。坐标原点(0,0)是客户区的左上角。是客户区的左上角。cwindowdc在整个应用程序窗口上画图,而在整个应用程序窗口上画图,而cclientdc和和cpaintdc只只能在客户区绘制图形;除非要自己绘制窗口边框和按钮,否则一般不用能在客户区绘制图形;除非要自己绘制窗口边框和按钮,否则一般不用它。坐标原点它。
13、坐标原点(0,0)是屏幕的左上角。是屏幕的左上角。1/17/202215windows系统系统发送发送wm_paint消息的时机消息的时机第一次创建一个窗口时第一次创建一个窗口时改变窗口的大小时改变窗口的大小时把窗口从另一个窗口背后移出时把窗口从另一个窗口背后移出时窗口显示数据变化时,应用程序引发重绘操作窗口显示数据变化时,应用程序引发重绘操作通过通过cwnd:invalidate、cwnd:invalidaterect或或cwnd:invalidatergn函数把指定区域加到窗口的函数把指定区域加到窗口的update region中。中。窗口的窗口的update region不为空时,系统会
14、自动产生不为空时,系统会自动产生wm_paint消息。消息。1/17/202216ondraw与与onpaint的区别的区别ondraw是是cview类的成员函数,不响应消息;类的成员函数,不响应消息;onpaint是是cwnd类的成员函数,相应类的成员函数,相应wm_paint消息。消息。cview默认调用的默认调用的onpaint函数如下函数如下void cview:onpaint() cpaintdc dc(this); onpreparedc(&dc); ondraw(&dc); /调用了调用了ondraw可见可见onpaint函数也调用了函数也调用了cview:ond
15、raw函数。因而一函数。因而一般在般在ondraw函数内添加绘图代码,完成绘图任务函数内添加绘图代码,完成绘图任务1/17/202217主要内容主要内容gdi与设备环境(与设备环境(dc)用用cdc绘图绘图应用举例应用举例绘图工具类绘图工具类1/17/202218举例举例编写一个单文档编写一个单文档mfc应用程序,完成以下要求:应用程序,完成以下要求:(1)在客户区中画最大的椭圆,()在客户区中画最大的椭圆,(2)当点击鼠)当点击鼠标左键时,以鼠标左键点击的位置为中心,画一标左键时,以鼠标左键点击的位置为中心,画一个半径为个半径为20个像素的圆。个像素的圆。建立一个单文档的建立一个单文档的mf
16、c项目项目drawtest11/17/202219绘制椭圆方法一:修改绘制椭圆方法一:修改cview类的虚函数类的虚函数ondraw函数函数cwnd:getclientrect得到客户区域的大小得到客户区域的大小添加绘图代码添加绘图代码1/17/202220绘制椭圆方法二:在绘制椭圆方法二:在onpaint函数中添加绘图函数中添加绘图代码代码添加添加wm_paint消息处理函数消息处理函数onpaint调用调用onpreparedc和和ondraw函数,添加绘图代码函数,添加绘图代码需要添加需要添加的代码的代码1/17/2022211/17/202222鼠标点击消息处理函数鼠标点击消息处理函数
17、在类视图中选中在类视图中选中cdrawtest1view类类在属性窗口中选择在属性窗口中选择“wm_lbuttondown”消息,添加消息处理函数消息,添加消息处理函数需要添加需要添加的代码的代码1/17/2022231/17/202224主要内容主要内容gdi与设备环境(与设备环境(dc)用用cdc绘图绘图应用举例应用举例绘图工具类绘图工具类1/17/202225绘图工具类主要包括绘图工具类主要包括画笔画笔cpencpen、画刷、画刷cbrushcbrush、字体、字体cfontcfont、位图、位图bitmapbitmap和调色板和调色板cpalettecpalette等。等。类继承关系如
18、图类继承关系如图cobject绘图工具类绘图工具类cgdiobject1/17/202226cpen类:类:gdi 画笔,用于画线。默认的画笔用于绘制画笔,用于画线。默认的画笔用于绘制与一个像素等宽的黑色实线。与一个像素等宽的黑色实线。cbrush类:类:gdi 画刷,用来填充一个封闭图形对象画刷,用来填充一个封闭图形对象(如如矩形、圆形矩形、圆形)的内部区域,默认的画刷颜色是白色。的内部区域,默认的画刷颜色是白色。cfont类:类:gdi字体,用来绘制文本,可设置文字的大字体,用来绘制文本,可设置文字的大小、是否加粗、是否斜体、是否加下划线等。小、是否加粗、是否斜体、是否加下划线等。cbit
19、map类:类:gdi 位图,用于填充区域。位图,用于填充区域。cpalette类:类:gdi 调色板,包含系统可用的色彩信息,调色板,包含系统可用的色彩信息,是应用程序和彩色输出设备环境是应用程序和彩色输出设备环境(如显示器如显示器)的接口。的接口。crgn类:类:gdi 区域,用于设备环境区域,用于设备环境(通常是窗口通常是窗口)内的内的区域操作,通常和区域操作,通常和cdc类中与裁剪类中与裁剪(clipping)有关的成有关的成员函数配合使用。员函数配合使用。1/17/202227阴影画刷阴影画刷bool cbrush:createhatchbrush( int nindex, / 指定阴影样式指定阴影样式colorref crcolor / 指定阴影颜色指定阴影颜色);创建一个黄色的实心画刷创建一个黄色的实心画刷cbrush brush;brush.createhatchbrush(hs_diagcross, rgb(255,255,0);1/17/202228在在ondraw函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 承包草地合同(2篇)
- 2025年度数据中心农民工用工合同4篇
- 二手房交易法律合同模板2024一
- 2025年度个人贷款合同风险评估与管理规范4篇
- 二零二五年度国际货物保险合同条款及理赔细则3篇
- 2025年度临时临时临时停车场租赁合同2篇
- 2025年度个人股权分割及转让合同3篇
- 个人与个人2024年度汽车租赁合同3篇
- 二零二五年度宁波劳动合同模板:包含员工劳动合同变更条款
- 二零二五年度外汇借款合同风险防范与应对策略
- 2024年资格考试-对外汉语教师资格证笔试参考题库含答案
- 软件研发安全管理制度
- 三位数除以两位数-竖式运算300题
- 寺院消防安全培训课件
- 比摩阻-管径-流量计算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、异丙醇和正丁醇检验
- 五年级数学应用题100道
- 西方经济学(第二版)完整整套课件(马工程)
- 高三开学收心班会课件
- GB/T 33688-2017选煤磁选设备工艺效果评定方法
- 科技计划项目申报培训
评论
0/150
提交评论