mfc课程论文

上传人:正** 文档编号:41698459 上传时间:2018-05-30 格式:DOC 页数:16 大小:79KB
返回 下载 相关 举报
mfc课程论文_第1页
第1页 / 共16页
mfc课程论文_第2页
第2页 / 共16页
mfc课程论文_第3页
第3页 / 共16页
mfc课程论文_第4页
第4页 / 共16页
mfc课程论文_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《mfc课程论文》由会员分享,可在线阅读,更多相关《mfc课程论文(16页珍藏版)》请在金锄头文库上搜索。

1、MFCMFC 编程及应用编程及应用课程设计报告课程设计报告题目:题目: 直线和曲线的绘制与计算器的编制直线和曲线的绘制与计算器的编制 时间:时间: 20112011 年年 6 6 月月 8 8 日日 评语:评语:一直一直线线和曲和曲线线的的绘绘制程序制程序1.程序的功能程序的功能简简介介本程序是单文档程序,程序的功能是按下鼠标左键可以画红色的直线,按下鼠标左键并同时按下 SHIFT 键可以画任意黑色的曲线。可以利用菜单对已存储的直线进行删除,在程序退出时,会提示对文档进行保存(只保存绘制的直线,曲线不予保存),可以将之前保存的图形重新绘制出来。2.程序的程序的设计设计思路和思路和实现实现方法方

2、法( (1) )对对直直线线和曲和曲线线的的绘绘制是在制是在视图类视图类中完成的中完成的在视图类里定义了四个私有成员变量:int m_nDraw;/显示画线状态,1 表示画线,0 表示不画线,在视图类的构/造函数里初始化赋值为 0HCURSOR m_hCursor;/光标句柄,改变画线时的光标形状CPoint m_ posOld;/当前鼠标位置(画线终点坐标)CPoint m_posOrigin;/鼠标起始位置(画线起点坐标)添加鼠标左键按下的消息响应函数,代码为void CNie_homeworkView:OnLButtonDown(UINT nFlags, CPoint point) /

3、TODO: Add your message handler code here and/or call defaultm_posOld=point;/画线的起点和终点位置都m_posOrigin=point;/初始化为鼠标按下的位置this-SetCapture();/连续跟踪鼠标消息m_nDraw=1;/开始画线m_hCursor=AfxGetApp()-LoadStandardCursor(IDC_CROSS);/设置画线的光标为十字形RECT theRect;GetClientRect(/得到视图窗口的客户区大小ClientToScreen(/进行坐标转换ClipCursor(/只在客

4、户区显示光标CView:OnLButtonDown(nFlags, point);添加鼠标移动消息响应函数,代码为:void CNie_homeworkView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultSetCursor(m_hCursor);/使用十字光标画线CClientDC dc(this);/产生当前窗口的设备对象if(m_nDraw)/画线状态为 1 时,画线CPen NewPen,*pOldPen;NewPen.Creat

5、ePen(PS_DASH,1,RGB(255,0,0);/产生一个像素宽的红色虚线画笔pOldPen=dc.SelectObject(/将当前画笔设置为刚刚产生的画笔属性if(nFlags dc.LineTo(point);/从终点继续画线this-m_posOld=point;/将鼠标位置赋给终点else /画直线dc.SetROP2(R2_WHITE);/设置画笔颜色为白色dc.MoveTo(m_posOrigin);dc.LineTo(m_posOld);/从起点到终点画直线dc.SetROP2(R2_COPYPEN);/使用画笔颜色dc.MoveTo(m_posOrigin);dc.L

6、ineTo(point);/从起点到鼠标位置画直线m_posOld=point;/把鼠标位置赋给终点dc.SelectObject(pOldPen);UpdateWindow();/通知视图窗口更新CView:OnMouseMove(nFlags, point);在鼠标左键放开时,完成直线或曲线的绘制。添加鼠标左键放开的消息响应函数:void CNie_homeworkView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientD

7、C dc(this);SetCursor(m_hCursor);/使用十字光标画线CPen *pOldPen;CPen NewPen(PS_SOLID,1,RGB(255,0,0);pOldPen=dc.SelectObject(dc.SetROP2(R2_NOT);/设置画笔颜色为与画板相反的颜色if(nFlags dc.LineTo(point);/从终点继续画线this-m_posOld=point;/将鼠标位置赋给终点elsedc.MoveTo(m_posOrigin);dc.LineTo(m_posOld);/从起点到终点画直线dc.SetROP2(R2_COPYPEN);/使用画笔

8、颜色dc.MoveTo(m_posOrigin);dc.LineTo(point);/从起点到鼠标位置画直线m_posOld=point;/把鼠标位置赋给终点CNie_homeworkDoc *pDoc=GetDocument();pDoc-AddLine(m_posOrigin.x,m_posOrigin.y,point.x,point.y);/将直线的信息存储到数组中this-m_nDraw =0;/画线完成,画线状态重设为 0:ReleaseCapture ();/释放鼠标ClipCursor(NULL);/允许鼠标点击this-m_hCursor=AfxGetApp()-LoadSta

9、ndardCursor(IDC_ARROW);/重设光标形状为箭头CView:OnLButtonUp(nFlags, point);( (2) )对对直直线线的存的存储储与与删删除是在文档除是在文档类类中中实现实现的的在工程中添加了一个新类 CLine,定义了四个类的私有成员,分别存放的是直线的起始点的 x、y 坐标。在文档类中添加了 CObArray 类的一个对象m_posArray 作为受保护的成员,里面存放的是指向 Cline 类的对象的指针。为了能够对数据进行存储,我们对 CLine 类和文档类进行了串行化处理。在CLine 类中进行了申明:protected:DECLARE_SERI

10、AL(CLine)/申明对数据的串行化处理在 CLine 类的构造函数之前也进行了申明:IMPLEMENT_SERIAL(CLine,CObject,1);在文档类中进行了申明:protected:DECLARE_DYNCREATE(CNie_homeworkDoc)在视图类的构造函数之前进行了申明:IMPLEMENT_DYNCREATE(CNie_homeworkView, CView)在 CLine 类和文档类中分别对数据串行化函数进行了重载。代码如下:void CLine:Serialize(CArchive void CNie_homeworkDoc:Serialize(CArchiv

11、eelse/ TODO: add loading code herem_posArray.Serialize(ar);为了能够利用菜单进行直线的删除操作,在文档类中定义了下列函数:public:void AddLine(int,int,int,int);/成员函数,将 CLine 类的对象添加进入数组内CLine *GetLineAt(int);/成员函数,获取数组内的一个 CLine 对象int GetNumberOfAllLines(void);/成员函数,获取数组中所有 CLine 对象的个数void DeleteContent(void);/删除数组中的 CLine 对象对菜单的撤销命

12、令,利用类向导连接了以下两个命令函数:void CNie_homeworkDoc:OnEditUndo() / TODO: Add your command handler code hereint nIndex=m_posArray.GetUpperBound();/获得数组中直线的条数if(nIndex=0)/数组中有直线时delete m_posArray.GetAt(nIndex);/得到最后一条直线m_posArray.RemoveAt(nIndex);/删除最后一条直线UpdateAllViews(NULL);/更新视窗SetModifiedFlag();void CNie_hom

13、eworkDoc:OnUpdateEditUndo(CCmdUI* pCmdUI) / TODO: Add your command update UI handler code herepCmdUI-Enable(m_posArray.GetSize();/数组中没有直线时,菜单项中撤销命令变为不可操作此外,在程序退出时,删除所有存储的直线,这只需在文档类的析构函数中调用DeleteContent();/程序结束时,删除动态数组占用的空间为了能够打开之前保存的图形,在 CLine 类里定义了如下成员函数void CLine:DrawLine(CDC *pDC) /CLine 类的成员函数,画

14、直线CPen NewPen(PS_SOLID,1,RGB(255,0,0);CPen *pOldPen=pDC-SelectObject(/产生画笔pDC-SetROP2(R2_COPYPEN);/使用画笔颜色pDC-MoveTo(m_nStartX,m_nStartY);pDC-LineTo(m_nEndX,m_nEndY);/从起点到终点画直线pDC-SelectObject(pOldPen);3.程序的程序的编编制制过过程中遇到的主要程中遇到的主要问题问题和解决和解决办办法法程序在编制过程中遇到的最大的一个问题是数据的串行化处理时,我只在CLine 类中进行了申明 protected:D

15、ECLARE_SERIAL(CLine)而忘记在 CLine 类的构造函数前添加申明IMPLEMENT_SERIAL(CLine,CObject,1);导致在编译过程中程序出错,而自己还不知道错在哪里。请教老师之后,我也查了相关的书籍(参考文献12),看到了书中的例子,对照着改了过来。4.程序程序还还可加以改可加以改进进的地方的地方程序还可以改进的地方有不少。第一个是画笔颜色和形状不可选,也没有设置橡皮擦,另一个就是对绘制的曲线不能进行存储。限于时间有限,并没有往这几个方面多加考虑。二二计计算器的算器的编编制程序制程序1.程序的功能程序的功能简简介介本程序是有模式对话框程序,嵌入在直线和曲线的

16、绘制程序内。程序的功能是可以利用该计算器进行一般的科学运算,包括加、减、乘、除、求倒数、求相反数、向下取整;求正弦值、余弦值、正切值、自然对数值、常数对数值、自然底数幂;求平方、立方,开平方、开立方,阶乘;对错误输入的更改或清除,对运算结果的输出显示以及更改或清除。2.程序的程序的设计设计思路和思路和实现实现方法方法( (1)参考了文献)参考了文献1中的第五章中的第五章首先在工程中建立一个新的类:class CCalculatorDlg : public CDialog类中定义一个成员变量 protected: HICON m_hIcon;/对话框的图标在 CalculatorDlg.cpp 文件中添加头文件“math.h“

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号