基于C++net的绘图软件的实现课程设计报告书.docx
《基于C++net的绘图软件的实现课程设计报告书.docx》由会员分享,可在线阅读,更多相关《基于C++net的绘图软件的实现课程设计报告书.docx(10页珍藏版)》请在冰豆网上搜索。
基于C++net的绘图软件的实现课程设计报告书
VC++.net程序设计
课程设计报告书
题目:
绘图软件的设计
班级:
0991151
学号:
1099115113
姓名:
姜远飞
教师:
姚璐
周期:
2010.12.27—2010.12.31
成绩:
2010年12月30日
《绘图软件的设计》
一、课程设计的目的与要求
(一)课程设计目的与任务
用VC++.NET实现画图软件的功能。
可以实现圆、矩形、画笔的绘图,并能选择相应的边框颜色和填充颜色,选择线宽和线的类型。
(二)题目要求
单文档应用程序,能够选择图形的类型(圆,矩形,直线,画笔),能够选择图形的颜色,能够对绘制的图形进行颜色填充,能够选择图形的线型(如实线,点线,虚线等),能够选择画线的颜色和线的宽度。
二、设计正文
1系统分析和开发背景
用VC++.NET开发画图应用软件的功能。
实现和用户的交互,根据用户的选择来实现相应图形的绘制。
2功能详细描述
以菜单选择为主,根据用户的不同菜单选择来改变当前所要绘制的图形。
用“画图”菜单下的“类型”菜单来选择所要绘制的图形是圆、矩形、直线还是画笔。
用“画图”菜单下的“颜色”菜单来编辑所要绘制图形的边框颜色。
用“画图”菜单下的“线性”菜单来选择边框的线性(实线、虚线、点线)。
用“画图”菜单下的“线宽”菜单来选择边框的宽度。
用“画图”菜单下的“填充”菜单来实现对所绘制的圆和矩形进行颜色填充。
用“画图”菜单下的“橡皮”菜单来实现对所绘制的图形进行擦除。
3、数据结构和数据库设计
4、主要功能逻辑过程和实现算法
图的绘制主要在鼠标的左键按下、鼠标移动、鼠标左键松开的事件中来完成。
类型、颜色、线形、线宽、填充、橡皮等都用相应的变量值来表示。
当选择某一种操作后,相应的变量值会改变,依次来判断用户的选择。
实现算法如下:
voidChuatuView:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//按下鼠标左键
if(type==5)
{
p1=point;
medc=newCClientDC(this);
medc->SelectStockObject(WHITE_PEN);
medc->SelectStockObject(WHITE_BRUSH);
pdc->SelectStockObject(BLACK_PEN);
pdc->SelectStockObject(WHITE_BRUSH);
pdc->Rectangle(p1.x-xpwidth,p1.y-xpwidth,p1.x+xpwidth,p1.y+xpwidth);
}
else
{
p1=p2=point;
pen.CreatePen(style,width,color);
pdc->SelectObject(&pen);
if(tc)
{
bsh.CreateHatchBrush(tcstyle,tccolor);
pdc->SelectObject(&bsh);
}
else
{
pdc->SelectStockObject(NULL_BRUSH);
}
pdc->SetROP2(R2_NOTXORPEN);
}
b=true;
CView:
:
OnLButtonDown(nFlags,point);
}
voidChuatuView:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//移动鼠标
if(!
b)
return;
if(type==1)
{
pdc->MoveTo(p1.x,p1.y);
pdc->LineTo(p2.x,p2.y);
p2=point;
pdc->MoveTo(p1.x,p1.y);
pdc->LineTo(p2.x,p2.y);
}
elseif(type==2)
{
pdc->Ellipse(p1.x,p1.y,p2.x,p1.y+(p2.x-p1.x));
p2=point;
pdc->Ellipse(p1.x,p1.y,p2.x,p1.y+(p2.x-p1.x));
}
elseif(type==3)
{
pdc->Rectangle(p1.x,p1.y,p2.x,p2.y);
p2=point;
pdc->Rectangle(p1.x,p1.y,p2.x,p2.y);
}
elseif(type==4)
{
pdc->MoveTo(p1.x,p1.y);
pdc->LineTo(point.x,point.y);
p1=point;
}
elseif(type==5)
{
medc->Rectangle(p1.x-xpwidth,p1.y-xpwidth,p1.x+xpwidth,p1.y+xpwidth);
p1=point;
pdc->Rectangle(p1.x-xpwidth,p1.y-xpwidth,p1.x+xpwidth,p1.y+xpwidth);
}
CView:
:
OnMouseMove(nFlags,point);
}
voidChuatuView:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//释放鼠标左键
if(type==5)
{
medc->Rectangle(p1.x-xpwidth,p1.y-xpwidth,p1.x+xpwidth,p1.y+xpwidth);
}
else
{
pdc->SetROP2(R2_COPYPEN);
if(type==1)
{
pdc->MoveTo(p1.x,p1.y);
pdc->LineTo(point.x,point.y);
}
elseif(type==2)
{
pdc->Ellipse(p1.x,p1.y,point.x,p1.y+(point.x-p1.x));
}
elseif(type==3)
{
pdc->Rectangle(p1.x,p1.y,point.x,point.y);
}
elseif(type==4)
{
pdc->MoveTo(p1.x,p1.y);
pdc->LineTo(point.x,point.y);
}
}
b=false;
CView:
:
OnLButtonUp(nFlags,point);
}
5、界面设计
(“类型”菜单)
(“颜色”菜单)
(“线性”菜单)
(“线宽”菜单)
(“填充”菜单)
(“橡皮”菜单)
6、系统测试
三、小组成员分工说明
独立完成
四、课程设计总结或结论
1课程设计过程中出现的技术难点和解决方法:
解决根据用户的不同选择来构造不同的画笔和画刷。
可以把创建画笔和画刷所需要的参数定义成相应的变量,用户的选择来改变某个参数所关联的变量的值,如创建画笔需要“画笔的类型”、“画笔的宽度”、“画笔的颜色”就可以创建三个变量:
style\width\color来分别表示,这样就可以在绘制图形之前用这三个变量来创建画笔了。
从而实现绘制不同的图形边框。
2课程设计期间的主要收获:
对GDI工具的使用有了跟深刻的理解,对实现图形的绘制掌握了一定的基础。
3对今后课程设计的建议
提供一些有利的参考资料,以便在遇到问题时可以尽快解决。
五、参考文献
[1]梁兴柱,王建一,龚丹,林玉娥.VisualC++.NET程序设计.清华大学出版社
六、指导教师评阅意见
附录(其他必要资料)