mfc简单绘图程序报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

简单绘图程序1需求说明1.1问题描述设计一个简单的绘图应用程序,可以绘制图形或自由绘制线段,可以更改颜色、画笔粗细、保存文件。1.2功能说明1.图形绘制功能:直线、椭圆、矩形。在菜单栏中选择需要的图形(也可以通过工具栏中选择)用鼠标便能在视图中绘出相应的图形。2.可以绘制自由线段3.对图形的操作:能通过菜单栏弹出对话框选择线宽、自定义颜色,也可以擦除绘制的线段。4.可以保存绘图文件,保存后打开可以继续绘制。2.1.3数据说明在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。在CDzyView类中添加一个私有变量xz;用来保存用户的选择(直线、矩形、椭圆、自由绘图)在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标停止移动时得到另外一个点。为视图类CDzyView分别捕获鼠标左键按下和弹起这两个消息。当鼠标左键按下时,需要将鼠标当前按下点保存至sx、sy,在鼠标移动停止后,将当前坐标保存至ex,ey.其他主要数据说明:intfd判断是否为自由绘图模式intw线宽intRRGB中的RintGRGB中的GintBRGB中的BCGraph类中intm_nType:保存后重绘时用户的选择intqdx;重绘起点xintqdy;重绘起点yintzdx;重绘终点xintzdy;重绘终点yCLine类中intcx;重绘线宽intsx;重绘起点xintsy;重绘起点yintzx;重绘终点xintzy;重绘终点yintw;重绘线宽自定义颜色对话框关联变量:IDC_EDIT_REDintm_RedIDC_EDIT_GREENintm_GreenIDC_EDIT_BLUEintm_BlueIDC_SCROLL_REDCScrollBarm_SredIDC_SLIDER_GREENCSliderCtrlm_SgreenIDC_SPIN_BLUECSpinButtonCtrlm_Sblue2分析、设计与实现2.1主要功能设计与实现2.1.1有关文档视图功能的设计与实现单文档结构可序列化的类CGraph从CObject派生可序列化的类CLine从CObject派生对话框类zdyyanse从CDialog派生2.1.2有关消息处理的设计与实现方案:需要响应的消息应有:鼠标移动、鼠标左键按下、鼠标左键抬起、菜单栏中的画矩形、画直线、画椭圆、自由绘图、更多选项中的自定义颜色、工具栏中的红色、蓝色、绿色、线宽1、线宽2、线宽3、橡皮擦。整体思路为,用户选择不同的功能后就响应相应的消息处理函数,给xz赋对应的值。选择不同的线宽,线色,即可改变画笔或画刷的属性。鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),得到绘制图形。ID_DRAW_ELLIPSE:COMMAND画椭圆ID_DRAW_LINE:COMMAND画直线ID_DRAW_RECTANGLE:COMMAND画矩形ON_WM_LBUTTONDOWN鼠标左键按下ON_WM_LBUTTONUP鼠标左键抬起ON_WM_MOUSEMOVE鼠标移动voidCDzyView::OnDrawEllipse(){//TODO:Addyourcommandhandlercodeherexz=3;}//当用户选择画椭圆,将变量xz赋值为3.voidCDzyView::OnDrawLine(){//TODO:Addyourcommandhandlercodeherexz=1;}//当用户选择画直线,将变量xz赋值为1.voidCDzyView::OnDrawRectangle(){//TODO:Addyourcommandhandlercodeherexz=2;}//当用户选择画矩形,将变量xz赋值为2.voidCDzyView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultsx=point.x;sy=point.y;fd=1;CView::OnLButtonDown(nFlags,point);}//鼠标左键按下,将当前坐标赋值给sx,sy并判断鼠标是否按下(fd=1)voidCDzyView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCClientDCdc(this);//this一般指向本窗口或当前活动视图CPenpen;//定义画笔pen.CreatePen(PS_SOLID,w,RGB(R,G,B));//创建画笔dc.SelectStockObject(NULL_BRUSH);dc.SelectObject(&pen);//获取画笔fd=0;switch(xz){case1:dc.MoveTo(sx,sy);dc.LineTo(ex,ey);break;case2:dc.Rectangle(sx,sy,ex,ey);break;case3:dc.Ellipse(sx,sy,ex,ey);break;}CGraph*pGraph=newCGraph(xz,sx,sy,ex,ey,w,R,G,B);GetDocument()-m_obArray.Add(pGraph);CView::OnLButtonUp(nFlags,point);CDzyDoc*pDoc=GetDocument();}//鼠标抬起时进行绘图,并将用户画的每一个图形对象保存到m_obArray中voidCDzyView::OnMouseMove(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultex=point.x;ey=point.y;CMainFrame*pFrame;pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;//获得指向主框架窗口的指针CStatusBar*pStatus=&pFrame-m_wndStatusBar;//获得指向主框架窗口上状态条的地址CStringstr;if(pStatus){str.Format(X=%d,point.x);pStatus-SetPaneText(1,str);//在第1个窗格中显示str的内容str.Format(Y=%d,point.y);pStatus-SetPaneText(2,str);//在第2个窗格中显示str的内容}if(xz==4){if(fd==1){CLine*pLine=newCLine(sx,sy,ex,ey,w,R,G,B);GetDocument()-m_lineObarry.Add(pLine);CClientDCdc(this);CPenpen;//定义画笔pen.CreatePen(PS_SOLID,w,RGB(R,G,B));//创建画笔dc.SelectObject(&pen);//获取画笔dc.MoveTo(sx,sy);dc.LineTo(point);sx=point.x;sy=point.y;}}CView::OnMouseMove(nFlags,point);}//获取终点坐标,并进行自由绘图操作,同时在状态栏中显示鼠标当前坐标。并保存自由绘图的坐标。voidCDzyView::OnW1(){//TODO:Addyourcommandhandlercodeherew=2;}//将线宽设为2voidCDzyView::OnW2(){//TODO:Addyourcommandhandlercodeherew=3;}//将线宽设为3voidCDzyView::Onw3(){//TODO:Addyourcommandhandlercodeherew=5;}//将线宽设为5voidCDzyView::OnBlue(){//TODO:AddyourcommandhandlercodehereR=0;G=0;B=255;}//工具栏中选择蓝色voidCDzyView::OnRed(){//TODO:AddyourcommandhandlercodehereR=255;G=0;B=0;}//工具栏中选择红色voidCDzyView::OnGreen(){//TODO:AddyourcommandhandlercodehereR=0;G=255;B=0;}//工具栏中选择绿色voidCDzyView::OnFreedraw(){//TODO:Addyourcommandhandlercodeherexz=4;}//自由绘图voidCDzyView::OnEraser(){//TODO:AddyourcommandhandlercodehereR=255;G=255;B=255;xz=4;}voidCDzyView::Onzdy(){//TODO:Addyourcommandhandlercodeherezdyyansedlg;//定义对话框对象intresult=dlg.DoModal();if(result==IDOK){R=dlg.m_Red;B=dlg.m_Blue;G=dlg.m_Green;}}2.1.3有关菜单、工具栏、状态栏设计与实现保持原有菜单并添加绘图工具--矩形颜色与线宽----颜色自由绘图更多椭圆线宽------线宽1直线线宽2线宽3工具栏:添加矩形、直线、椭圆的快速绘图按钮添加颜色快速选择按钮添加线宽快速选择按钮状态栏:设计显示当前鼠标坐标2.1.4有关对话框的设计与实现通过菜单点击更多选项中的自定义颜色弹出对话框用滚动条、滑动条、旋转按钮修改3种颜色的值,并改变改变预览值的填充色初始化单色的值为0~255,应把滚动控件值的变化范围限制在此区间,且初始值为0颜色的存储3种单色值存放在编辑框的关联变量中(int型)滚动控件当前值的变化和编辑框中数值的变化均应改变这3个关联变量(关联变量与编辑框、滚动控件联动)可在相应的消息处理函数中完成联动画图3种单色值每次变化,都重画椭圆,所以画椭圆的代码应放在每个消息处理函数中voidzdyyanse::OnChangeEditBlue(){//TODO:IfthisisaRICHEDITcontrol,thecontrolwillnot//sendthisnotificationunlessyouoverridetheCDialog::OnInitDialog()//functionandcallCRichEditCtrl().SetEventMask()//withtheENM_CHANGEflagORedintothemask.UpdateData();m_Sblue.SetPos(m_Blue);//TODO:Addyourcontrolnotificationhandlercodehere}voidzdyyanse::OnChangeEditGreen(){//TODO:IfthisisaRICHEDITcontrol,thecontrolwillnot//sendthisnotificationunlessyouoverridetheCDialog::OnInitDialog()//functionandcallCRichEditCtrl().SetEventMask()//withtheENM_CHANGEflagORedintothemask.UpdateData();m_Sgreen.SetPos(m_Green);//TODO:Addyourcontrolnotificationhandlercodehere}voidzdyyanse::OnChangeEditRed(){

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功