欢迎来到天天文库
浏览记录
ID:47487153
大小:79.00 KB
页数:18页
时间:2020-01-12
《MFC课程论文》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《MFC编程及应用》课程设计报告题目:直线和曲线的绘制与计算器的编制时间:2011年6月8日评语:一.直线和曲线的绘制程序1.程序的功能简介本程序是单文档程序,程序的功能是按下鼠标左键可以画红色的直线,按下鼠标左键并同时按下SHIFT键可以画任意黑色的曲线。可以利用菜单对已存储的直线进行删除,在程序退出时,会提示对文档进行保存(只保存绘制的直线,曲线不予保存),可以将之前保存的图形重新绘制出来。2.程序的设计思路和实现方法(1)对直线和曲线的绘制是在视图类中完成的在视图类里定义了四个私有成员变量:intm_nDraw;//显示画线状态,1表示画线,0表示不画线,
2、在视图类的构//造函数里初始化赋值为0HCURSORm_hCursor;//光标句柄,改变画线时的光标形状CPointm_posOld;//当前鼠标位置(画线终点坐标)CPointm_posOrigin;//鼠标起始位置(画线起点坐标)添加鼠标左键按下的消息响应函数,代码为voidCNie_homeworkView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultm_posOld=point;//画线的起点和终点位置都m_pos
3、Origin=point;//初始化为鼠标按下的位置this->SetCapture();//连续跟踪鼠标消息m_nDraw=1;//开始画线m_hCursor=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//设置画线的光标为十字形RECTtheRect;GetClientRect(&theRect);//得到视图窗口的客户区大小ClientToScreen(&theRect);//进行坐标转换ClipCursor(&theRect);//只在客户区显示光标CView::OnLButtonDown(nFlags,poin
4、t);}添加鼠标移动消息响应函数,代码为:voidCNie_homeworkView::OnMouseMove(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultSetCursor(m_hCursor);//使用十字光标画线CClientDCdc(this);//产生当前窗口的设备对象if(m_nDraw)//画线状态为1时,画线{CPenNewPen,*pOldPen;NewPen.CreatePen(PS_DASH,1,RGB(255,0,0));//产生
5、一个像素宽的红色虚线画笔pOldPen=dc.SelectObject(&NewPen);//将当前画笔设置为刚刚产生的画笔属性if(nFlags&MK_SHIFT)//按下SHIFT键时,画任意曲线{dc.MoveTo(this->m_posOld);dc.LineTo(point);//从终点继续画线this->m_posOld=point;//将鼠标位置赋给终点}else//画直线{dc.SetROP2(R2_WHITE);//设置画笔颜色为白色dc.MoveTo(m_posOrigin);dc.LineTo(m_posOld);//从起点到终点画直线dc
6、.SetROP2(R2_COPYPEN);//使用画笔颜色dc.MoveTo(m_posOrigin);dc.LineTo(point);//从起点到鼠标位置画直线m_posOld=point;//把鼠标位置赋给终点}dc.SelectObject(pOldPen);UpdateWindow();//通知视图窗口更新}CView::OnMouseMove(nFlags,point);}在鼠标左键放开时,完成直线或曲线的绘制。添加鼠标左键放开的消息响应函数:voidCNie_homeworkView::OnLButtonUp(UINTnFlags,CPointpo
7、int){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCClientDCdc(this);SetCursor(m_hCursor);//使用十字光标画线CPen*pOldPen;CPenNewPen(PS_SOLID,1,RGB(255,0,0));pOldPen=dc.SelectObject(&NewPen);dc.SetROP2(R2_NOT);//设置画笔颜色为与画板相反的颜色if(nFlags&MK_SHIFT)//按下SHIFT键时,画任意曲线{dc.MoveTo(this->m_posO
8、ld);dc.LineT
此文档下载收益归作者所有