mfc简单绘图程序报告word文档良心出品Word格式文档下载.docx
《mfc简单绘图程序报告word文档良心出品Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《mfc简单绘图程序报告word文档良心出品Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
intfd判断是否为自由绘图模式
intw线宽
intRRGB中的R
intGRGB中的G
intBRGB中的B
CGraph类中
intm_nType:
保存后重绘时用户的选择
intqdx;
重绘起点x
intqdy;
重绘起点y
intzdx;
重绘终点x
intzdy;
重绘终点y
CLine类中
intcx;
重绘线宽
intsx;
intsy;
intzx;
intzy;
intw;
自定义颜色对话框关联变量:
IDC_EDIT_REDintm_Red
IDC_EDIT_GREENintm_Green
IDC_EDIT_BLUEintm_Blue
IDC_SCROLL_REDCScrollBarm_Sred
IDC_SLIDER_GREENCSliderCtrlm_Sgreen
IDC_SPIN_BLUECSpinButtonCtrlm_Sblue
2分析、设计与实现
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:
Addyourcommandhandlercodehere
xz=3;
}//当用户选择画椭圆,将变量xz赋值为3.
OnDrawLine()
xz=1;
}//当用户选择画直线,将变量xz赋值为1.
OnDrawRectangle()
xz=2;
}//当用户选择画矩形,将变量xz赋值为2.
OnLButtonDown(UINTnFlags,CPointpoint)
Addyourmessagehandlercodehereand/orcalldefault
sx=point.x;
sy=point.y;
fd=1;
CView:
OnLButtonDown(nFlags,point);
}//鼠标左键按下,将当前坐标赋值给sx,sy并判断鼠标是否按下(fd=1)
OnLButtonUp(UINTnFlags,CPointpoint)
CClientDCdc(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);
case3:
dc.Ellipse(sx,sy,ex,ey);
}
CGraph*pGraph=newCGraph(xz,sx,sy,ex,ey,w,R,G,B);
GetDocument()->
m_obArray.Add(pGraph);
OnLButtonUp(nFlags,point);
CDzyDoc*pDoc=GetDocument();
}//鼠标抬起时进行绘图,并将用户画的每一个图形对象保存到m_obArray中
OnMouseMove(UINTnFlags,CPointpoint)
Addyourmessagehandlercodehereand/orcalldefault
ex=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的内容
Y=%d"
point.y);
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);
CPenpen;
dc.MoveTo(sx,sy);
dc.LineTo(point);
sy=point.y;
OnMouseMove(nFlags,point);
}//获取终点坐标,并进行自由绘图操作,同时在状态栏中显示鼠标当前坐标。
并保存自由绘图的坐标。
OnW1()
w=2;
}//将线宽设为2
OnW2()
w=3;
}//将线宽设为3
Onw3()
w=5;
}//将线宽设为5
OnBlue()
R=0;
G=0;
B=255;
}//工具栏中选择蓝色
OnRed()
R=255;
B=0;
}//工具栏中选择红色
OnGreen()
G=255;
}//工具栏中选择绿色
OnFreedraw()
xz=4;
}//自由绘图
OnEraser()
}
Onzdy()
zdyyansedlg;
//定义对话框对象
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种颜色的值,并改变改变预览值的