当前位置:文档之家› 10C MFC课程设计之二维平面设计画图

10C MFC课程设计之二维平面设计画图

10C  MFC课程设计之二维平面设计画图
10C  MFC课程设计之二维平面设计画图

C++面向对象课程设计报告

院(系):计算机工程学院

专业:软件工程

学生姓名:

班级:学号

题目:二维平面画图

起迄日期:2011.7.4至2011.7.15

设计地点:

指导教师:

完成日期: 2011 年 7月 15日

目录

一、课程设计目的 (1)

二、课程设计内容与实现的功能 (2)

三、系统分析与设计 (2)

1、系统分析 (2)

2、系统设计: (2)

2.1、系统设计方案 (2)

概要设计 (2)

详细设计 (3)

基本信息的设计 (3)

点样式的设计 (3)

菜单的设计 (3)

橡皮筋功能的实现 (3)

窗口的重绘、图形的打开和保存 (4)

2.2、数据结构说明: (4)

2.3、算法流程图: (4)

四、系统测试与调试分析 (6)

1、系统测试 (6)

2、调试分析: (7)

五、用户手册 (8)

六、程序清单 (13)

七、体会与自我评价 (22)

八、参考文献 (23)

九、课程设计评价 (23)

一、课程设计目的

进行C++面向对象程序设计课程设计主要是在学习C++这门面向对象语言的基础上,在完成

C++面向对象程序设计各部分实验的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践加深对可视化编程与C++面向对象程序设计语言特点的认识与理解。同时,可以提高运用C++编程语言解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。

二、课程设计内容与实现的功能

二维平面图形设计:可通过菜单或者工具栏按钮,选择绘画工具,画不同的平面图形(直线、圆弧、矩形、圆角矩形、圆、椭圆等);可通过颜色对话框选择不同的颜色,使所画的图形具有不同颜色;可保存文档所画的图形,并能打开该图形。

三、系统分析与设计

1、系统分析

二维平面图形设计主要是设计出能进行常见的图形的绘制(如直线、圆弧、矩形、圆角矩形、圆、椭圆等);通过用户的需求或者选择进行绘制用户想要的图形,绘制的图形的种类可以放置在菜单栏或工具栏,当然用户的所有图形都是在客户区内进行的,而绘制的过程一般都是通过单击,鼠标的拖曳来完成的,而每一种绘制的图形都是都要与鼠标的单击、拖曳相关联,即每一种绘制的图都是鼠标单击、拖曳的一个分支,每个菜单就是这些分支的标记。

在系统分析阶段,系统的逻辑结构应从以下三方面全面反映系统的功能与性能:(1)信息——系统要处理的信息主要有:点、点的样式、线宽、线型、线的颜色、绘制的图形的种类。每一种图形的绘制都是同点来完成的,一个或者是多个,比如直线——两点就确定一条直线,矩形——知道一个角点和长宽能确定,圆——知道原点和半径即可……每一种图形的绘制都有线的特征,即线的颜色、宽度、类型(是实线、点线还是虚线或是其他,因为每一次鼠标的单击或拖曳只能绘制一种图形,所有要有区别绘图种类的标记。

(2)行为——鼠标的单击、拖曳通过用户所选的绘制的不同图形绘、线的特性绘制不同的图形。

(3)表示——系统的对外接口主要有能绘制的图形的种类和对绘制图形前的对图形的基本信息的设置。图形的种类有“直线”、“圆弧”、“矩形”、“圆角矩形”、“圆”、“椭圆”等,设置有点样式的设置——点样式,对线的设置有“线型”、“线宽”、“颜色”

2、系统设计:

2.1、系统设计方案

概要设计

因为图形的绘制都是通过图形的基本信息,在通过调用相关的函数数所完成的,有以图形的打开和保存都与图形的基本信息有关,也就是说图形的打开就是通过获得相应的图形的基本

信息,在调用图形的绘制的方法就能准确将图形重新显示出来,图形的保存就是将图形的基本信息保存到指定的文件中即可,所以,处理好图形的基本信息,就能够很好的把系统设计好。

详细设计

基本信息的设计

正如前面所考虑的,图形的基本信息既然那么重要,说先就要设计好图形基本信息的存储,经过自己精心的设计,我考虑了数据能够处理起来比较方便,所以,我考虑到了C++的继承性和多态性,就是说不通的对象调用相同的方法,产生不通的响应,这正好和我们图形的绘制过程完全一致,当然这个是在窗口重绘和打开图形对图形的绘制的时候,在图形的绘制过程,当让是有对鼠标按下,移动和鼠标弹起的消息的响应函数来响应,首先,设计一个基本信息数据的基类BaseData,其中有三个共有的数据成员color、linest、linew分别表示线条的颜色、线型、线宽,因为这是绘制每种图形的公共部分;基类还有一个Draw()方法,其类型是虚函数,用以实现多态。

接下来的每种图形都是一个类且都从基类派生出来的,点类Dot,数据成员dotst,pt分别表示点样式和点的位置,Dot类也有自己的Draw()方法,其作用按照点样式绘制一个点;直线类Line也有自己的数据成员stpt,endpt,分别表示直线的起点和终点,Line类也有自己的Draw(0方法,作用是绘制一条直线;矩形类Retangle1,其数据成员是确定其矩形区域的两个点,也设置成为stpt,endpt,其自己的Draw()方法是绘制一个矩形,椭圆类Ellipse1,它也有自己的数据成员,即能确定一个椭圆的两个点,也设置成为stpt,endpt,其Draw()方法是绘制一个椭圆……如果我们要添加绘制其它图形的话,我们还可以添加更多的图形类。

点样式的设计

接下来是设计点样式,我们知道,但我们画一个点的时候,我们为了突出其位置,我们需要不同样式的点,如圆点、十字点,一个小圆圈和圆心。当然,我们在话一个圆点的时候,我们一般都要画大一些,这几要求我们在画点的时候,应该画该点位置和其相邻位置的点,十字点其实实现很简单,就是在水平和竖直四个方向画四条小直线,圈点的话就是点和圆的组合。

菜单的设计

接下来的说就是菜单了,菜单我们可以分为绘图和设置这两个选项,绘图菜单里面有该系统能绘制的图形的选项,而设置选项里面主要有绘图的基本信息的设置,有点样式的的设置,线颜色的设置,线型,线宽的设置,后两者的设置可以用对话框实现,即CColorDialog和普通的对话框,在关联一些变量用来保存所设置的值。

橡皮筋功能的实现

当我们在绘制图形的时候,我们移动鼠标还没放的时候,往往希望能看到绘制的图形的效果,这就橡皮筋功能,要实现橡皮筋功能,我选择的是重画三次图形的办法,就是说每个鼠标移动的点的轨迹作为终点(除终点外)都以原点作为起点绘制同样的图形,其原理是采用画笔与背景异或的模式画图(负负得正)。有人会疑惑,因为前面的的所有点都画了两次,二只有终点画一次,照此应该达到目的了。确实能够达到目的,但是在这样的模式下画的图形在线条相交得时候是不是也像是画两次的情形呢,这样交点处就变成了看不见了。

为了解决这个问题,我的办法是进行第三次画图,起点和终点的画图,采用的是正常的模式画图。这样交点的地方就不会看不见了。

窗口的重绘、图形的打开和保存

图形的打开和保存的关键是把图形的基本信息读取和保存,用MFC里面的CPtrArray数组进行保存,把包存储图形信息的个种对象的指针保存CPtrArray的对象中,然后在把CPtrArray 的对象中的数据输出到指定的文件中,打开则是从保存相关数据的文件读入数据,放入CPtrArray的对象中,然后再用个for循环,调用各自的图形绘制的Draw()方法将图形一个个的绘制出来。窗口的重绘和图形打开类似,只不过图形的信息已经存储在CPtrArray的对象中,不用再从文件中读取然后再进行绘制。

2.2、数据结构说明:

本系统用到的数据结构有数组——用来存储图形的基本信息数据

字符串——一些控件相关的变量,用来存储用户选择的基本信息。

2.3、算法流程图:

因为本人的水平有限,本程序没有什么算法流程图

类图

(下面类图是有VS2010生成的类图,由于时间关系(还要考试),我没有按照要求画Visio 图)

四、系统测试与调试分析

1、系统测试

2、调试分析:

状态栏显示时间的调试,出现的错误,没有按照预期在状态栏的相应地方显示时间,当拖动

窗口的时候,显示时间,之后有不显示。

原因:没有进行状态栏的刷新,由于使用了CStatusBar的成员函数SetPaneText的时候必须

添加UI update handler,

MSDN的说明:

After you call SetPaneText, you must add a UI update handler to display the new text

in the status bar.

Example

//Sets and displays text for pane index 3 and id

ID_INDICATOR_SCRL

m_wndStatusBar.SetPaneText(3, _T("My New Status Bar Text"), TRUE);

//UI handler in the message map updates the status bar text:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL,

&CMainFrame::OnUpdatePane)

void CMainFrame::OnUpdatePane(CCmdUI* pCmdUI)

{

pCmdUI->Enable();

}

在实现橡皮筋的功能时,开始时不知道怎么弄,到后来在网上看到用求反,画两

次的方法来实现,我就试试,

对函数CDC::SetROP2调用,为了更加的了解这个函数,我把其中的每一中nDrawMode都试了一下,随后的图形绘制的过程中,我有发现但线条相交的地

方都没有线条。

解决——用正常的模式把最后确定的线条再画一次,也就是前面所讲的三次画线

实现橡皮筋功能。

在编程过程中,常常因为某个对象是局部变量而我们所用的这个变量所保存的信息在其他地方还要用到,当函数的调用完即对象的生面周期的时候就会析构,调试的时候系统就会发出警告程序终止。

所以,在MFC的编程当中,变量的生命周期很重要,充分的把握变量的生命周期,我们的程序将少出现debug

五、用户手册

1、使用xp windows 平台

2、不需要安装

3、使用说明:

双击应用程序出现下面的启动画面(两秒钟):

之后出现画图的窗口:

单击“绘图”,选择想要绘制的图形,截图如下:

选择不同的图形绘制:

设置不同的点样式进行绘图:

设置不同的颜色,线型,线宽进行绘图:

六、程序清单

存储各种图形的类的Draw方法

void Dot::Draw(CDC *dc) //绘制点的方法

{

CPen pen(linest,linew,color);

dc->SelectObject(pen);

switch(dotst)

{

case 1: //绘制点点样式的点

dc->SetPixel(pt.x+1,pt.y,color);

dc->SetPixel(pt.x-1,pt.y,color);

dc->SetPixel(pt.x-1,pt.y-1,color);

dc->SetPixel(pt.x,pt.y+1,color);

dc->SetPixel(pt.x-1,pt.y+1,color);

dc->SetPixel(pt.x,pt.y-1,color);

dc->SetPixel(pt.x+1,pt.y-1,color);

dc->SetPixel(pt.x,pt.y,color);

dc->SetPixel(pt.x+1,pt.y+1,color);

break;

case 2://绘制十字点样式的点

dc->MoveTo(pt.x-5,pt.y);

dc->LineTo(pt.x+5,pt.y);

dc->MoveTo(pt.x,pt.y-5);

dc->LineTo(pt.x,pt.y+5);

break;

case 3: //绘制圈点

dc->SetPixel(pt,color);

dc->SelectStockObject(NULL_BRUSH);

dc->SelectObject(pen);

dc->Ellipse(pt.x-5,pt.y-5,pt.x+5,pt.y+5);

dc->SetPixel(pt,color);

break;

}

}

void Line::Draw(CDC *dc) //绘制直线的方法

{

CPen pen(linest,linew,color);

dc->SelectObject(pen);

dc->MoveTo(stpt);

dc->LineTo(endpt);

}

void Retangle1::Draw(CDC *dc)//绘矩形的方法

{

CPen pen(linest,linew,color);

dc->SelectObject(pen);

dc->SelectStockObject(NULL_BRUSH);

dc->Rectangle(CRect(stpt,endpt));

}

void Ellipse1::Draw(CDC *dc)//绘制椭圆的方法

{

CPen pen(linest,linew,color);

dc->SelectObject(pen);

dc->Ellipse(CRect(stpt,endpt));

}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {

if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("Failed to create toolbar\n");

return -1; // fail to create

}

if (!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failed to create status bar\n");

return -1; // fail to create

}

// TODO: Delete these three lines if you don't want the toolbar to

// be dockable

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

CSplashWnd::ShowSplashScreen(this);//加载自己的图标位图

m_hicons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));

m_hicons[1]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON2));

m_hicons[2]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3));

m_hicons[3]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON4));

m_hicons[4]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON5));

m_hicons[5]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON6));

m_hicons[6]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON7));

m_hicons[7]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON8));

m_hicons[8]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON9));

m_hicons[9]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON10));

m_hicons[10]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON11));

m_hicons[11]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON12)); SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hicons[0]);//设置自己的图标

SetTimer(1,500,NULL);//定义一个更新时间,图标的定时器

//获取和设置时间,

CTime t=CTime::GetCurrentTime();

CString str=t.Format("%H:%M:%S");

CClientDC dc(this);

CSize sz=dc.GetTextExtent(str);

int index=0;

index=m_https://www.doczj.com/doc/967498024.html,mandToIndex(IDS_TIME);

m_wndStatusBar.SetPaneInfo(index,IDS_TIME,SBPS_NORMAL,sz.cx);//获取存储时间字符串的长度

m_wndStatusBar.SetPaneText(index,str);//设置状态栏时间格的时间

return 0;

}

void CMainFrame::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

//实现变化应用程序的图标

static int index=1;

SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hicons[index]);

index=++index%12;

//不断的获取系统时间

CTime t=CTime::GetCurrentTime();

CString str=t.Format("%H:%M:%S");

CClientDC dc(this);

CSize sz=dc.GetTextExtent(str);

int sindex=0;

sindex=m_https://www.doczj.com/doc/967498024.html,mandToIndex(IDS_TIME);

m_wndStatusBar.SetPaneInfo(sindex,IDS_TIME,SBPS_NORMAL,sz.cx);

m_wndStatusBar.SetPaneText(sindex,str);

CFrameWnd::OnTimer(nIDEvent);

}

BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/)

{

if (!m_bitmap.LoadBitmap(IDB_StartBitmap))//加载启动画面位图

return FALSE;

BITMAP bm;

m_bitmap.GetBitmap(&bm);

return CreateEx(0,

AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),

NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight,

pParentWnd->GetSafeHwnd(), NULL);

}

int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CWnd::OnCreate(lpCreateStruct) == -1)

return -1;

// Center the window.

CenterWindow();

// Set a timer to destroy the splash screen.

SetTimer(1,800, NULL);//设置启动画面显示的时间800Ms

return 0;

}

void CSplashWnd::OnPaint()

{

CPaintDC dc(this);

CDC dcImage;

if (!dcImage.CreateCompatibleDC(&dc))

return;

BITMAP bm;

m_bitmap.GetBitmap(&bm);

// Paint the image.

CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);

dc.BitBlt(0,0,bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);

dcImage.SelectObject(pOldBitmap);

Sleep(800);//设置主应用程序窗口的休眠时间

}

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

//鼠标按下时完成的事件,保存起始点,如果要绘制的图形是点的话还要进行点的绘制if(m_Draw)

m_ptorigin=m_ptold=point;

if(m_Draw==1)

{//进行点的绘制

CClientDC dc(this);

CPen pen(m_linestyle,m_linewidth,m_choicecolor);

dc.SelectObject(pen);

switch(m_dotstyle)

{

case 1:

dc.SetPixel(point.x+1,point.y+1,m_choicecolor);

dc.SetPixel(point.x+1,point.y,m_choicecolor);

dc.SetPixel(point.x-1,point.y,m_choicecolor);

dc.SetPixel(point.x-1,point.y-1,m_choicecolor);

dc.SetPixel(point.x,point.y+1,m_choicecolor);

dc.SetPixel(point.x-1,point.y+1,m_choicecolor);

dc.SetPixel(point.x,point.y-1,m_choicecolor);

dc.SetPixel(point.x+1,point.y-1,m_choicecolor);

dc.SetPixel(point.x,point.y,m_choicecolor);

break;

case 2:

dc.MoveTo(point.x-5,point.y);

dc.LineTo(point.x+5,point.y);

dc.MoveTo(point.x,point.y-5);

dc.LineTo(point.x,point.y+5);

break;

case 3:

dc.SetPixel(point,m_choicecolor);

dc.SelectStockObject(NULL_BRUSH);

dc.SelectObject(pen);

dc.Ellipse(point.x-5,point.y-5,point.x+5,point.y+5);

dc.SetPixel(point,m_choicecolor);

break;

}

}

CView::OnLButtonDown(nFlags, point);

}

void CMyView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if(m_Draw&&m_ptorigin.x!=-1&&m_ptorigin.y!=-1)//判断是否能进行绘图

{

CClientDC dc(this);//设置绘制图形的设备

CPen pen(m_linestyle,m_linewidth,m_choicecolor);

CPen *pOldPen=dc.SelectObject(&pen);

dc.SetROP2(R2_NOTXORPEN);

switch(m_Draw)

{//根据所选择的图形绘制不同的图形,一下完成的是两次进行绘图,以实现橡皮筋功能

case 1:

break;

case 2:

dc.MoveTo(m_ptorigin);

dc.LineTo(m_ptold);

dc.SelectObject(pen);

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

break;

case 3:

dc.Rectangle(CRect(m_ptorigin,m_ptold));

dc.Rectangle(CRect(m_ptorigin,point));

break;

case 4:

dc.Ellipse(CRect(m_ptorigin,m_ptold));

dc.SelectObject(pen);

dc.Ellipse(CRect(m_ptorigin,point));

}

m_ptold=point;//不断的更新中介点,以实现橡皮筋功能

dc.SelectObject(pOldPen);

}

void CMyView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default //进行第三次绘图,以解决相交问题

CClientDC dc(this);

CPen pen(m_linestyle,m_linewidth,m_choicecolor);

dc.SelectObject(pen);

dc.SelectStockObject(NULL_BRUSH);

if(m_Draw==1)

{

//存储点对象的数据

Dot *pdot=new Dot;

pdot->color=m_choicecolor;pdot->dotst=m_dotstyle;

pdot->linest=m_linestyle;pdot->pt=m_ptorigin;

pdot->linew=m_linewidth;

/* m_pdotarray.Add(pdot);*/

m_pDataArray.Add(pdot);

}

if(m_Draw==2)

{

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

简单画图程序的设计

面向对象程序设计 课程设计报告 设计题目:简单画图程序的设计 学院:信息工程学院 专业:计算机科学与技术(交通)学号:201224020326 姓名:房战锋 同组同学学号:201224020325 指导教师:张少博 2013 年12 月24 日

目录 第一章:设计目的及内容 (2) 1.1【设计目的】 (2) 1.2【设计内容】 (2) 第二章:基本功能概述 (3) 2.1【工程的新建】 (3) 2.2【单文档简介】 (4) 2.3【添加消息响应函数】 (5) 2.4【资源】 (5) 2.5【设备环境】 (6) 第三章:设计思路 (6) 第四章:软件设计 (7) 4.1【设计步骤及关键代码】 (7) 4.1.1【点、直线、矩形、椭圆的绘制】 (9) 4.1.2【连续线及扇形的绘制】 (11) 4.1.3【画刷】 (12) 4.2【设置对话框】 (14) 4.3【颜色】 (14) 4.4【打开与保存】 (15) 第五章:结论与心得体会 (16) 参考文献: (17) 附录: (18) 【调试报告】 (18) 【测试结果】 (18) 【关键代码】 (18)

第1章:设计目的及内容 1.1【设计目的】 1 学习Visual C++的MFC开发程序的步骤。 2 综合运用所学的类、继承和多态的知识。 3 进一步掌握程序的调试方法。 1.2【设计内容】 1利用MFC的向导,创建基于单文档的应用程序; 2 编程实现,绘制线、圆、矩形的功能; 3 能够设定当前要画的图形样式(最少为以上3种)和图形颜色(最少能够设为以下 4 种颜色:黑、红、绿、蓝)。 4 当窗口重绘后,还能保持原来的图形。 5 选做1:能够选中某些已绘制的图形,并删除之。 6 选做2:能够保存已绘制的图形,下次打开时恢复原状。

C++课设:简单画图程序

简单画图程序 1.基本功能描述 本次课程设计的任务是利用计算机和VC开发环境编写一个简单画图程序,该程序的设计指标(即主要功能)有:①用鼠标拖动绘制圆、椭圆、矩形,线等基本图形;②能控制画笔的线宽和颜色;③能对图形进行颜色填充;④在鼠标移动的过程中能实时显示当前绘制的图形。 除了以上几点功能,我有另外添加了工具栏、铅笔、橡皮等功能来使程序更方便地让用户使用,简化了人机交互的过程。 2.设计思路 首先是界面的问题,既然课设的题目是简单画图,那在建立工程的时候就要选择文档结构而不是以前做的基于对话框。可选择单文档结构或多文档结构,但想到画图界面一般只有一个,从简洁的角度考虑,选择单文档结构。而且用户界面在设计的时候要尽可能简单美观,一目了然,对相应功能有图标提示,使用户方便使用。 然后便是画图功能的具体实现。分析课设要求,可以发现功能一要求的的椭圆、矩形、直线可以分别通过Ellipse();、Rectangle();、MoveTo();、LineTo();这四个函数来实现。功能二控制画笔线宽和颜色可以给二者分别关联参数,通过改变线宽参数值来控制线宽,通过调用通用对话框改变颜色参数值来控制颜色。功能三对图形进行颜色填充虽以前未接触过,但查阅资料后发现可以调用ExtFloodFill();并合理设定参数值来实现。功能四的实时显示功能可以通过调用MouseMove();函数来实现。 这些功能需要建立菜单资源来表示各个功能选项,并建立相应的消息响应函数来进行实现。另外,画图程序主要是通过鼠标来进行操作,所以要对鼠标消息的响应及处理函数多下功夫来思考和编写。 至于额外添加的功能,工具栏通过添加工具栏资源和关联相应菜单中画图功能ID实现;铅笔、橡皮的功能则是利用MouseMove();函数,在其中做了一些改动来实现。

java画板课程设计报告

画板 一、需求分析 平时生活中,我们会需要处理一些基本的图像,也有可能需要花一些简单的图像,平时所使用的图形处理工具有PhotoShop、Windows 画图工具等,其中PhotoShop 是一款非常强大的图形处理工具,Windows 画图工具则是一款较为简单的画图工具,功能较为简单,用Windows画图工具,是一种比较简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的基本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等。这次试验中我做的就是一个仿照windows画板的程序。 功能:1.利用graphics 类来向界面上画上相应内容 2.能够画出直线,矩形,多边形,椭圆形,圆矩形等 3.能够实现橡皮,刷子,喷枪等工具。 4.能够实验颜色的设置 5.能够保存图片和打开图片(当保存名一致时需提示) 6.界面尽量合理,可以仿照windows画板界面。 二、概要设计

流程图 画板软件类图 1.工具接口Tool: 从图中可以看到,工具接口Tool 定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下

mousePressed()、点击mouseClicked()五个动作,并用String 类型的常量属性来定义工具的类型。这个接口只有一个实现类AbstractTool,而每个工具类 都是去扩展AbstractTool 类,在图中表现为Tool1、Tool2…….ToolN。 2.Tool的实现类AbstractTool AbstractTool 是Tool 的实现类,也是一个抽像类,所以并不能被创建,只能被继承。此类实现Tool 中定义的所有方法,并扩展了其它方法,让其子类继承或者重写。该类中为其他的工具类提供了大部分的实现,那么它的子类就可以不必再做重复的实现,只关心与本类相关的逻辑, 3.AbstractTool的子类 AbstractTool 一共有ArrowTool(箭头)、PencilTool(铅笔)、BrushTool(刷子)、EraserTool(橡皮擦)、LineTool (直线)、RectTool (矩形)、PolygonTool (多边形)、RoundTool (椭圆形)、RoundRectTool(圆矩形)、AtomizerTool (喷墨)、ColorPickedTool(颜色选择)11 个子类, 4. 界面类ImageFrame 这个画图工具的界面的主要放在这个类中实现 5. 业务逻辑类ImageService 除鼠标的画图功能外(画图功能由Tool 的实现类完成),初始化画板、图片的新建打开与保存、各种面板的显示与隐藏、颜色的编辑、整个界面的刷新、菜单等业务逻辑都放在这个类中实现, 对象,它并没有保存一些状态属性。 6 .文件选择类ImageFileChooser ImageFileChooser 类继承了JFleChooser 类,JFleChooser 是Java 提供的一个简单的文件选择机制,我们这里扩展这个类,是为了增加我们自己的文件过滤器。 三、运行环境、开发语言 Window xp 和elipse Java语言

简单画图程序-课程设计

简单画图程序-课程设计 目录 1. 基本功能描 述 ............................................................. 1 2. 设计思路 ................................................................. 1 3. 软件设 计 (3) 3.1 设计步 骤 (3) 3.2 界面设 计 (6) 3.3 关键功能的实 现 ...................................................... 7 4. 结论与心 得体会 ........................................................... 8 5. 参考文 献 ................................................................. 9 6. 思考 题 (9) 7. 附 录 ..................................................................... 9 7.1 调试报 告 (9)

7.2 测试结 果 (10) 7.3 关键源代 码 (1) 武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书 简单画图程序 1. 基本功能描述 1) 在菜单处的有相应的菜单项,可以选择绘制的图形形状,如直线、矩形及椭圆,可 -5可供选择,还可以选择线色以及填充色,通过弹出的颜色对话框选择以选择线宽,有1 需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔以及画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,鼠标弹起,此图形则绘制完毕。 3) 增添了工具栏,有相应的选择项,可以更方便地实现相应的功能。 2. 设计思路 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,则改变画笔和画刷的属性。 3) 鼠标的按下响应LButtonDown(),定义起点的坐标,鼠标的拖动响应MouseMove()改变终点的坐标,鼠标的弹起响应LButtonUp(),刷新,得到绘制图形。

十款公认最实用的绘图软件评测

十款公认最实用的绘图软件评测 导读: 很多人以为只有专业从事艺术设计类或者画画工作的人才会用到绘图软件,其实不然。在我们的日常生活中,也有许多需要用到绘图软件的职业,工程师、建筑师、原画师、网页设计师、电工师傅等等,在他们的日常工作中都会用到不同类型的绘图软件。 如今市面上有很多种类的绘图软件,但是他们的侧重点都不一样,有的侧重画工业图,有的偏向于艺术设计,还有的偏向于3D画图等,虽然都属于画图软件,但是涉及的方向大不一样。想要正确选择出适合自己的绘图软件,一个个去了解有些不太现实,下面就让小编为大家盘点一下目前公认最好用的10款绘图软件吧! 一、亿图图示专家:亿图图示Edraw Max是一款跨平台使用的全类型图形图表设计软件,用户可以通过它绘制260多种类型的图表,其中包含常用的:流程图、思维导图、信息图、组织结构图、甘特图、地图、线框图、数据模型图、UML以及网络拓扑图等等。 它拥有丰富的精美模板及矢量符号库,操作简单易上手,能让难以理解的文本和

表格转化为简单清晰的图表。除了具备多种绘图功能,亿图还能与其他办公软件相兼容,可以轻松通过软件将文件导出为Office word、excel、ppt、图片、pdf、html、svg、ps,甚至连Visio格式也不在话下! 二、Visio:是微软公司出品的一款的软件,它有助于 IT 和商务专业人员轻松地可视化、分析和交流复杂信息。丰富的组件库,各种各样的图表支持,和word 的无缝对接是visio的强项,但是由于其价格过于昂贵,并且无法在linux和osx下运行,可以选择的模板也比较少,加上设计风格过于扁平化,所以目前成为一款很容易被国产新秀软件替代的产品。

程序设计课程设计实验报告

《程序设计》课程设计姓名: 学号: 班级:软件工程14班 指导教师: 成绩:

1.消除类游戏 【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m 个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 测试数据二 输出说明: 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 【功能实现】 #include #include<> usingnamespacestd;

{ intm,n,i,j; inttemp; cin>>n>>m; temp=m; m=n; n=temp; int*map=newint[m*n]; int*mark=newint[m*n]; int*tmap=map; int*tmark=mark; intdif=0; ount=0; } p rintf("请输入要输入数的个数\n"); s canf("%d",&n);/*输入要输入数的个数*/ f or(i=0;idata1[j+1].number)

计算机图形学课程设计报告交互式绘图系统

课程设计报告 课程名称计算机图形学 课题名称交互式绘图系统 专业计算机科学与技术 班级 学号 姓名 指导教师刘长松曹燚 2012年10 月9 日

湖南工程学院 课程设计任务书 课程名称计算机图形学 课题交互式绘图系统 专业班级 学生姓名 学号 指导老师刘长松曹燚 审批 任务书下达日期2012年9月15 日任务完成日期2012 年10月9 日

一、设计内容与设计要求 1.设计内容: 用橡皮法实现交互式绘图系统。 2.设计要求: 在屏幕上可以选择不同的命令、来实现不同基本图形的绘制。完成橡皮筋直线,橡皮筋圆,橡皮筋矩形框,多边形裁剪和3阶B样条曲线的作图,且要有比较友好的界面。 3.算法提示: 首先在屏幕上画出菜单和绘图窗口,显示鼠标。点击相应菜单,点击鼠标,移动鼠标,获取鼠标移动相对位置,画出相应图形。 相关变量定义: #define _MOUSE鼠标#define CIRCLE 1圆 #define LINE 2直线#define RECTANGLE 3矩形#include "stdio.h" #include "string.h" #include"graphics.h" #include"math.h" #include union REGS inreg,outreg; struct SREGS sr; 相关函数: void meun(int x,int y,char *str) { setcolor(8); outtextxy(x+5,28,str); setcolor(15); line(x,22,x,40); line(x,22,y,22); setcolor(8); line(x,40,y,40); line(y,22,y,40); }

JAVA课程设计画图软件

package hh; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import java.awt.geom.*; class Point { int x,y; Color col; int tool; int boarder; Point(int x, int y, Color col, int tool, int boarder) { this.x = x; this.y = y; this.col = col; this.tool = tool; this.boarder = boarder; } } /* *BasicStroke *Choice *validate(); **/ class paintboard extends Frame implements ActionListener, MouseMotionListener, MouseListener, ItemListener { int xx0=0,yy0=0; int xx1=0,yy1=0; int type=6; int x = -1, y = -1; int con = 1; //画笔大小 int Econ = 5; //橡皮大小 int toolFlag = 0; //toolFlag:工具标记 //toolFlag工具对应表: //(0--画笔);(1--橡皮);(2--清除);

//(3--直线);(4--圆);(5--矩形); Color c = new Color(0,0,0); //画笔颜色 BasicStroke size = new BasicStroke (con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);//画笔粗细 Point cutflag = new Point(-1, -1, c, 6, con);//截断标志 Vector paintInfo = null;//点信息向量组 int n = 1; // *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/ Panel toolPanel; Button eraser, drLine,drCircle,drRect; Button clear ,pen; Choice ColChoice,SizeChoice,EraserChoice; Button colchooser; Label 颜色,大小B,大小E; paintboard(String s)//构造函数 { super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo = new Vector(); /*各工具按钮及选择项*/ //颜色选择 ColChoice = new Choice(); ColChoice.add("黑色"); ColChoice.add("红色"); ColChoice.add("蓝色"); ColChoice.add("绿色"); ColChoice.addItemListener(this); //画笔大小选择 SizeChoice = new Choice(); SizeChoice.add("1"); SizeChoice.add("3"); SizeChoice.add("5"); SizeChoice.add("7"); SizeChoice.add("9"); SizeChoice.addItemListener(this); //橡皮大小选择 EraserChoice = new Choice();

画图工具可行性报告

Java实训课程设计报告Windows画图工具 专业:计算机科学与技术班级:11092311 姓名:曾思哲 学号:11923110

2014年6月

项目简介

Windows画图工具的设计 第1章需求分析 1.1 项目背景 随着社会的不断发展,人们对画面要求越来越高,对画图工具的软件提出了更高的要求。 画图工具的软件可以让用户更加节省时间,可以从其他文件找出一些图片修改一下就可以使用,比起传统的手工的画图来说,不单单是节省时间而且画面要好的多,保存起来也比较方便,下次在用的时候一找就出来了。在比如画面的修改在这套软件上我们可以直接使用彩色,使画面更直观,而且还可以修改,画图的软件现在应用于各行各业,这款软件特别适合教学用,学生画图也是比不可缺少的。 1.2 需求分析 需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户问题的分析,确定系统的功能需求。这个步骤是对理解需求的升华,直接关系到该系统的质量。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通机制,因此,系统的需求分析也应该是开发人员和用户或客户一起完成的。 1.2.1画图板的性能要求 (1) 统一处理的准确性和及时性。 (2) 软件的开放性和可扩充性。 (3) 软件的易用性和易维护性。 1.2.2画图板的功能分析 我们作的是Windows画板,再设计时应该考虑到用户的需要和画图的习惯。所以我们需求分析的主要任务就是来了解用户画图时的习惯。尽量让用户满意。在此我们是先设计一个大概的程序模型让别人试试我的画图板。

第2章概要设计 2.1 软件设计 1.1.1 本软件是设计一套在windows平台下的画图工具,主要用于主要用于画图、打开图画类的页面修改并保存成用户需要的格式。系统采用C/S结构,主要用于客户端,供客户学习、工作使用,本软件提供良好的界面,操作简单。 第3章详细设计 3.1 模块设计 该系统由4个模块构成,分别是工具模块、储存模块、颜色模块、帮助模块。 ●工具模块 画笔(PencilTool)、格式刷(BrushTool)、喷墨工具(AtomizerTool)、橡皮(EraserTool)、直线(LineTool)等主要用于不同情况的使用,在面板上方便用户的使用。 ●储存模块 ①判断当前画板是否保存(MyImage)。 ②设置多种存储的格式供用户选择,增加文件过滤器(addFilter)。 ③存储路径可以设置默认的。 ●颜色模块 通过创建颜色选择器(ColorChooser),来让用户获取颜色,供用户使用。 ●帮助模块 系统帮助文档和软件的声明。 3.2 功能设计 主要功能如下: 1、画笔 PencilTool这个类继承于AbstractTool类,PencilTool类中有个对象Tool 用户通过点击画板上的图标来获取画笔,它的功能让用户用来画出各种图形。 2、格式刷子 BrushTool这个类继承于AbstractTool类,它的功能让用户画出更好的图形。

课程设计常用数学软件

《常用数学软件介绍》课程设计用Matlab求解下列各题,要求:抄题,写出程序、运行结果,根据要求贴上运行图。 1、求矩阵 211 020 413 A - ?? ? = ? ? - ?? 的逆矩阵1 A-及特征值和特征向量。 解: >> clear; A=[-2 1 1;0 2 0;-4 1 3]; inv(A) [V,D]=eig(A) ans = Columns 1 through 2 Column 3 -1.5000e+000 5.0000e-001 5.0000e-001 0 5.0000e-001 0 -2.0000e+000 5.0000e-001 1.0000e+000 V = Columns 1 through 2 Column 3 -7.0711e-001 -2.4254e-001 3.0151e-001 0 0 9.0453e-001 -7.0711e-001 -9.7014e-001 3.0151e-001 D = -1 0 0 0 2 0 0 0 2 2、化方阵 222 254 245 A - ?? ? =- ? ? -- ?? 为对角阵。 解:A=[2 2 -2;2 5 -4;-2 -4 5]; >> diag(diag(A)) ans = 2 0 0 0 5 0 0 0 5 3、已知 422134 305,203 153211 A B - ???? ? ? =-=-- ? ? ? ? - ???? ,在MA TLAB命令窗口中建立A、B矩阵并对

其进行以下操作: (1) 计算矩阵A 的行列式的值det()A (2) 分别计算下列各式:1122,*,.*,,,,T A B A B A B AB A B A A --- 解: (1)、 A=[4 -2 2;-3 0 5;1 5 3]; >> det(A) ans = -158 (2)、 ans = 7 -7 0 -4 0 13 0 11 5 ans = 12 10 24 7 -14 -7 -3 0 -8 ans = 4 -6 8 6 0 -15 2 -5 3 ans = -2.2204e-016 -6.6613e-016 2.0000e+000 -2.7143e+000 -8.0000e+000 -8.1429e+000 2.4286e+000 3.0000e+000 2.2857e+000 ans = 4.8734e-001 4.1139e-001 1.0000e+000 3.6709e-001 - 4.3038e-001 2.7756e-017 -1.0759e-001 2.4684e-001 1.3878e-017 ans = 24 2 4 -7 31 9 -8 13 36 ans = 4 -3 1 -2 0 5 2 5 3 4、在MA TLAB 中分别利用函数rank 、函数inv 求下列矩阵的秩: (1) 16323540,11124A -?? ?=- ? ?--?? 求 rank(A)=?

简易画图板设计报告

设计报告:Graphic简易画 图板 -----韩伟谢程焜肖越周峰 电科二班

1设计目的 设计一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开以及笔刷的使用。 2 总体设计 设计图如图6

图6 3详细设计 首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID及名称如表1所示。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。

在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述: private: UINT m_nDrawType; 接着,在视类的构造函数中将此变量初始化为0,程序代码如下: CGraphicView::CGraphicView() { // TODO: add construction code here m_nDrawType=0; } 利用switch/case语句,来分别完成相应图形的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。程序代码如下:void CGraphicView::OnDot() { // TODO: Add your command handler code here m_nDrawType=1; } void CGraphicView::OnLine() { // TODO: Add your command handler code here m_nDrawType=2; } void CGraphicView::OnRectangle() { // TODO: Add your command handler code here m_nDrawType=3; } void CGraphicView::OnEllipse() { // TODO: Add your command handler code here m_nDrawType=4;

Java画图板课程设计报告

目录 1 引言................................................................................................... 错误!未定义书签。 课程设计选题 .................................................................................. 错误!未定义书签。 课程设计的目的 .............................................................................. 错误!未定义书签。 本选题的设计背景.......................................................................... 错误!未定义书签。 2 需求分析 .............................................................................................. 错误!未定义书签。 功能需求......................................................................................... 错误!未定义书签。 软件开发运行环境........................................................................ 错误!未定义书签。 3 总体设计 .............................................................................................. 错误!未定义书签。 软件结构设计 ................................................................................ 错误!未定义书签。 结构设计................................................................................. 错误!未定义书签。 软件功能模块及主要类设计 ......................................................... 错误!未定义书签。 功能描述 ................................................................................... 错误!未定义书签。 总体结构图............................................................................... 错误!未定义书签。 主要类设计............................................................................... 错误!未定义书签。 4 详细设计与实现.................................................................................. 错误!未定义书签。 主界面............................................................................................. 错误!未定义书签。 主界面功能设计....................................................................... 错误!未定义书签。 主界面设计............................................................................... 错误!未定义书签。 主界面主要代码....................................................................... 错误!未定义书签。 菜单栏............................................................................................. 错误!未定义书签。 菜单栏功能设计....................................................................... 错误!未定义书签。 菜单栏界面设计....................................................................... 错误!未定义书签。 菜单栏主要代码....................................................................... 错误!未定义书签。 工具栏............................................................................................. 错误!未定义书签。 工具栏功能设计....................................................................... 错误!未定义书签。 工具栏界面设计....................................................................... 错误!未定义书签。 工具栏主要代码....................................................................... 错误!未定义书签。

《认识画图软件》教学设计

《认识画图软件》教学设计 知识与技能: 1、认识Windows XP系统中自带的画图软件。 2、掌握画图软件的启动与退出的方法,并熟悉画图软件窗口的组成。 3、熟练掌握工具箱中个别工具的使用及操作方法。 过程与方法:通过运用画图软件绘画,进一步熟练掌握画图软件的操作及使用方法。 情感态度与价值观:通过画图软件的学习,使学生进一步熟练掌握画图软件各部分的操作方法,同时激发学生对学习电脑的兴趣,感受成功,体验学习计算机,用计算机画画的快乐! 教学目标: 1、知道并掌握画图软件的打开、退出方法; 2、认识并掌握画图窗口的各个组成部分; 尝试使用画图软件工具箱中的椭圆、铅笔、直线、橡皮工具。 教学重点:认识并掌握画图窗口的各个组成部分。 教学难点:画图软件工具的认识及操作方法。 教学过程: 一、导入 我们在上美术课的时候,我们都用一些什么工具画画? 接下来我们来欣赏几张图画,你喜欢它们吗?看它们美吗?你们知道这些画是怎么画出来的吗?这些画都是用电脑画出来的。你们想不想也用电脑试一试,跟他们比一比,看你们能不能超过他们? 如果想用电脑画画,首先我们就应该先认识一些图像处理软件。目前,有许多图像处理软件可以用来画画,今天,我们就来学习这个大家庭中的一个最简单,最容易学会的成员,利用它我们可以画出很多漂亮的图画,比如我们刚才看到的。今天我们就来一起来学习并认识画图软件。(播放PPT并板书课题) 二、新课讲解 “画图“软件是Windows系统中的一名成员。我们想用它来画出漂亮的图画,我们就应该先去了解它,想了解它就需要启动或是关闭它。 第一部分认识画图软件(理论部分) (一)启动画图软件的方法:(边说边在教师机上演示,并把最后结果用PPT 的形式展示在教师机上) 1、鼠标单击开始——程序——附件——画图。 2、双击桌面上的“画图”软件图标。 (二)关闭画图软件的方法:(边说边在教师机上演示,并把最后结果用PPT

Java画图软件设计报告

佛山科学技术学院 《可视化编程技术》课程设计报告 画图软件设计 学生姓名:周敏婷 学号: 2011914123 年级专业:11级教育技术学2班指导老师:容汝佳 学院:教育科学学院 广东★佛山 提交日期:2013年6月

目录 1. 前言 (2) 2.概要设计 (3) 2.1 开发环境 (3) 2.2 画图软件功能 (3) 2.3 界面设计 (3) 2.4 类的框架结构图 (4) 3. 详细设计 (4) 3.1 使用的JAVA类的说明 (4) 3.2 类的主要方法 (5) 3.2.1 颜色选择

器 (5) 3.2.2 控制画笔样式 (5) 3.2.3 选取颜色按钮的监听件类 (6) 3.2.4 设计总体认识 (6) 3.2.5 程序流程图 (7) 4. 运行结果 (7) 5. 测试分析 (8) 5.1 程序运行情况 (8) 6. 源程序 (8) 参考文献 (14) 设计总

结 (14)

摘要:该程序是一个图形界面的简单的java画图软件,具有良好的界面,使用人员能快捷简单地进行操作。该画图软件操作较为简单,只需要一直按着左键就能根据你鼠标移动的方面,画出你想要的图案。你也可以选择你自己想到的颜色和画笔的粗细。而且可以显示你当前的画笔的状态。界面为灰白对称。是一个非常简单的作图工具,让人能轻松上手。 关键字:java,画图类,方法,事件 1 前言 随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的画图工具,可以实现简单的画图作图功能,满足日常基本的工作学习和娱乐需要。 Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。 Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet 所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2 企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。 Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C++语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图

java简易画图板

华北科技学院 课程设计说明书 班级: 网络B101 设计题目: 画图板软件开发和设计 评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____ 目录 1 引言 (1)

1.1课程设计选题 (1) 1.2课程设计的目的 (1) 1.3本选题的设计背景 (1) 2 需求分析 (1) 2.1 功能需求 (1) 2.2 系统的开发运行环境 (2) 3 总体设计 (2) 3.1 系统体系结构设计 (2) 3.2系统功能模块及主要类设计 (3) 4 详细设计与实现 (6) 4.1 菜单栏模块 (6) 4.2 文字字型工具栏模块 (7) 4.3 工具栏模块 (8) 4.4 颜色选择面板模块 (10) 4.5 鼠标状态栏模块 (12) 4.6 画图区域以及整体布局模块 (13) 5 小结和展望 (15) 参考文献 (17) 附录 (17) 使用说明书 (17)

1引言 1.1课程设计选题 《画图板软件开发和设计》 1.2课程设计的目的 使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。 1.3本选题的设计背景 平时生活中,我们会需要处理一些基本的图像,也有可能需要花一些简单的图像,平时所使用的图形处理工具有 PhotoShop、Windows 画图工具等,其中PhotoShop 是一款非常强大的图形处理工具,Windows 画图工具则是一款较为简单的画图工具,功能较为简单,用Windows画图工具,是一种比较简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的基本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等。所以这次课程设计我做的就是一个仿照Windows画板的程序。 通过画图板软件开发与设计,更深刻地体会java语言较之其他语言在图形用户界面的优势。熟悉java语言中常用的关于画图的各个类的功能和常用的方法(java图形用户界面中的众多函数与类的关系),并在实验过程中加深对java语言的理解与运用。 2需求分析 2.1 功能需求 对于绘图软件,应具备最基本的绘制直线,矩形框,圆形框,椭圆框等最基本功能,此外,要可以对绘制的图形进行修改;将绘制好的图形进行保存,打开以前保存的图形;在需要的时候,可以绘制实心矩形,实心圆形,实心椭圆等常见的几何图形。可

简易画图板的设计与实现

专业课程设计 (2011/2012学年第2学期) 题目一:简易画图板的设计与实现 专业计算机通信 学生姓名韩亮 班级学号09002736 指导教师王海艳 指导单位计算机学院·计算机科学与技术系日期2012年6月20日

教 师 评 语 教师签名: 年月日

成 绩 评 定 备 注 一、课题名称 设计题目1:简易画图板的设计与实现 二、课题内容和要求 利用MFC完成画图板的基本功能。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开以及笔刷的使用。 三、需求分析 1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。 3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。

四、概要设计 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4) 选择图形或其它属性,可进行下一次绘制。 开始 定义并初始化变shape 线色m_ncolor 填充 色m_fcolor 画笔 pen画刷brush绘图起 点opoint绘图终点 选择线宽 改变画笔属性默认值(w=1) 改变画刷属性 默认值(黑色) 默认值(黑色)选择填充 改变画笔属性 选择线色

相关主题
文本预览
相关文档 最新文档