VCnet五次上机实验报告4.doc_第1页
VCnet五次上机实验报告4.doc_第2页
VCnet五次上机实验报告4.doc_第3页
VCnet五次上机实验报告4.doc_第4页
VCnet五次上机实验报告4.doc_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

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

文档简介

面向对象程序设计 姓 名:学 号:专业班级:指导老师: 数学科学与计算技术学院 2010年12月实验一 cview类中 cdc的使用1 实验目的 熟悉.net的开发平台,掌握CDC类的使用:文本的输出,数字的显示输出,点线图的绘制,位图的显示输出。2. 实验内容 (1) 显示一首诗。(2) 画一个坐标系,画函数的图像。(3) 显示资源中的一幅位图。 (4) GDI绘图之鼠标绘图.3 实验步骤 (1) 显示一首诗程序代码:void CgdiView:OnDraw(CDC* pDC)TEXTMETRIC tm;pDC-GetTextMetrics(&tm);int a=tm.tmHeight+tm.tmExternalLeading+20;pDC-SetMapMode(MM_TEXT);pDC-TextOut(300,10,_T(登楼); pDC-TextOut(300,30,_T(杜甫);pDC-TextOut(200,50,_T(花近高楼伤客心,万方多难此登临。);pDC-TextOut(200,50+a,_T(锦江春色来天地,玉垒浮云变古今。); pDC-TextOut(200,50+2*a,_T(北极朝廷终不改,西山寇盗莫相侵。); pDC-TextOut(200,50+3*a,_T(可怜后主还祠庙,日暮聊为梁甫吟。); 运行结果:(2)画一个坐标系,画函数的图像程序代码:void Cdemo04View:OnDraw(CDC* pDC)pDC-MoveTo(-200,0);pDC-LineTo(200,0);pDC-MoveTo(0,-100);pDC-LineTo(0,100);for (int i=-200;iMoveTo(i,0);pDC-LineTo(i,10);if (iTextOut(i-15,10,str);for (int j=-50;jMoveTo(0,j);pDC-LineTo(-10,j);str.Format(%d,j/50);if (j!=0)pDC-TextOut(-20,j-10,str);pDC-MoveTo(0,0);for (int x=-100;xLineTo(x,y);运行结果:(2) 显示资源中的一幅位图程序代码:void Cpicturedemo01View:OnDraw(CDC* pDC)Cpicturedemo01Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;CImage img;HRESULT hr = img.Load(filename);ASSERT(SUCCEEDED(hr);CRect r(CPoint(0,0),CPoint(img.GetWidth(),img.GetHeight();img.StretchBlt (*pDC,r,r,SRCCOPY);void Cpicturedemo01View:OnFromfile()CFileDialog fileDlg(TRUE); fileDlg.m_ofn.lpstrFilter=jpg Documents F:凤凰游;if(fileDlg.DoModal( )=IDOK)filename=fileDlg.GetPathName ( );InvalidateRect(NULL);void Cpicturedemo01View:OnFromres()CBitmap bitmap;CDC* pDC=GetDC();CDC dcMemory;bitmap.LoadBitmap (IDB_BITMAP1);dcMemory.CreateCompatibleDC (pDC);dcMemory.SelectObject (&bitmap);pDC-BitBlt (100,100,400,400,&dcMemory,0,0,SRCCOPY);运行结果:(4)GDI绘图之鼠标绘图.程序代码:添加消息函数OnLButtonDown,OnLButtonUp,OnMouseMove。1)void Cmousedemo4View:OnLButtonDown(UINT nFlags, CPoint point) SetCapture(); m_ptPrev=point; CView:OnLButtonDown(nFlags, point);void Cmousedemo4View:OnLButtonUp(UINT nFlags, CPoint point)if(GetCapture()!=this)return;CClientDC dc(this);dc.MoveTo(m_ptPrev);dc.LineTo(point);ReleaseCapture();CView:OnLButtonUp(nFlags, point);void Cmousedemo4View:OnMouseMove(UINT nFlags, CPoint point)if(GetCapture()!=this)return;CClientDC dc(this);dc.MoveTo(m_ptPrev);dc.LineTo(point);m_ptPrev=point;CView:OnMouseMove(nFlags, point);运行结果;2)void Cmousedemo3View:OnLButtonDown(UINT nFlags, CPoint point)m_bMouseDown = true;m_ptStart = point;m_ptOld = point;SetCapture();CRect rect;GetClientRect(&rect);ClientToScreen(&rect);ClipCursor(&rect);CView:OnLButtonDown(nFlags, point);void Cmousedemo3View:OnLButtonUp(UINT nFlags, CPoint point)if( m_bMouseDown )m_bMouseDown = false;ReleaseCapture();ClipCursor( NULL );CClientDC dc(this);dc.SetROP2( R2_NOT );dc.MoveTo( m_ptStart ); dc.LineTo( m_ptOld );dc.SetROP2( R2_COPYPEN );dc.MoveTo( m_ptStart ); dc.LineTo( point );CView:OnLButtonUp(nFlags, point);void Cmousedemo3View:OnMouseMove(UINT nFlags, CPoint point)if( m_bMouseDown )CClientDC dc(this);dc.SetROP2( R2_NOT );dc.MoveTo( m_ptStart );dc.LineTo( m_ptOld );dc.MoveTo( m_ptStart );dc.LineTo( point ); m_ptOld = point;CView:OnMouseMove(nFlags, point);运行结果:4 实验的处理1)诗行的行间距的确定TEXTMETRIC tm;pDC-GetTextMetrics(&tm);tm.tmHeight+tm.tmExternalLeading; 2)数学函数绘制时在视图类的头文件中加上#include”math.h”。 3)显示位图的CDC函数bitblt或stretchblt 使用。 实验二 模式对话框及通用对话框的使用1 实验目的 掌握对话框中数据交换的技术。常用控件的使用,CfileDialog的使用. 2. 实验内容 (1) 求两正整数的最大公约数和最小公倍速数,用一个函数求最大公约数,另一个函数求最小公倍数。要求 : 两正整数从对话框输入。将最大公约数和最小公倍数在ondraw()函数中输出。 (2) 使用Cfile和CfileDialog及atl的image类显示输出图像.(3) 在视图类中集成Richedit控件,然后显示一个文本文件或rtf文件.3 实验步骤 (1)程序代码:void CTwoProView:OnShowdlgone()OperOneDlg dlg;if(dlg.DoModal()=IDOK)CDC*pDC;TEXTMETRIC tm;pDC-GetTextMetrics(&tm);int a=tm.tmHeight+tm.tmExternalLeading+10;int max=getMaxCommon(dlg.num_01,dlg.num_02);int min=getMinCommon(dlg.num_01,dlg.num_02);char str20;CString s();sprintf(str,%d,dlg.num_01);s +=str;s += 和;sprintf(str,%d,dlg.num_02);s +=str;s += 的最大公约数和最小公倍数是;pDC-TextOutW(10,10,s);s=最大公约数: ;sprintf(str,%d,max);s +=str;pDC-TextOutW(30,10+a,s);s=最小公倍数: ;sprintf(str,%d,min);s +=str;pDC-TextOutW(30,10+2*a,s);int CTwoProView:getMaxCommon(int m,int n)int x,j;if(m=n)x=m;elsex=n;int i=1;while(i=n)x=m;elsex=n;while (!(x%m = 0 & x%n = 0)x+;return x;运行结果:(2)程序代码:void CTwoProView:OnShowpic()CFileDialog fileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,_T(图像文件|*.bmp;*.gif;*.jpg;*.png|),AfxGetMainWnd();if(fileDialog.DoModal()=IDOK)CImage img;HRESULT hr;hr=img.Load(fileDialog.GetPathName();if(hr=S_OK)CDC*pDC=GetDC();int width=img.GetWidth();int height=img. GetHeight();img.Draw(pDC-GetSafeHdc(),0,0,width,height,0,0,width,height);elseCDC*pDC=GetDC();pDC-TextOutW(300,100,_T(打开图片失败); 运行结果:(3)在View类里的OnDraw()函数里添加Richedit控件CRichEditCtrl*crctl=new CRichEditCtrl; crctl-Create(WS_VISIBLE|ES_MULTILINE|WS_CHILD|WS_VSCROLL|WS_BORDER,CRect(10,100,300,400),this,0);程序代码:void CTwoProView:OnShowfile()CFileDialog fileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,_T(文本文件(*.txt)|*.txt|),AfxGetMainWnd();if(fileDialog.DoModal()=IDOK)CString str;CStdioFile file;if(!file.Open(fileDialog.GetPathName(),CFile:modeRead)str=Fail to open a file!;crctl-SetWindowTextW(str);return;EDITSTREAM es;es.dwCookie=(DWORD)&file;es.pfnCallback=readFile;if(fileDialog.GetFileExt()=txt)crctl-StreamIn(SF_TEXT,es);else if(fileDialog.GetFileExt()=rtf)crctl-StreamIn(SF_RTF,es); 运行结果:4实验的处理1)添加辅助函数的方法,熟悉对话框数据交换,了解数据的输出方法和熟悉cdc类的使用. 2)使用image类应在视图类的头文件加上#include”atlimage.h”.3)Richedit控件中显示文本文件或rtf文件的方法见.net帮助实验三 编写一个单文档应用程序1 实验目的 练习菜单栏、工具栏及状态栏资源的创建和应用。2. 实验内容 在主菜单中增加【曲线】、【线宽】和【颜色】3个菜单项,【曲线】菜单中包含【正弦】和【余弦】两个菜单项;【线宽】菜单中包含【线宽2】和【线宽3】两个菜单项;【颜色】菜单中包含【红色】和【蓝色】两个菜单项。为该应用程序创建一个新工具栏和一个快捷菜单,工具栏包含4个按钮,分别与菜单项【线宽2】、【线宽3】、【红色】和【蓝色】相对应,快捷菜单上有【正弦】、【余弦】、【线宽2】、【线宽3】、【红色】和【蓝色】6个菜单项。在状态栏中增加一个窗格,用来显示曲线的类型、线宽以及颜色的提示信息。3 实验要求程序运行时,在视图窗口中显示坐标轴、曲线、曲线的属性、状态栏的提示以及所选菜单项的标记,并且都能够随着用户的选择而变化。4 实验步骤 程序代码:头文件:class CThirdProView : public CViewprotected:CThirdProView();DECLARE_DYNCREATE(CThirdProView)public:CThirdProDoc* GetDocument();void DrawCoordinate(CDC *pDC,COLORREF color,CString type);添加变量:public:CString functionType;int lineWidth;int color; bool isSinx;bool isRed;bool isLine2;public:virtual void OnDraw(CDC* pDC); virtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);为对话框添加函数:protected:afx_msg void OnMenuitemBlue();afx_msg void OnMenuitemCosx();afx_msg void OnMenuitemLine2();afx_msg void OnMenuitemLine3();afx_msg void OnMenuitemRed();afx_msg void OnMenuitemSinx();afx_msg void OnUpdateMenuitemLine2(CCmdUI* pCmdUI);afx_msg void OnUpdateMenuitemBlue(CCmdUI* pCmdUI);afx_msg void OnUpdateMenuitemCosx(CCmdUI* pCmdUI);afx_msg void OnUpdateMenuitemSinx(CCmdUI* pCmdUI);afx_msg void OnUpdateMenuitemRed(CCmdUI* pCmdUI);afx_msg void OnUpdateMenuitemLine3(CCmdUI* pCmdUI);afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);afx_msg void OnCancelMode();源文件:ThirdProView:CThirdProView()functionType=sinx;lineWidth=2;color=RGB(255,0,0);isRed=true;isLine2=true;isSinx=true;CString str;pDC-MoveTo(0,j); void CThirdProView:OnDraw(CDC* pDC)CThirdProDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CString str;str.Format(曲线的属性:类型:%s;,functionType);if(lineWidth=2)str=str+线宽:2;颜色:;elsestr=str+线宽:3;颜色:;if (color=RGB(255,0,0)str=str+红色;elsestr=str+蓝色;pDC-TextOut(50,50,str);CPen newPen(PS_SOLID,lineWidth,color);CPen *pOldPen=pDC-SelectObject(&newPen);DrawCoordinate(pDC,0,functionType);pDC-SelectObject(pOldPen);CMainFrame* pMF=(CMainFrame*)AfxGetApp()-GetMainWnd(); pMF-m_wndStatusBar.SetPaneText(1,str,TRUE);void CThirdProView:OnMenuitemBlue() color=RGB(0,0,255);isRed=false;Invalidate();void CThirdProView:OnMenuitemCosx() functionType=cosx;isSinx=false;Invalidate();void CThirdProView:OnMenuitemLine2() lineWidth=2;isLine2=true;Invalidate();void CThirdProView:OnMenuitemLine3() lineWidth=5;isLine2=false;Invalidate();void CThirdProView:OnMenuitemRed() color=RGB(255,0,0);isRed=true;Invalidate();void CThirdProView:OnMenuitemSinx() functionType=sinx;isSinx=true;Invalidate();void CThirdProView:OnUpdateMenuitemLine2(CCmdUI* pCmdUI) pCmdUI-SetCheck(isLine2);void CThirdProView:OnUpdateMenuitemLine3(CCmdUI* pCmdUI) pCmdUI-SetCheck(!isLine2);void CThirdProView:OnUpdateMenuitemBlue(CCmdUI* pCmdUI) pCmdUI-SetCheck(!isRed);void CThirdProView:OnUpdateMenuitemCosx(CCmdUI* pCmdUI) pCmdUI-SetCheck(!isSinx);void CThirdProView:OnUpdateMenuitemSinx(CCmdUI* pCmdUI) pCmdUI-SetCheck(isSinx);void CThirdProView:OnUpdateMenuitemRed(CCmdUI* pCmdUI) pCmdUI-SetCheck(isRed);void CThirdProView:DrawCoordinate(CDC *pDC,COLORREF color,CString type)CRect clientRect;GetClientRect(&clientRect);pDC-SetViewportOrg(clientRect.Width()/2,clientRect.Height()/2);pDC-MoveTo(-200,0);pDC-LineTo(200,0);pDC-TextOut(210,-20,X轴);pDC-MoveTo(0,-100);pDC-LineTo(0,100);pDC-TextOut(-10,-110,Y轴);for (int i=-200;iMoveTo(i,0);pDC-LineTo(i,10);if (iTextOut(i-15,10,str);for (int j=-50;jLineTo(-10,j);str.Format(%d,j/50);if (j!=0)pDC-TextOut(-20,j-10,str);if (type=sinx)pDC-MoveTo(0,0);for (int x=-200;xLineTo(x,y);elsepDC-MoveTo(-200,-50);for (int x=-200;xLineTo(x,y);void CThirdProView:OnContextMenu(CWnd* pWnd, CPoint point) CMenu mainMenu;mainMenu.LoadMenu(IDR_MENU_POP); CMenu* typeMenu=mainMenu.GetSubMenu(0);typeMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x,point.y, this); 运行结果:5 实验处理1)在源文件中添加#include #define PI 3.14159262)添加的函数中是保护函数类的。实验四 数据的封装及文档、视图结构的使用1 实验目的 掌握数据的封装技术,文档、视图的交互,Cformview类及链表的使用。 2. 实验内容 1) 自定义一个学生信息类,包括学生姓名,电话,地址,学号。使用链表模板存贮班级学生信息,使用Cformview显示,要求有数据导航功能(参考.附件1,)2)对附件3加以修改,增加对颜色,笔宽的处理(参考附件2) 实验步骤 程序代码:CStudentInfoVo:CStudentInfoVo(int no,CString name,CString telphone,CString address)this-number=no;this-name=name;this-telphone=telphone;this-address=address;添加学生对象到list中CFourthPro1Doc:CFourthPro1Doc()CStudentInfoVo stu1(1,_T(yao)云南);CStudentInfoVo stu2(2,_T(jing)北京);CStudentInfoVo stu3(3,_T(deng)大理);CStudentInfoVo stu4(4,_T(ou),1511633333,上海);CStudentInfoVo stu5(5,_T(li)武汉);studentArray.Add(stu1);studentArray.Add(stu2);studentArray.Add(stu3);studentArray.Add(stu4);studentArray.Add(stu5);对变量初始化:CFourthPro1View:CFourthPro1View(): CFormView(CFourthPro1View:IDD)m_no = 0;m_address = _T();m_name = _T();m_telphone = _T();studentIndex=1;void CFourthPro1View:DoDataExchange(CDataExchange* pDX)DDX_Text(pDX, IDC_EDIT_NO, m_no);DDX_Text(pDX, IDC_EDIT_ADDRESS, m_address);DDX_Text(pDX, IDC_EDIT_NAME, m_name);DDX_Text(pDX, IDC_EDIT_TELPHONE, m_telphone);CFormView:DoDataExchange(pDX);void CFourthPro1View:OnInitialUpdate()GetParentFrame()-RecalcLayout();ResizeParentToFit();UpdateStudentShow(); CFormView:OnInitialUpdate();void CFourthPro1View:UpdateStudentShow()CFourthPro1Doc *pDoc=GetDocument();CStudentInfoVo student=pDoc-studentArray.GetAt(studentIndex-1);m_no=student.number;m_name=;m_telphone=student.telphone;m_address=student.address;UpdateData(false);添加函数:protected:afx_msg void OnMenuHome();afx_msg void OnMenuPrevious();afx_msg void OnMenuNext();afx_msg void OnMenuEnd();void CFourthPro1View:OnMenuHome() studentIndex=1;UpdateStudentShow();void CFourthPro1View:OnMenuPrevious() studentIndex-;if (studentIndex=6)studentIndex=5;UpdateStudentShow();void CFourthPro1View:OnMenuEnd() studentIndex=5;UpdateStudentShow();4 运行结果:在附件的基础上增加代码:在菜单上新添一项color select,添加事件处理程序,然后在添加代码处添加代码;void CAView:OnSelectColor()CColorDialog dialog;if(dialog.DoModal()=IDOK)color=dialog.GetColor();Invalidate();在头文件添加变量:public:CaDoc* GetDocument() const;int color;在void CScribbleView:OnLButtonUp(UINT, CPoint point)的源代码的基础上添加CPen newPen(PS_SOLID,2,color);dc.SelectObject(pOldPen);在void CScribbleView:OnMouseMove(UINT, CPoint point) 的源代码的基础上添加CPen newPen(PS_SOLID,2,color);dc.SelectObject(pOldPen);运行结果:4 实验处理 1)添加头文件:#include StudentInfoVo.h2)在表中添加学生对象到列表中3)添加变量color实验五、分裂视图及多文档应用程序1 实验目的 熟悉.net的开发平台,掌握分裂视图的方法及视图同步;掌握多文档应用程序框架的使用及文档打开方法.2. 实验内容 (4) 使用单文档应用研究程序及分裂视图方法,左窗格使用CformView,添加两个列表框,一个设定颜色红、绿、兰;一个设定sin( )、cos( );右窗格使用Cview, 画一个坐标系,显示正余弦图像。(2)参考msdn示例之mdi;在多文档应用程序框架下使用菜单分别打开两个不同的文档。一个文档及相关视图用来进行诗行显示;另一个实现正、余弦曲线显示。. 诗行显示,正、余弦曲线显示由菜单控制。3 实验步骤 实验代码:(1)设计左边对话框的代码:void CFifthProView:OnInitialUpdate()CFormView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();m_colorBox.InsertString(0,红色);m_colorBox.InsertString(1,绿色);m_colorBox.InsertString(2,蓝色);m_functionBox.InsertString(0,sin(x);m_functionBox.InsertString(1,cos(x);m_colorBox.SetCurSel(0);m_functionBox.SetCurSel(0);选择颜色:void CFifthProView:OnSelchangeComboColor() CFifthProDoc* pDoc=GetDocument(); int nSelect=m_colorBox.GetCurSel();m_colorBox.GetLBText(nSelect,pDoc-color);选择函数:void CFifthProView:OnSelchangeComboFunction() CFifthProDoc* pDoc=GetDocument(); int nSelect=m_functionBox.GetCurSel();m_functionBox.GetLBText(nSelect,pDoc-type);void CFifthProView:OnButtonDraw() CFifthProDoc* pDoc=GetDocument();pDoc-isAllowDrawing=true;pDoc-UpdateAllViews(this);设计右边对话框的代码:void CMathImageView:OnDraw(CDC* pDC)CFifthProDoc* pDoc = GetDocument(); if (pDoc-isAllowDrawing)DrawMathFunction(pDC);void CMathImageView:DrawMathFunction(CDC *pDC)CFifthProDoc* pDoc = GetDocument();COLORREF penColor;if(pDoc-color=红色)penColor=RGB(255,0,0);else if(pDoc-color=绿色)penColor=RGB(0,255,0);elsepenColor=RGB(0,0,255);CPen newPen(PS_SOLID,3,penColor);CPen *pOldPen=pDC-SelectObject(&newPen);DrawCoordinate(pDC,penColor,pDoc-type);pDC-SelectObject(pOldPen);void CMathImageView:DrawCoordinate(CDC *pDC,COLORREF color,CString type)CRect clientRect;G

温馨提示

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

评论

0/150

提交评论