Windows程序设计报告(绘图软件)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1CAD软件的概括说明:
(1)功能简介:主要有绘画、工具、图形修改等功能。绘画可以实现对矩形、圆形、直线、
扇形、弧线、圆角矩形等自定义画图;工具中有画线、画笔、画刷橡皮等功能;图形修改包括图形移动、图形的放大与缩小、图形的复制与粘贴等,还有图形选择和取消功能作为其他功能的辅助条件。
(2)功能具体说明:
绘制矩形:
绘制圆形:
绘制直线:
绘制扇形:
绘制弧线:
绘制圆角矩形:
画线:画线前要先选择画笔颜色和大小
选择中、绿色然后画线:
橡皮;使用橡皮可以擦拭所绘制的图形和画线
画刷:先选择颜色,然后可用画刷绘制扇形、弧线、圆角矩形,这里选择蓝色
图形移动:仅可移动矩形、圆形和直线,移动前要先进行图形选择
改变大小:改变前先选择然后按键改变
图形复制与粘贴:复制前先选择要复制的图形,粘贴会在图形右10处产生新的相同的
图形
2.主要功能的实现过程及对象的代码和资源
首先新建了一个继承于CObject 的类CGrapghic 类作为各个图形的基类,由这个
基类派生出CRECT 类、CLINE 类、CCIRCLE 类等三个图形类,后写了一个继承于CObArray 的列表类CMapList 类用来存储图形来达到重绘的目的。
CGraphic 类
CMapList类
CRECT类
CLINE类
CCIRCLE类
在Doc类中加入了三个列表成员和一个矩形成员:
CMapList m_MapList;//当前绘制的图形的列表
CObArray m_SelectedList;//选中图形列表
CMapList m_CopyList;//复制的图形列表
CRect rect;
Vie类中加入的成员:
CPoint pt;
CPoint pt2;
int n; //判断图形的种类
int flag; //判断是否画线
int eflag;//判断是否用橡皮
int bflag;//判断是否用画刷
int size;//画笔的大小
COLORREF m_Color; //颜色
CPen oldpen; //画笔
bool ifmove;//判断是否移动
int width; //图形矩形区域与鼠标位置的x距离
int large; //图形矩形区域与鼠标位置的y距离
bool m_select; //判断是否选择图形
bool ifin; //判断光标是否在图形内
加入了一个函数用来控制图形的选择:
void EditLButtonUp(UINT nFlags,CPoint point); //选中后鼠标抬起下面是各个功能的代码实现:
绘图在View类中的OnDraw函数中实现:
void CMy1209View::OnDraw(CDC* pDC)
{
// TODO: add draw code for native data here
CMy1209Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//循环绘制图元列表,保证绘制过的图形不会消失
for(int i=0;i < pDoc->m_MapList.GetSize();i++)
{
CGraphic* pMap = (CGraphic*) pDoc->m_MapList.GetAt(i);
pMap->draw(pDC);
}
//绘制扇形、弧线、圆角矩形
if(bflag == 1)
pDC->SelectObject(&oldpen);
if(n == 1)
{
pDC->Pie(pDoc->rect.left,pDoc->rect.top,pDoc->rect.right,pDoc->rect.bottom,pt. x,pt.y,pt2.x,pt2.y);
}
if(n == 2)
{
pDC->Arc(pDoc->rect.left,pDoc->rect.top,pDoc->rect.right,pDoc->rect.bottom,pt.x,pt. y,pt2.x,pt2.y);
}
if(n == 3)
{
pDC->RoundRect(pDoc->rect.left,pDoc->rect.top,pDoc->rect.right,pDoc->rect.botto m,pt.x,pt.y);
}
}
下面给出矩形的绘制函数OnRect()
void CMy1209View::OnRect() //绘制矩形
{
// TODO: Add your command handler code here
CRectDialog dc;
dc.DoModal();
Invalidate(true);
CDC* pDC = this->GetDC();
CMy1209Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//设置指针
CRECT* rect = new CRECT();
//设置起始点
rect->SetStartPoint(CPoint(dc.m_left_x,dc.m_left_y));
rect->SetEndPoint(CPoint(dc.m_right_x,dc.m_right_y));
rect->SetBound();
//调用绘制函数
rect->draw(pDC);
//写入图形列表
pDoc->m_MapList.Add(rect);
//释放CDC
this->ReleaseDC(pDC);
}
//圆形和直线的与其类似。
扇形的绘制函数OnPie()
void CMy1209View::OnPie() //绘制扇形
{
// TODO: Add your command handler code here
CPieDialog dc;