《实验一图形程序设计基础》由会员分享,可在线阅读,更多相关《实验一图形程序设计基础(18页珍藏版)》请在金锄头文库上搜索。
1、实验一实验一 图形程序设计基础图形程序设计基础一一.概述:概述:本实验是在平台上,建立一个本实验是在平台上,建立一个Project,并在该,并在该Project的的View文件内,找到自动创建的文件内,找到自动创建的CView类的虚类的虚拟成员函数拟成员函数OnDraw(CDC*pDC),并在该函数内添加,并在该函数内添加相应的绘图程序,绘图程序通过相应的绘图程序,绘图程序通过CDC类指针类指针pDC调用调用相应的绘图土函数,来完成所需图形的绘制。相应的绘图土函数,来完成所需图形的绘制。因此,在此实验中,除了要掌握平台上编制图形因此,在此实验中,除了要掌握平台上编制图形程序的步骤之外,还应初步
2、了解程序的步骤之外,还应初步了解MFC的结构,尤其需要的结构,尤其需要了解与绘图有关的相关类的关系和类中成员函数的调用了解与绘图有关的相关类的关系和类中成员函数的调用方式。方式。MFC结构如下:结构如下:二实验的主要目的:二实验的主要目的:1、让学生掌握利用平台,进行图形程序设计的基本方法与、让学生掌握利用平台,进行图形程序设计的基本方法与步骤;步骤;2、训练学生利用计算机分析和解决实际问题的能力;、训练学生利用计算机分析和解决实际问题的能力;3、锻炼学生撰写科技实验报告的能力。、锻炼学生撰写科技实验报告的能力。三实验步骤:三实验步骤:1.建立工程:建立工程:2.打开打开VisualC+;3.
3、选择选择FileNewProjectsMFCAppWizardexe,在,在ProjectName内输入工程名(如内输入工程名(如FtistP),并在),并在Location选择程序文件存储路径,最后点选择程序文件存储路径,最后点击击OK。2.选择欲创建的文档类型:选择欲创建的文档类型:在在Step1对话框中,选择对话框中,选择SingleDocument或或MultipleDocuments或或Dialogbased中任意一项均可,但后续操作不一样。(如选中任意一项均可,但后续操作不一样。(如选MultipleDocuments)点击)点击Finish(若还有其他需要则选(若还有其他需要则选
4、Next););在如下在如下NewProjectInformation框内下点击框内下点击OK。3.编写图形程序:编写图形程序:在如上图所示的此新建的在如上图所示的此新建的Project内,内,Workspace视窗下视窗下选择选择FileView,然后点击,然后点击FirstPFiles展开它,在展开它,在SourceFiles中找到中找到文件,在该文件中找到文件,在该文件中找到CView类下的列函数:类下的列函数:voidCFirstPView:OnDraw(CDC*pDC)CFirstPDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add
5、drawcodefornativedatahere(添加代码处添加代码处)在该函数内添加相应的绘图程序代码,图形形状不作统一要求,可自由在该函数内添加相应的绘图程序代码,图形形状不作统一要求,可自由设计,代码自己编写,也可用教材上设计,代码自己编写,也可用教材上P20实例来练习。实例来练习。教材上教材上P20实例代码如下:实例代码如下:/使用缺省画笔画了一条直线,画笔的属性是实线型、使用缺省画笔画了一条直线,画笔的属性是实线型、1个像素宽、黑色个像素宽、黑色pDC-MoveTo(100,100);pDC-LineTo(200,200);CPen*pOldPen;/申请一个画笔指针,用于保存当前
6、设备环境下的画笔申请一个画笔指针,用于保存当前设备环境下的画笔CPendashPen;/以下创建画笔并绘制直线以下创建画笔并绘制直线/创建一个画笔,其属性是虚线型、创建一个画笔,其属性是虚线型、1个像素宽、红色个像素宽、红色(PS_DASH,1,RGB(255,0,0);/PS_SOLID:Penissolid;/PS_DASH:Penisdashed;PS_DOT:Penisdotted;PS_DASHDOT:Penhasalternatingdashesanddots/PS_DASHDOTDOT;PS_INSIDEFRAME:Penissolid;PS_NULL:Penisinvisibl
7、epOldPen=pDC-SelectObject(&dashPen);/选择新画笔,用选择新画笔,用pOldPen保留原画保留原画笔笔pDC-LineTo(300,100);/使用新画笔绘制直线使用新画笔绘制直线pDC-SelectObject(pOldPen);/绘制完毕一定要恢复原画笔绘制完毕一定要恢复原画笔pDC-LineTo(400,200);/再次使用原画笔再绘制直线再次使用原画笔再绘制直线4编译调试程序,直到通过运行后得到需要的结论。编译调试程序,直到通过运行后得到需要的结论。注:注:若在:若在:voidCFirstPView:OnDraw(CDC*pDC)CFirstPDoc*
8、pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahere。函数前添加下列函数,即可在相应线段中插入字符函数前添加下列函数,即可在相应线段中插入字符“0”VOIDCALLBACKDrawZero(intX,inty,LPARAMlpData)CDC*pDC;pDC=(CDC*)lpData;if(X%20=0)pDC-TextOut(X,y,_T(0);再在书上代码:再在书上代码:pDC-MoveTo(100,100);pDC-LineTo(200,200);下添加下列语句:下添加下列语句::LineDDA(
9、100,100,200,200,(LINEDDAPROC)DrawZero,(long)pDC); /画“0”函数即可在直线段(即可在直线段(100,100)到()到(200,200)上每隔)上每隔20个段位长度个段位长度处输出一个处输出一个“0”符号。符号。其运行结果如下图所示:其运行结果如下图所示:5.分析总结,并提交实验报告。(略)分析总结,并提交实验报告。(略)注:各函数说明如下。注:各函数说明如下。1CDC:MoveToCPointMoveTo(intx,inty);ReturnValueThex-andy-coordinatesofthepreviouspositionasaCPo
10、intobject.ParametersxSpecifiesthelogicalx-coordinateofthenewposition.ySpecifiesthelogicaly-coordinateofthenewposition.RemarksMovesthecurrentpositiontothepointspecifiedbyxandy(orbypoint).2CDC:LineToBOOLLineTo(intx,inty);ReturnValueNonzeroifthelineisdrawn;otherwise0.ParametersxSpecifiesthelogicalx-coo
11、rdinateoftheendpointfortheline.ySpecifiesthelogicaly-coordinateoftheendpointfortheline.RemarksDrawsalinefromthecurrentpositionupto,butnotincluding,thepointspecifiedbyxandy(orpoint).Thelineisdrawnwiththeselectedpen.Thecurrentpositionissettox,yortopoint.3CPen:CreatePenBOOLCreatePen(intnPenStyle,intnWi
12、dth,COLORREFcrColor);ReturnValueNonzero,orthehandleofalogicalpen,ifsuccessful;otherwise0.ParametersnPenStyleSpecifiesthestyleforthepen.Foralistofpossiblevalues,seethenPenStyleparameterintheCPenconstructor.nWidthSpecifiesthewidthofthepen.ifthisvalueis0,thewidthindeviceunitsisalways1pixel,regardlessof
13、themappingmode.crColorContainsanRGBcolorforthepen.RemarksTheCreatePeninitializesapenwiththespecifiedstyle,width,andcolor.Thepencanbesubsequentlyselectedasthecurrentpenforanydevicecontext.4CDC:SelectObjectCPen*SelectObject(CPen*pPen);ReturnValueApointertotheobjectbeingreplaced.ThisisapointertoanobjectofoneoftheclassesderivedfromCGdiObject.ThereturnvalueisNULLifthereisanerror.ParameterspPenApointertoaCPenobjecttobeselected.RemarksSelectsanobjectintothedevicecontext.5、TextOut(x,y,_T(“0”);在点(在点(x,y)处输出符号)处输出符号“0”。