




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简单画图软件的实现指导教师: 简单画图软件的实现n1、题目n2、相关MFC的知识一、题目n名称:简单画图软件的实现n程序框架:基于单文档的应用程序。n软件形式:n 可以参考Windows操作系统中“附件里的画图软件。 一、题目n程序基本功能:n 1. 能够绘制直线、曲线;n 2.能够绘制各种形状,比如矩形、椭圆形等n 3.能够绘制各种实心形状,比如实心矩形、实心椭圆等n 4.能够添加文字n 5.能够设置不同的绘制颜色一、题目n程序可选功能:n 1. 能够显示磁盘上已有的图片文件n 2. 能够具备“橡皮擦的功能,进行擦除n 3. 能够保存绘制后的图形n 4.其他认为应该增加的绘图功能二、相关MF
2、C的知识n1、创建基于单文档的工程n2、CView类的使用n3、CDC相关类的使用n4、菜单栏和工具条的使用2. 创建基于单文档的工程n步骤n 1、选择工程类别MFC AppWizard(exe)n 2、选择应用程序类别 Single Documentn 3、不需支持数据库 n 4、不需支持额外的系统功能n 5、选择程序外观n 6、选择程序风格n 7、确认相关类名称n 8、完成1、选择工程类别MFC AppWizard(exe)选择MFC AppWizard(exe)2、选择应用程序类别Single Document选择Single Document 3、不需支持数据库 4、不需支持额外的系统
3、功能5、选择程序外观6、选择程序风格7、确认相关类名称8、完成运行MFC单文档应用程序单文档应用程序n包含四个主要的类:包含四个主要的类:n应用类应用类n主框架窗口类主框架窗口类n文档类文档类n视图类视图类系统自动生成的代码说明n1、CPaintApp类n 应用类,该类中包含程序的入口函数InitInstance(),类似于main()函数。n 对应的文件Paint.h和Paint.cpp。工程名称Step1系统自动生成的代码说明n2、CMainFrame类n 框架类,用来显示一个标题、一个菜单条、窗口最大化和最小化键、边框、一个系统菜单、工具条以及状态条等。n 对应的文件MainFrm.h和
4、MainFrm.cpp右应用程序类调用系统自动生成的代码说明n3、CPaintDoc类n由MFC的 CDocument类派生n负责存放程序数据并读写磁盘文件数据。n在建立一个图形系统时,存储图形元素的数据结构等都是放在文档类中。n 对应的文件Paintdoc.h和Paintdoc.cpp。系统自动生成的代码说明n4、CPaintView类n由MFC的类CView派生。n负责显示文档类的数据,可以显示在屏幕上,也可以输出到打印机或其他设备上。n负责处理用户的输入n在屏幕上,这个类管理客户窗口。n在实现一个图形系统时,屏幕上显示、打印机上绘图的工作都是由视图类完成的。n对应的文件Paintview
5、.h和Paintview.cpp。2、CView类的使用一CView类对象的工作机制消息流 当CView类对象收到以各种方式传入的消息后,便会通过自己的一系列函数(如:Ondraw 、OnPrepareDC、OnPaint等)响应,然后再将消息传给专用于描述输出设备的CDC对象。2、CView类的使用n基于MFC的应用程序内都含有一个缺省定义的CDC类对象,所以当应用软件系统执行时,一个CView 类对象实际上已经与一个缺省的CDC类对象连接起来了。n一个Windows 应用软件系统在其视图中显示的全部成份通常是经过CView类的成员函数OnDraw()传递给与之相连的CDC类对象的。2、CV
6、iew类的使用nOnDraw函数是被CView类下的消息处理函数OnPaint()调用的。nOnPaint()函数的代码:void CView:OnPaint() /standard paint routine CPaintDC dc(this); OnPrepareDC(&dc); OnDraw(&dc); 2、CView类的使用n当WM_PAINT消息产生时,如果用户应用程序的视图类中没有对OnPaint函数重载, 则该消息发给基类CView的OnPaint(), 再调用用户应用程序的OnDraw()。nCView的OnDraw是纯虚函数。故要想在应用程序中显示内容,重载O
7、nDraw, 或重载OnPaint.3、CDC相关类的使用n绘图要用到MFC的类CDC、CPaintDC、CClientDC、CWindowDC等,其中 CDC类是基类,另外几个类是为了特殊应用由其派生出来的。3、CDC相关类的使用n一一 绘图类绘图类CDC类简介类简介n CDC类是类是CObject类的一个派生类,类的一个派生类,CDC类是类是MFC中专用于描述输出设备特别是中专用于描述输出设备特别是显示和打印设备特性的类显示和打印设备特性的类, 它实现了较多的它实现了较多的图形操作图形操作, CDC类是所有绘图类的基类。类是所有绘图类的基类。 CDC类定义了一个设备描述表对象。类定义了一个
8、设备描述表对象。(设备描设备描述表抽象为述表抽象为CDC)CDC类提供的成员函数用于:类提供的成员函数用于: 操作设备描述表操作设备描述表 使用绘图工具使用绘图工具 选择图形设备界面选择图形设备界面(GDl) 操作颜色和调色板操作颜色和调色板 取得和设置绘图属性、映射方式取得和设置绘图属性、映射方式 确定视口和窗口范围确定视口和窗口范围 坐标转换、区域的使用坐标转换、区域的使用 剪取、画线剪取、画线 绘制简单的形状、椭圆和多边形绘制简单的形状、椭圆和多边形 绘制文本绘制文本 3、CDC相关类的使用n二二 绘图类绘图类CClientDC类简介类简介n CDC的派生类,用于客户区的输出,的派生类,
9、用于客户区的输出,一般在响应非窗口消息并对客户区进行一般在响应非窗口消息并对客户区进行绘图时要用到它,如键盘输入绘制文本、绘图时要用到它,如键盘输入绘制文本、鼠标移动绘图等鼠标移动绘图等3、CDC相关类的使用n三三 绘图类绘图类CPaintDC类简介类简介n CDC的派生类,用于响应窗口重绘的派生类,用于响应窗口重绘消息消息(WM_PAINT)的绘图输出。的绘图输出。3、CDC相关类的使用n三三 绘图类绘图类CWindowDC类简介类简介n CDC的派生类,的派生类, 用于窗口客户区和用于窗口客户区和非客户区的绘制,非客户区包括窗口边非客户区的绘制,非客户区包括窗口边框、标题栏、菜单按钮等。框
10、、标题栏、菜单按钮等。3、CDC相关类的使用 总之,总之,CDC类中包含了与图形绘制有类中包含了与图形绘制有关的大部分操作,关的大部分操作,CDC类实际上是把普类实际上是把普通通C语言与绘图有关的函数通过类封装到语言与绘图有关的函数通过类封装到一起。一起。3、CDC相关类的使用n起辅助作用的图形库函数起辅助作用的图形库函数: :n CGdiObject( CGdiObject(基类基类) )nCBitmap CBitmap 位图类位图类 nCBrush CBrush 绘图方式类绘图方式类nCFont CFont 字体字体/ /字型类字型类nCPalette CPalette 调色板类调色板类n
11、CPen CPen 绘图工具类绘图工具类nCRgn CRgn 绘图区域类绘图区域类n 称这些类为绘图对象类。绘图类可被称这些类为绘图对象类。绘图类可被选取完成图形的操作选取完成图形的操作( (相当于工具相当于工具) )。 3、CDC相关类的使用n当当CViewCView类对象需要在视图中,对显示器类对象需要在视图中,对显示器进行输出、绘制任何图形和文字时,除进行输出、绘制任何图形和文字时,除了要向了要向CDCCDC类对象发出消息外,还有可能类对象发出消息外,还有可能将所需要的将所需要的CGdiObjectCGdiObject的派生类对象以的派生类对象以消息参数的形式也一同提交给消息参数的形式也
12、一同提交给CDCCDC类对象。类对象。3、CDC相关类: CPen类 CPen类模拟画笔图形设备界面。类模拟画笔图形设备界面。 (1)建立建立CPen 对象方法:对象方法: 定义定义个个CPen对象,用其成员函数对象,用其成员函数CreatePen或或CreatePenIndirect对其进行对其进行初始化。初始化。 CPen pen; pen.CreatePen(PS_SOLID,1,RGB(255,0,0); 构造函数建立构造函数建立个个Cpen对象,并一次对象,并一次性地定义它的所有参数。性地定义它的所有参数。 CPen pen(PS_SOLID,1,RGB(255,0,0); 用指针对
13、象的形式动态创造一个画笔。用指针对象的形式动态创造一个画笔。 CPen *pen; pen new CPen(PS_SOLID,1, RGB(255,0,0);delete pen;3、CDC相关类: CPen类n不论是采用哪一种方法,都是用三个参数来初始化画笔,这三个参数是线型(nPenStyle),线宽(nWidth)和颜色(COLORREF crColor)。n参数nPenStyle设置画笔画线的线型;n参数nWidth设置以逻辑单位表示的线宽;n参数crColor设置画笔的颜色,利用RGB宏指定颜色非常简单:COLORREF RGB(cRed,cGreen,cBlue);参数cRed、
14、cGreen、cBlue分别指定红、绿、蓝三色的相对亮度,每个参数均赋予0到255之间的值。例如:(2)在绘图对象中选入画笔在绘图对象中选入画笔 void CDrawView:OnDraw(CDC *pDC) /定义并初始化一个画笔实例定义并初始化一个画笔实例 CPen pen(PS_SOLID, 1, RGB(255, 0 ,0); / 将画笔选入绘将画笔选入绘/图对象图对象 CPen * pOldPen = pDC-SelectObject(&pen); pDC-SelectObject(pOldPen); /恢复原恢复原有的画笔对象有的画笔对象3、CDC相关类: CBrush类n
15、CBrush类模拟一个Windows画刷图形设备界面。 用法与CPen类似。 (1)构造CBrush对象CBrush类有四个构造函数。CBrush()CBrush(COLORREF crColor)CBrush(CBitmap* pBitmap)CBrush:CBrush(int nIndex, COLORREF crColor) 一次性构造 CBrush brush(RGB(255,0,0);3、CDC相关类: CBrush类n用画刷指针定义。 CBrush *brush; brush = new CBrush(RGB(255,0,0); delete brush; 用函数CreateSol
16、idBrush构造。 CBrush brush; brushCreateSolidBrush(RGB(255,0,0);例如:n(2)(2)在绘图对象中选入画刷在绘图对象中选入画刷void CDrawViewvoid CDrawView:OnDraw(CDC OnDraw(CDC * * pDC) pDC) CBrush brush(HS_CROSS, RGB(255, 0, CBrush brush(HS_CROSS, RGB(255, 0, 0); 0); n / /定义并初始化一个画刷实例定义并初始化一个画刷实例 CBrush CBrush * * pOldBrush=pDC- pOld
17、Brush=pDC-SelectObject(&brush); /SelectObject(&brush); /将画刷选入绘将画刷选入绘图对象图对象 n pDC-SelectObject(pOldBrush); pDC-SelectObject(pOldBrush); n / /恢复原来的画刷恢复原来的画刷 3、CDC相关类: CFont类 CFont类模拟字体。 (1)构造CFont对象 CFont类只有一个构造函数. CFont( ); 定义一个CFont类的对象后,必须用成员函数CreateFont或CreateFontIndirect 来确定字体对象的参数。3、CDC相
18、关类: CRgn类nCRgn类封装了区域的种种特性和操作,它是窗口中的椭圆或多边形范围的组合,可被用来进行填充、反显、挪动、判定某点是否在区域等操作3、CDC相关类: CBitmap类nCBitmap类封装了处理位图的方法。例1n一在视图中直接显示文字和绘图由于在Windows的视中的任何信息包括文字都是图形,所以在视中直接显示文字和绘图没有任何区别。如果程序员无任何特殊要求,可以直接通过修改OnDraw()成员函数实现在用户的视中显示文字和绘制各种标准的几何图形。例1n在CView类的OnDraw()成员函数内“/ TODO: add draw code for native data he
19、re注释的下一行首并键入下述语句: pDC-SelectStockObject(ANSI_FIXED_FONT);pDC-TextOut(10,0,画一个圆:);pDC-MoveTo(10,16);pDC-LineTo(115,16);pDC-SelectStockObject(GRAY_BRUSH);pDC-Ellipse(10,20,210,220);例1nTextOut()函数参数表中的前两个数字分别表示显示的起点坐标,其单位为显示器物理的点横向数和线纵向数。nEllipse()函数参数表的四个数值与C图形库函数内的同名函数参数相同,分别表示圆外接矩形的对角坐标。nMoveTo()和Li
20、neTo() 函数是在显示的文字下方画一直线。 4、菜单栏和工具条的使用n在Windows应用程序框架中,使用菜单、工具条、状态条等与用户交互操作和进行信息提示。还可以为命令消息ID号设置加速键,以键盘操作的形式激发命令消息。4、菜单栏和工具条的使用n例1n 学习如何使用菜单,步骤n 1、添加菜单项n 2、添加菜单项的消息处理函数n 3、添加鼠标的消息处理函数n 4、添加代码,绘制直线n 5、测试例1:n1、添加菜单项n 在建好的Single document文档中,选择“Resource view”,选择“Menu”,双击空白菜单项,弹出“属性对话框”,可以添加菜单,如下图所示。n 属性对话
21、框中对于顶层菜单项,只需要填写菜单名称;子菜单项需要填写资源ID和菜单名称。例1:1、添加顶层菜单项1双击空白菜单项2 弹出菜单属性例1:1、添加子菜单项1双击空白菜单项2 弹出菜单属性例1:1、添加子菜单项1双击空白菜单项2 弹出菜单属性2、添加菜单项的消息处理函数n点击“view”classWizard”,弹出对话框,在“paint工程下,在Paintview视图下,找到刚才设置的菜单项的资源ID,即ID_LINE,添加一个消息事件“Command”2、添加菜单项的消息处理函数1选择CPaintView2选择菜单ID3选择Command消息2、添加菜单项的消息处理函数n每一个菜单项可以响应
22、两种消息:n Command: n 鼠标点击消息,通常使用该消息n Update_Command_UI:n 菜单项状态改变消息,比如菜单项选中或未选中状态。2、添加菜单项的消息处理函数1 添加消息处理函数2 连续点击“OK”3、添加鼠标的消息处理函数n为CPaintView添加添加鼠标消息n 鼠标左键按下WM_LBUTTONDOWN:n 绘制直线开始n 鼠标左键抬起WM_LBUTTONUP :n 绘制直线结束n 鼠标移动WM_MOUSEMOVE:n 随鼠标绘制直线3、添加鼠标的消息处理函数1 鼠标处理函数2生成的消息处理函数4、添加代码,绘制直线 1在CPaintView的类声明中添加一个公有
23、成员 int type; /绘制图形类别,1代表直线,2代表矩形 bool flag; /绘制开始、结束标记 int x1, y1; int x2, y2; x1,y1表示绘制直线的起始坐标, x2, y2直线终点坐标,由鼠标左键按下抬起确定。4、添加代码,绘制直线n2在CPaintView的构造函数中初始化flag n CPaintView:CPaintView()n n / TODO: add construction code heren type = 0; /代表不绘制任何类型的图形n flag = false; /停止绘制图形n 手动添加的代码4、添加代码,绘制直线n3) 在刚才生成的OnLine函数中,设置flag=1;表示要画直线n void CPaintView:OnLine() n n / TODO: Add your command handlercode heren type=1;n 手动添加的代码4、添加代码,绘制直线4在鼠标左键按下时,设置起始坐标void CPaintView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultx1 = point.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护林员实训管理制度
- 智慧微菜场管理制度
- 柴油贮存与管理制度
- 核算型转向管理制度
- 梅州差旅费管理制度
- 检测站大厅管理制度
- 棉花加工厂管理制度
- 模型制作间管理制度
- 殡葬业务科管理制度
- 比亚迪商城管理制度
- 供应商货款打折协议书正规范本(通用版)
- 中建XGT7022、XGT7020塔吊基础施工方案
- 11楼11月份工程施工月进度计划表
- 以问题为引领的小学数学大单元教学研究与实践
- 沥青路面厂拌热再生技术指南
- 4.1+陆地水体及其相互关系1河流的补给课件【要点精讲+拓展提升】人教版(2019)高中地理选择性必修1+
- Java Web 程序设计(山东联盟)智慧树知到课后章节答案2023年下潍坊学院
- (完整版)四宫格数独题目204道(可直接打印)及空表(一年级数独题练习)
- 劳务派遣投标方案(完整技术标)
- 日内瓦公约(全文)
- 中建金属屋面施工方案完整版
评论
0/150
提交评论