《面向对象程序设计》实验报告题目面向程序设计学生姓名吴沭成学号1302130218专业班级信科2班指导老师朱世华面向对象实验一、cview类中cdc的使用1.实验目的熟悉VS++2010的开发平台,掌握CDC类的使用:文本的输出,数字的显示输出,点线图的绘制,位图的显示输出。2.实验内容(1)显示一首诗.(2)画一个坐标系,画函数sin(),(2,2)yxx的图像.(3)显示资源中的一幅位图.(4)GDI绘图之鼠标绘图.3.实验步骤:实验内容一:显示一首诗(1)创建一个名为Ex1的单文档MFC应用程序;(2)在视图类的源文件中编辑ondraw()函数,添加如下代码:voidCEx1_1View::OnDraw(CDC*pDC){CEx1_1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加绘制代码CClientDCdc(this);TEXTMETRICtm;dc.GetTextMetrics(&tm);intnLineHeight=tm.tmHeight+tm.tmExternalLeading;dc.TextOut(10,1*nLineHeight,CString(春晓));dc.TextOut(10,2*nLineHeight,CString(春眠不觉晓,));dc.TextOut(10,3*nLineHeight,CString(处处闻啼鸟。));dc.TextOut(10,4*nLineHeight,CString(夜来风雨声,));dc.TextOut(10,5*nLineHeight,CString(花落知多少。));}(3)运行程序得到如下结果:实验内容二:画一个坐标系,画函数的图像(1)创建一个名为Ex1_2的单文档MFC运用程序;(2)在视图类的源文件中编辑ondraw()函数,添加如下代码:voidCEx1_2View::OnDraw(CDC*pDC){CEx1_2Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加绘制代码CRectrectClient;this-GetClientRect(rectClient);pDC-SetMapMode(MM_ANISOTROPIC);//设置映射模式pDC-SetWindowExt(1000,1000);//设置窗口宽度pDC-SetViewportExt(rectClient.right,-rectClient.bottom);//设置视口宽度pDC-SetViewportOrg(rectClient.right/2,rectClient.bottom/2);//设置视口原-点//pDC-Ellipse(-500,500,500,-500);//开始画-坐标轴pDC-MoveTo(-500,0);pDC-LineTo(500,0);pDC-MoveTo(500,0);pDC-LineTo(490,10);pDC-MoveTo(500,0);pDC-LineTo(490,-10);pDC-MoveTo(0,-500);pDC-LineTo(0,500);pDC-MoveTo(0,500);pDC-LineTo(-10,490);pDC-MoveTo(0,500);pDC-LineTo(10,490);//结束画坐标轴for(inti=-4;i=4;i++){CStringstr;str.Format(_T(%d),i);pDC-MoveTo(i*100,-5);pDC-LineTo(i*100,+5);pDC-TextOutW(i*100,-5,str);}for(inti=-1;i=1;i++){if(i==0)continue;CStringstr;str.Format(_T(%d),i);pDC-MoveTo(-5,i*100);pDC-LineTo(+5,i*100);pDC-TextOutW(+5,i*100,str);}CPenmypen;COLORREFclr=RGB(255,0,0);CColorDialogdlg;if(dlg.DoModal()==IDOK){clr=dlg.GetColor();}mypen.CreatePen(PS_SOLID,5,clr);CPen*oldpen=pDC-SelectObject(&mypen);pDC-MoveTo(-400,(int)100*sin((float)-4));for(inti=-400;i=400;i++){floatix,iy;inty;ix=(float)i/100;iy=sin(ix);y=(int)100*iy;pDC-LineTo(i,y);}pDC-SelectObject(oldpen);}(3)运行程序得到如下结果:实验内容三:显示资源中的一幅位图。(1)创建一个名为Ex1_3的单文档MFC运用程序;(2)为文档添加位图资源:右键点击项目,单击“添加”菜单项,在打开的“添加资源”对话框里选择Bitmap,单击“导入”,打开文件对话框,选泽所要添加的位图资源。(3)在视图类的ondraw()函数中添加如下代码:voidCEx1_3View::OnDraw(CDC*pDC){CEx1_3Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加绘制代码CBitmapBitmap;Bitmap.LoadBitmapW(IDB_BITMAP1);//将位图装入内存CDCMemDC;MemDC.CreateCompatibleDC(pDC);//创建内存设备环境CBitmap*OldBitmap=MemDC.SelectObject(&Bitmap);BITMAPbm;//创建BITMAP结构变量Bitmap.GetBitmap(&bm);//获取位图信息pDC-BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);pDC-SelectObject(OldBitmap);//恢复设备环境}(4)运行程序得到如下结果:实验内容四:GDI绘图之鼠标绘图.(1)创建一个名为Ex1_4的单文档MFC运用程序;(2)在类视图中选择视图类,在视图类中添加消息WM_LBOTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE从而得到消息响应函数OnLButtonDown(),OnLButtonUp(),OnMouseMove();(3)然后再在视图类中添加变量CPointm_ptPrev;CPointm_ptOringin;分别记录当前点和起始点的位置。(4)在如下函数中添加如下代码;voidCEx1_4View::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值m_bTrack=true;m_ptForm=point;m_ptTo=point;SetCapture();CView::OnLButtonDown(nFlags,point);}voidCEx1_4View::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值CDC*pDC=GetDC();if(m_bTrack){pDC-SetROP2(R2_NOT);pDC-MoveTo(m_ptForm);pDC-LineTo(m_ptTo);pDC-MoveTo(m_ptForm);pDC-LineTo(point);m_ptTo=point;pDC-SetROP2(R2_COPYPEN);}ReleaseCapture();m_bTrack=false;CView::OnLButtonUp(nFlags,point);}voidCEx1_4View::OnMouseMove(UINTnFlags,CPointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值CDC*pDC=GetDC();if(m_bTrack){pDC-SetROP2(R2_NOT);pDC-MoveTo(m_ptForm);pDC-LineTo(m_ptTo);pDC-MoveTo(m_ptForm);pDC-LineTo(point);m_ptTo=point;pDC-SetROP2(R2_COPYPEN);}CView::OnMouseMove(nFlags,point);}(5)运行程序得到如下的结果:实验心得:熟悉点线图的绘制,了解了显示输出。实验二、模式对话框及通用对话框的使用一.实验目的掌握对话框中数据交换的技术。常用控件的使用,CfileDialog的使用.二.实验内容(1)求两正整数的最大公约数和最小公倍速数,用一个函数求最大公约数,另一个函数求最小公倍数。要求:两正整数从对话框输入。将最大公约数和最小公倍数在ondraw()函数中输出。(2)使用Cfile和CfileDialog及atl的image类显示输出图像.(3)在视图类中集成Richedit控件,然后显示一个文本文件或rtf文件.三.实验步骤:实验内容一:求两正整数的最大公约数和最小公倍速数,用一个函数求最大公约数,另一个函数求最小公倍数。要求:两正整数从对话框输入。将最大公约数和最小公倍数在ondraw()函数中输出。(1)创建一个名为Ex2_1的单文档MFC运用程序;(2)编辑菜单资源,添加一个名为“求值”的菜单项,设定菜单项“求值“的ID号为ID_SUM,并在视图类中添加消息响应函数OnSum().(3)新插入一对话框,编辑对话框资源,添加控件下图所示:(4)再添加以下代码:CSum::CSum(CWnd*pParent/*=NULL*/):CDialog(CSum::IDD,pParent){//{{AFX_DATA_INIT(CSum)m_firstnum=0;m_sencendnum=0;//}}AFX_DATA_INITResult=0;}voidCSum::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CSum)DDX_Text(pDX,IDC_FIRSTNUM,m_firstnum);DDX_Text(pDX,IDC_SENCENDNUM,m_sencendnum);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CSum,CDialog)//{{AFX_MSG_MAP(CSum)ON_BN_CLICKED(ID_MAX,OnMax)ON_BN_CLICKED(ID_MIN,OnMin)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CSummessagehandlersintCSum::GetFirstNum(){returnm_firstnum;}intCSum::GetSencendNum(){returnm_sencendnum;}voidCSum::OnMax(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intx=GetFirstNum();inty=GetSencendNum();Result=yue(x,y);this-EndDia