mfc绘图程序上机步骤_免费下载.docx_第1页
mfc绘图程序上机步骤_免费下载.docx_第2页
mfc绘图程序上机步骤_免费下载.docx_第3页
mfc绘图程序上机步骤_免费下载.docx_第4页
全文预览已结束

下载本文档

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

文档简介

首先生成MFC程序空框架空框架中的每个类的职责是什么要自己理解清楚第一次课:1 定义自己的数据类CLine直线类,用于绘图点击菜单:插入类选择Generic class,输入类名,每个类都是分成两个文件(.h和.cpp文件).h 中只有类体,包含类的数据成员定义和成员函数声明。.cpp中就是成员函数的类体外实现。classCLineint x1,y1,x2,y2;public:CLine(int a=0,int b=0,int c=0,int d=0);virtual CLine();int Getx1();int Gety1();int Getx2();int Gety2();void SetPoint1(intx,int y);很多函数是在后面使用中发现问题逐渐添加的void SetPoint2(intx,int y);2 自定义的类要作为数据成员出现在Doc类中classCSmallCADDoc : public CDocumentprotected: / create from serialization onlyCSmallCADDoc();DECLARE_DYNCREATE(CSmallCADDoc)/ Attributespublic:CLine line1; /数据成员应该是私有,但是由于文档类与视图类交换频繁,为了访问方便,直接定义成公有了。你也可以定义成私有,再定义一个Get函数间接访问,取他的值3 注意:添加了这个数据成员后,需要增加几个#include “Line.h”语句添加的原则是,每个cpp文件都单独编译,哪里用到新的类,相应的cpp前就要增加#include “。”语句此处是在CSmallCADDoc类中添加了一个CLine line1;类对象,在SmallCADDoc.h文件中。所以,凡是包含了#include “SmallCADDoc.h”的地方都要在前面添加#include “Line.h”语句。共3处:app doc view 这3个类的cpp文件前4 注意:初始化CLine line1; /数据成员是文档类的,它不像dos下程序,明确能看到定义,调用构造函数。Mfc程序在后台默认有个初始化过程,所以各个类的数据成员最好都要默认初始化。比如CLine构造函数加缺省参数CLine(int a=0,int b=0,int c=0,int d=0);或者CSmallCADDoc类构造函数加数据成员初始化均可CSmallCADDoc:CSmallCADDoc():line1(100,100,300,500)5 开始绘图:View类的OnDraw函数/画直线pDC-MoveTo(pDoc-line1.Getx1(),pDoc-line1.Gety1();pDC-LineTo(pDoc-line1.Getx2(),pDoc-line1.Gety2();可以完成画一个直线,但是只能按初始值画,不能变化作业:回去自己再加几个类,CEllipseCRectangleCTriangle第二次课用鼠标加菜单,实现自由画多种图形1. 加菜单响应函数,在菜单“查看类向导”,打开类向导。选择由View类响应WM_LBUTTONDOWN等3 个函数分析:鼠标左键落下取直线第一点,拖动找第2点,左键弹起确定第二点2. void CSmallCADView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCSmallCADDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDoc-line1.SetPoint1(point.x,point.y);3. OnLButtonUp和OnMouseMove函数中/ TODO: Add your message handler code here and/or call defaultCSmallCADDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDoc-line1.SetPoint2(point.x,point.y);4. 发现问题:由于操作时鼠标总是移动,所以OnMouseMove函数不加控制会随时响应修改:增加一个step,控制绘图步骤,作为view类的数据成员,初始化为0OnLButtonDown中,if(step=0) 才取第一点,取完step=1OnLButtonUp中 if(step=1) 才取第2点,OnMouseMove函数中if(step=1) 才取第2点,5. 发现问题:画了后不显示,由于系统只有窗口变化才会调用OnDraw重画,添加Invalidate()函数强制重画6. 第一次作业加了几个图形类,由于所有的绘图都是用鼠标,如何区分?用到菜单添加菜单,添加菜单响应函数。在View类中加一个数据成员graphtype用来区分画不同的图classCSmallCADView : public CScrollViewprivate:intgraphtype;/当前绘制的图形的类型0-没有绘图 1-直线 2-椭圆。7. 添加菜单,添加菜单响应函数。不同的菜单,给绘不同的图赋值graphtype8. 再修改3个鼠标响应函数voidCSmallCADView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCSmallCADDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(graphtype=1&step=0) /添加判断条件pDoc-line1.SetPoint1(point.x,point.y);pDoc-line1.SetPoint2(point.x,point.y);/Invalidate();step=1;作业:完成其他3种不同的图形绘制,其中三角形稍有不同,要响应3次鼠标左键落下第3次课由于前面只有一个图形类对象,每次画新的图就会替换掉老的图。添加链表类,实现所以的图形都能自由绘制并保存1. 添加CLineList类classCLineListCLine *head;public:CLineList();virtual CLineList();void insert(CLine* p);CLine * Gethead();2.修改doc类数据CLine line1;唯一的一条直线变成一个链表CLineList list1;注意加了新类就要加#include语句多处原来所有对line1的操作,都改为对list13.为了链表链接,Cline类加Cline* next;数据,和SetNext、GetNext函数4.改OnDraw,从画一个直线变为遍历链表画多个直线CLine* p=pDoc-list1.Gethead();while(p!=0)pDC-MoveTo(p-Getx1(),p-Gety1();pDC-LineTo(p-Getx2(),p-Gety2(); p=p-next;5.改鼠标响应函数OnLButtonDown函数中if(graphtype=1&step=0)/画直线CLine *p=new CLine(point.x,point.y,point.x,point.y);生成一

温馨提示

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

评论

0/150

提交评论