资源描述:
《mfc绘图程序上机步骤.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、首先生成MFC程序空框架空框架中的每个类的职责是什么要自己理解清楚第一次课:1.定义自己的数据类CLine直线类,用于绘图点击菜单:插入—类选择Genericclass,输入类名,每个类都是分成两个文件(.h和.cpp文件).h中只有类体,包含类的数据成员定义和成员函数声明。.cpp中就是成员函数的类体外实现。classCLine{intx1,y1,x2,y2;public:CLine(inta=0,intb=0,intc=0,intd=0);virtual~CLine();intGetx1();intGety1();intGetx2();intGety2();
2、voidSetPoint1(intx,inty);很多函数是在后面使用中发现问题逐渐添加的voidSetPoint2(intx,inty);};2.自定义的类要作为数据成员出现在Doc类中classCSmallCADDoc:publicCDocument{protected://createfromserializationonlyCSmallCADDoc();DECLARE_DYNCREATE(CSmallCADDoc)//Attributespublic:CLineline1;//数据成员应该是私有,但是由于文档类与视图类交换频繁,为了访问方便,直接定义成公
3、有了。你也可以定义成私有,再定义一个Get函数间接访问,取他的值3.注意:添加了这个数据成员后,需要增加几个#include“Line.h”语句添加的原则是,每个cpp文件都单独编译,哪里用到新的类,相应的cpp前就要增加#include“。。。”语句此处是在CSmallCADDoc类中添加了一个CLineline1;类对象,在SmallCADDoc.h文件中。所以,凡是包含了#include“SmallCADDoc.h”的地方都要在前面添加#include“Line.h”语句。共3处:appdocview这3个类的cpp文件前4.注意:初始化CLineline
4、1;//数据成员是文档类的,它不像dos下程序,明确能看到定义,调用构造函数。Mfc程序在后台默认有个初始化过程,所以各个类的数据成员最好都要默认初始化。比如CLine构造函数加缺省参数CLine(inta=0,intb=0,intc=0,intd=0);或者CSmallCADDoc类构造函数加数据成员初始化均可CSmallCADDoc::CSmallCADDoc():line1(100,100,300,500)1.开始绘图:View类的OnDraw函数//画直线pDC->MoveTo(pDoc->line1.Getx1(),pDoc->line1.Gety1(
5、));pDC->LineTo(pDoc->line1.Getx2(),pDoc->line1.Gety2());可以完成画一个直线,但是只能按初始值画,不能变化作业:回去自己再加几个类,CEllipseCRectangleCTriangle第二次课用鼠标加菜单,实现自由画多种图形1.加菜单响应函数,在菜单“查看—类向导”,打开类向导。选择由View类响应WM_LBUTTONDOWN等3个函数分析:鼠标左键落下取直线第一点,拖动找第2点,左键弹起确定第二点2.voidCSmallCADView::OnLButtonDown(UINTnFlags,CPointpoi
6、nt){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCSmallCADDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);pDoc->line1.SetPoint1(point.x,point.y);3.OnLButtonUp和OnMouseMove函数中{//TODO:Addyourmessagehandlercodehereand/orcalldefaultCSmallCADDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);pDoc
7、->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.第一次作业加了几个图
8、形类,由于所有的绘图都是