当前位置:文档之家› C++课设:简单画图程序

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

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

简单画图程序

1.基本功能描述

本次课程设计的任务是利用计算机和VC开发环境编写一个简单画图程序,该程序的设计指标(即主要功能)有:①用鼠标拖动绘制圆、椭圆、矩形,线等基本图形;②能控制画笔的线宽和颜色;③能对图形进行颜色填充;④在鼠标移动的过程中能实时显示当前绘制的图形。

除了以上几点功能,我有另外添加了工具栏、铅笔、橡皮等功能来使程序更方便地让用户使用,简化了人机交互的过程。

2.设计思路

首先是界面的问题,既然课设的题目是简单画图,那在建立工程的时候就要选择文档结构而不是以前做的基于对话框。可选择单文档结构或多文档结构,但想到画图界面一般只有一个,从简洁的角度考虑,选择单文档结构。而且用户界面在设计的时候要尽可能简单美观,一目了然,对相应功能有图标提示,使用户方便使用。

然后便是画图功能的具体实现。分析课设要求,可以发现功能一要求的的椭圆、矩形、直线可以分别通过Ellipse();、Rectangle();、MoveTo();、LineTo();这四个函数来实现。功能二控制画笔线宽和颜色可以给二者分别关联参数,通过改变线宽参数值来控制线宽,通过调用通用对话框改变颜色参数值来控制颜色。功能三对图形进行颜色填充虽以前未接触过,但查阅资料后发现可以调用ExtFloodFill();并合理设定参数值来实现。功能四的实时显示功能可以通过调用MouseMove();函数来实现。

这些功能需要建立菜单资源来表示各个功能选项,并建立相应的消息响应函数来进行实现。另外,画图程序主要是通过鼠标来进行操作,所以要对鼠标消息的响应及处理函数多下功夫来思考和编写。

至于额外添加的功能,工具栏通过添加工具栏资源和关联相应菜单中画图功能ID实现;铅笔、橡皮的功能则是利用MouseMove();函数,在其中做了一些改动来实现。

图1 程序流程图

MouseMove 函数

鼠标左键弹起响应函数

m_ptOldOrigin=point;

2.1.程序流程图:

开始 变量初始化

(m_nDrawType ,m_clr 等)

铅笔

橡皮

直线

椭圆

线宽线型设置

颜色选择

填充

响应函数 m_Pen(m_Eraser)=

TRUE

并将其他橡皮(铅笔)、填充等所关联变量置为FALSE.

响应函数 m_nDrawType =1/2/3/4;对应点、直线、矩形、椭圆

矩形

响应函数 创建相应对话框

IDOK==1?

更改变量m_clr (m_nLineWidth ,m_nLineStyle)参数值

响应函数 m_Fill=TRUE 并将其他橡皮、铅笔等所关联变量置为FALSE.

鼠标左键按下 响应函数

m_ptNewOrigin=point; 进行填充

铅笔功能

橡皮功能

画点

画直线

画矩形

画椭圆

结束

判断各参数值以确定功能

3.软件设计

3.1.设计步骤

1)打开VS2010,选择新建项目,选中MFC应用程序,标题为CWN_Graphic;

2)选择单文档结构,其他为默认值,点击完成。

3.2 .界面设计

3.2.1.添加菜单

1)选择资源视图,鼠标右键,添加,资源;

2)在资源视图中打开添加的菜单资源,将各个功能的名称添加进去并合理安排,并设

置好相应的ID,如图2:

图2 编辑菜单及相应ID

3.2.2 .添加工具栏

1)在资源视图下右键选择添加资源,ToolBar;

2)打开新建的工具栏,在上面添加各个小按钮,按钮图像自行画出;

3)将每个按钮的ID与菜单项一一对应起来,如图3:

图3 工具栏样式及ID

3.3.关键功能实现

1)打开类向导;

2)为各个菜单项添加消息函数,如图4:

图4 添加消息函数相关ID、关联变量及响应函数如表1:

表1 相关功能ID 及所关联变量

名称ID 关联变量响应函数

点IDM_DOT m_nDrawType = 1 OnDot()

直线IDM_LINE m_nDrawType = 2 OnLine()

矩形IDM_RECTANGLE m_nDrawType = 3 OnRectangle()

椭圆IDM_ELLIPSE m_nDrawType = 4 OnEllipse()

画笔IDM_PEN m_Pen = TRUE OnPen()

填充IDM_FILL m_Fill = TRUE OnFill()

橡皮(小)IDM_ERASER1 - OnEraser1()

橡皮(中)IDM_ERASER2 - OnEraser2()

橡皮(大)IDM_ERASER3 - OnEraser3()

线宽+线型IDM_LINE_WIDTH - OnLineWidth()

颜色IDM_Color - OnColor()

3)按照所需在CWN_GraphicView.h中添加变量并在CWN_GraphicView.cpp中对变量初始化:

UINT m_nDrawType = 0;//绘画类型初始为0

CPoint m_ptOldOrigin = 0;//坐标点初始为(0,0)

CPoint m_ptNewOrigin = 0;

UINT m_nLineWidth = 0;//线宽初始为0

UINT m_EraserWidth = 1;//橡皮初始大小为1

INT m_nLineStyle = 0;//线宽初始为0

BOOL m_Pen = FALSE;//画笔功能未被选中

BOOL m_Eraser = FALSE;//橡皮功能未被选中

BOOL m_LButtonDown = FALSE;//鼠标左键未按下

BOOL m_Fill = FALSE;//填充功能未被选中

COLORREF m_clr = RGB(0,0,0);//颜色初始值为黑色

4)在各响应函数中添加相应代码,例如:

/**********左键按下************/

/*该函数实现了再鼠标左键按下时确定按下点的坐标、将左键被按下置为1和判断是否填充选项被选中,若选中则进行填充,未选中则无操作*/

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

{

m_ptNewOrigin=point; //将当前点坐标传给变量

m_ptOldOrigin=point;

m_LButtonDown=TRUE; //左键按下赋值1

if(m_Fill==TRUE) //填充功能

{

CClientDC dc(this);

HBRUSH hBrush=CreateSolidBrush(m_clr); //选择画刷

dc.SelectObject(hBrush);

dc.ExtFloodFill (m_ptNewOrigin.x,m_ptNewOrigin.y,RGB(0,0,0),0);

//该函数将使用当前刷子填充显示表面区域

}

CView::OnLButtonDown(nFlags,point);

}

/***********左键松开************/

/*该函数通过在鼠标左键松开时,将松开点坐标传给PC,并由之前选择的绘画类型来判断要进行的绘画操作*/

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

{

m_LButtonDown=FALSE; //左键松开赋值0

CClientDC dc(this);

CPen pen(m_nLineStyle,m_nLineWidth,m_clr); //创建画笔画刷

dc.SelectObject (&pen); //选择画笔

CBrush*pBrush=CBrush::FromHandle ((HBRUSH)GetStockObject(NULL_BRUSH));

dc.SelectObject (pBrush); //选择画刷

m_ptNewOrigin=point; //左键松开的坐标点送给m_ptNewOrigin

switch(m_nDrawType)

{

case 1:/*******画点*******/

dc.SetPixel(point,m_clr);

break;

case 2:/*******画线*********/

dc.MoveTo (m_ptOldOrigin);

dc.LineTo (m_ptNewOrigin);

break;

case 3:/**********画矩形**********/

dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin));

break;

case 4:/*********画椭圆**********/

dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin));

break;

}

CView::OnLButtonUp (nFlags,point);

}

/*************线型+线宽设置*********/

/*该函数在线型线宽功能被选择时,会生成一个线型线宽设置对话框(之前在资源中添加和编辑的对话框资源),并将用户操作后的线型线宽值传给PC*/

void CCWN_GraphicView::OnLineWidth()

{

// TODO: 在此添加命令处理程序代码

CSettingDlg line_dlg;

line_dlg.m_nLineWidth = m_nLineWidth ; //将先前设置的线宽回传给对话框

line_dlg.m_nLineStyle = m_nLineStyle; //将先前设置的线型回传给对话框

if(IDOK==line_dlg.DoModal ())

{

m_nLineWidth=line_dlg.m_nLineWidth ;

m_nLineStyle = line_dlg.m_nLineStyle ;

}

}

/*************动态显示函数******************/

/*该函数单独写出,配合OnMouseMove();函数可实现动态显示的功能*/

void CCWN_GraphicView::Draw()

{

CClientDC dc(this);

CPen pen(m_nLineStyle,m_nLineWidth,m_clr);

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

dc.SelectStockObject(NULL_BRUSH);

int drawmode=dc.SetROP2(R2_NOTXORPEN);

/*R2_NOTXORPEN模式的作用是:先把画笔的颜色取反,再与屏幕颜色进行“或”操作,从而得到像素最终显示的颜色。*/

switch(m_nDrawType)

{

case 2:

dc.MoveTo(m_ptOldOrigin);

dc.LineTo(m_ptNewOrigin);

break;

case 3:

dc.Rectangle(CRect(m_ptOldOrigin,m_ptNewOrigin));

break;

case 4:

dc.Ellipse(CRect(m_ptOldOrigin,m_ptNewOrigin));

break;

}

dc.SetROP2(drawmode);

dc.SelectObject(oldPen);

}

/*************MOUSE MOVE***************/

/*此函数与前面的动态显示函数(Draw();)进行配合便可实现在鼠标移动时的实时显示功能,思路是在绘图时,先用屏幕背景色覆盖掉鼠标移动前的画面,然后用选定的画笔颜色重新绘制下一次鼠标移动的画面*/

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

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);

CPen pen(m_nLineStyle,m_nLineWidth,m_clr);

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

if(m_LButtonDown!=FALSE)

{

Draw();

m_ptNewOrigin=point;

Draw();

if(m_Pen==TRUE) //铅笔功能

{

m_nDrawType=0; //画图类型改为初始值,以免多重画图

dc.MoveTo (m_ptOldOrigin);

dc.LineTo (m_ptNewOrigin);

//修改线段起点

m_ptOldOrigin=m_ptNewOrigin;

m_ptNewOrigin=point;

}

if(m_Eraser==TRUE) //橡皮功能

{

m_nDrawType=0;

CPen pen(m_nLineStyle,m_EraserWidth,RGB(255,255,255));

dc.SelectObject(&pen);

dc.MoveTo (m_ptOldOrigin);

dc.LineTo (m_ptNewOrigin);

//修改线段起点

m_ptOldOrigin=m_ptNewOrigin;

m_ptNewOrigin=point;

}

}

dc.SelectObject(oldPen);

CView::OnMouseMove(nFlags, point);

}

/************选择铅笔**************/

/*该函数在选择铅笔功能后,将铅笔功能置为真,其他有干扰的功能置为假*/

void CCWN_GraphicView::OnPen()

{

// TODO: 在此添加命令处理程序代码

m_Pen = TRUE; //画笔被选中

m_Fill = FALSE; //取消填充功能

m_Eraser = FALSE; //取消橡皮功能

}

4.结论与心得体会

本次课程设计虽说是“简单”画图程序的设计,但真要是自己做起来,感觉一点也不简单。以前做的课程实验及课后习题等,几乎都是在老师讲解过相关课本知识和示范操作后稍作一定的功能修改,但因为毕竟是学过了,也看过老师的演示,所以就算有不会的地方也能在观看教学PPT或课堂笔记及查看教材资料后自行解决。但这次的简单画图程序的设计,不仅综合了以前对MFC编程的全部所学知识,而且还有未学过的几个函数的详细应用,这就需要在仔细查阅相关书籍、网络资料等来对这几个函数的用法进行了解。虽说起来简单,但实际操作中却漏洞百出,代码设计一改再改才最后实现了预定功能。

另外,在这次的课程设计程序编写过程中,我对MFC编程的过程流程在脑中也愈发清晰,对每个函数应如何声明,实现,使用的过程愈发明了。过程一波三折,有语法问题,函数使用的问题,兼容性问题,头文件或变量无法识别,逻辑错误等等,每一种错误都花

费了许多精力去找寻问题所在。虽然辛苦,但觉得收获良多。

在编写程序的过程中,首先是一头雾水,总是在出错,而自己有不明白为什么会出错;慢慢坚持编写和查资料等找错,就一点点好了起来,对整个流程需要做的事也越来越明白;等到后期,就基本不会再出什么错了,就只是对程序的优化处理。可能程序的编写就是这样,开头最难,等写下去,后面倒是只是代码的添加,却不怎么难了。所以,在编写程序之前,一定要自己把程序流程好好想一想,弄明白每个流程的关键所在,流程搞得越清楚,在后续编写的过程中遇到的错误就会越少,越顺利。

除此之外,遇到搞不明白的问题的时候,要多和同学进行讨论。本次编写过程中,我就经常和选题相同的另一位同学进行相关的讨论,尤其是对MouseMove函数的使用以及填充功能的实现,我们进行了大量的讨论,在讨论后我们再进行实际验证,并不断修改代码,最终才使相关功能得以实现。

5.思考题

1)说明直线、椭圆、矩形绘制使用的函数,及其参数含义?

答:直线、椭圆及矩形的绘制是在CCWN_GraphicView::OnLButtonUp();函数中实现,此函数在左键弹起时,将松开点坐标传给PC,并由之前选择的绘画类型(m_nDrawType的值,为2则直线,3则是矩形,4则是椭圆)来判断要进行的绘画操作。若为直线,则调用dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);这两个函数,前者将窗口坐标移到指定位置,后者执行连线操作;若为矩形,则调用dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin));函数,通过两点坐标画出矩形;若为椭圆,则调用dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin));函数,由两点坐标确定一个矩形,再由矩形来内接画出一个椭圆。

2)如何控制菜单项的状态,使用的消息类型?

答:菜单项的状态是通过各个消息响应函数来确定的,我规定了几个变量m_Pen,m_Eraser 等,在选中其中一种功能后,在相应函数将其值置为TRUE,其他值置为FALSE以免产生干扰。而其他的如线型线宽因顾不干扰则只是设置了代表各自实际值的变量而未设置是否被选中的变量。

3)如何设置菜单和工具栏按钮的快捷键操作?

答:快捷键的功能通过在资源视图下设置加速键来实现。

在资源视图下打开加速键列表,在列表末尾空白处点击出现一个新的加速键选项,选

择需要设置加速键的菜单ID值,如IDM_LINE,在修饰符下拉菜单中选择想要进行的快捷操作如Ctrl,在Key下输入想要组合的键值如L,类型选择VIRTKEY后便可完成快捷键的设置。

6.附录

6.1.调试报告

本次课设程序编写及调试过程中,遇到的问题主要由以下几种:

1)语法错误:

例如在写“;”时的中英文格式不对、少写了“}”等导致的语法错误,修改方法即为将错误的语法改为正确的。

2)无法识别预编译头文件:

遇到这样的问题后,在项目中打开属性,C/C++,预编译头,选择不使用预编译头文件即可。

3)无法识别**字符:

这类问题的解决方法是:在项目中打开属性,配置属性,常规,字符集,选择使用多字节字符集即可解决。

4)函数使用方式有错误:

出现这一类错误主要是对函数的使用不熟悉,对其中参数的作用不了解所致;解决方法只能是去多方查阅资料,深入了解其使用方法及参数含义,并在可能的情况下去找一些范例来进行对比,从而掌握其正确使用方法。

5)其他:

本次编写过程中还出现过编译链接都能过去,但运行时却会出现一个对话框的warning 然后程序不能运行的错误。有过两次,第一次未搞明白其具体含义,在上网查询解决方法后,通过项目属性,代码生成,运行库下选择多线程DLL(/MD)后解决;第二次在多方查找资料后明白了是因为在添加工具栏按钮时,按钮位图大小不一(有两种,一种大小17*17,另一种大小15*16)所致,将按钮位图大小改为相同的后,报错消失。

6.2.测试结果

初始界面,图5:

图5 程序运行初始界面线型线宽设置对话框,图6:

图6 线型线宽设置对话框

操作示例,图7:

图7 操作示例

6.3.关键源代码

// GraphicView.cpp : CGraphicView 类的实现

//

#include "stdafx.h"

// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的// ATL 项目中进行定义,并允许与该项目共享文档代码。

#ifndef SHARED_HANDLERS

#include "Graphic.h"

#endif

#include "GraphicDoc.h"

#include "GraphicView.h"

#include "SettingDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CGraphicView

IMPLEMENT_DYNCREATE(CGraphicView, CView)

BEGIN_MESSAGE_MAP(CGraphicView, CView)

// 标准打印命令

ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CGraphicView::OnFilePrintPreview) ON_WM_CONTEXTMENU()

ON_WM_RBUTTONUP()

ON_WM_LBUTTONUP()

ON_WM_LBUTTONDOWN()

ON_COMMAND(IDM_DOT, &CGraphicView::OnDot)

ON_COMMAND(IDM_LINE, &CGraphicView::OnLine)

ON_COMMAND(IDM_RECTANGLE, &CGraphicView::OnRectangle)

ON_COMMAND(IDM_ELLIPSE, &CGraphicView::OnEllipse)

ON_COMMAND(IDM_LINE_WIDTH, &CGraphicView::OnLineWidth)

ON_COMMAND(IDM_PEN, &CGraphicView::OnPen)

ON_WM_MOUSEMOVE()

ON_COMMAND(IDM_Color, &CGraphicView::OnColor)

ON_COMMAND(IDM_FILL, &CGraphicView::OnFill)

ON_COMMAND(IDM_ERASER1, &CGraphicView::OnEraser1)

ON_COMMAND(IDM_ERASER2, &CGraphicView::OnEraser2)

ON_COMMAND(IDM_ERASER3, &CGraphicView::OnEraser3) END_MESSAGE_MAP()

// CGraphicView 构造/析构

CGraphicView::CGraphicView()

{

// TODO: 在此处添加构造代码

/**************变量初始化*************/

m_nDrawType = 0; //绘画类型初始为0

m_ptOldOrigin = 0; //坐标点初始值为0 m_ptNewOrigin = 0;

m_EraserWidth = 1; //橡皮初始大小为1 m_nLineWidth = 0; //线宽初始值0

m_nLineStyle = 0; //线型初始为0

m_clr = RGB(0,0,0); //颜色初始值为黑

m_Pen = FALSE; //画笔初始未选中

m_Eraser = FALSE; //橡皮初始未选中

m_LButtonDown = FALSE; //鼠标左键初始值为0 m_Fill = FALSE; //填充按钮初始未选中}

CGraphicView::~CGraphicView()

{

}

BOOL CGraphicView::PreCreateWindow(CREATESTRUCT& cs) {

// TODO: 在此处通过修改

// CREATESTRUCT cs 来修改窗口类或样式

return CView::PreCreateWindow(cs);

}

// CGraphicView 绘制

void CGraphicView::OnDraw(CDC* pDC)

{

CGraphicDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

// TODO: 在此处为本机数据添加绘制代码

}

// CGraphicView 打印

void CGraphicView::OnFilePrintPreview()

{

#ifndef SHARED_HANDLERS

AFXPrintPreview(this);

#endif

}

BOOL CGraphicView::OnPreparePrinting(CPrintInfo* pInfo)

{

// 默认准备

return DoPreparePrinting(pInfo);

}

void CGraphicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {

// TODO: 添加额外的打印前进行的初始化过程

}

void CGraphicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {

// TODO: 添加打印后进行的清理过程

}

void CGraphicView::OnRButtonUp(UINT /* nFlags */, CPoint point)

{

ClientToScreen(&point);

OnContextMenu(this, point);

}

/**********左键按下************/

void CGraphicView::OnLButtonDown(UINT nFlags , CPoint point) {

m_ptNewOrigin=point; //将当前点坐标传给变量

m_ptOldOrigin=point;

m_LButtonDown=TRUE; //左键按下赋值1

if(m_Fill==TRUE) //填充功能

{

CClientDC dc(this);

HBRUSH hBrush=CreateSolidBrush(m_clr);

dc.SelectObject(hBrush);

dc.ExtFloodFill (m_ptNewOrigin.x,m_ptNewOrigin.y,RGB(0,0,0),0);

}

CView::OnLButtonDown(nFlags,point);

}

/***********左键松开************/

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

{

m_LButtonDown=FALSE; //左键松开赋值0

CClientDC dc(this);

CPen pen(m_nLineStyle,m_nLineWidth,m_clr); //创建画笔画刷

dc.SelectObject (&pen);

CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject

(NULL_BRUSH));

dc.SelectObject (pBrush);

m_ptNewOrigin=point; //左键松开的坐标点送给m_ptNewOrigin

switch(m_nDrawType)

{

case 1:/*******点*******/

dc.SetPixel(point,m_clr);

break;

case 2:/*******线*********/

dc.MoveTo (m_ptOldOrigin);

dc.LineTo (m_ptNewOrigin);

break;

case 3:/**********矩形**********/

dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin));

break;

case 4:/*********椭圆**********/

dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin));

break;

}

CView::OnLButtonUp (nFlags,point);

}

/*************动态显示******************/

void CGraphicView::Draw()

{

CClientDC dc(this);

CPen pen(m_nLineStyle,m_nLineWidth,m_clr);

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

dc.SelectStockObject(NULL_BRUSH);

int drawmode=dc.SetROP2(R2_NOTXORPEN);

/*R2_MERGENOTPEN模式的作用是:先把画笔的颜色取反,再与屏幕颜色进行“或”操作,从而得到像素最终显示的颜色。*/

switch(m_nDrawType)

{

case 2:

dc.MoveTo(m_ptOldOrigin);

dc.LineTo(m_ptNewOrigin);

break;

mfc绘图程序上机步骤

首先生成MFC程序空框架 空框架中的每个类的职责是什么要自己理解清楚 第一次课: 1.定义自己的数据类CLine直线类,用于绘图 点击菜单:插入—类 选择Generic class,输入类名,每个类都是分成两个文件.h 中只有类体,包含类的数据成员定义和成员函数声明,.cpp中就是成员函数的类体外实现 classCLine { int x1,y1,x2,y2; public: CLine(int a=0,int b=0,int c=0,int d=0); virtual ~CLine(); int Getx1(); int Gety1(); int Getx2(); int Gety2(); void SetPoint1(intx,int y);很多函数是在后面使用中发现问题逐渐添加的 void SetPoint2(intx,int y); }; 2.自定义的类要作为数据成员出现在Doc类中 classCSmallCADDoc : public CDocument { protected: // create from serialization only CSmallCADDoc(); DECLARE_DYNCREATE(CSmallCADDoc) // Attributes public: CLine line1; //数据成员应该是私有,但是由于文档类与视图类交换频繁,为了访问方便,直接定义成公有了。你也可以定义成私有,再定义一个Get函数间接访问,取他的值3.注意:添加了这个数据成员后,需要增加几个#include “Line.h”语句 添加的原则是,每个cpp文件都单独编译,哪里用到新的类,相应的cpp前就要增加#include “。。。”语句 此处是在CSmallCADDoc类中添加了一个CLine line1;类对象,在SmallCADDoc.h文件中。所以,凡是包含了#include “SmallCADDoc.h”的地方都要在前面添加#include “Line.h” 语句。共3处:app doc view 这3个类的cpp文件前 4.注意:初始化 CLine line1; //数据成员是文档类的,它不像dos下程序,明确能看到定义,调用构造

简单画图程序的设计

面向对象程序设计 课程设计报告 设计题目:简单画图程序的设计 学院:信息工程学院 专业:计算机科学与技术(交通)学号: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:能够保存已绘制的图形,下次打开时恢复原状。

mfc简单绘图程序

M F C 简 单 的 绘 图 程 序 ——王帅

目录 摘要 (2) 关键字 (2) 1 引言 (2) 设计目的 ............................................................................................................ 错误!未定义书签。 2 功能说明 (2) 2.1菜单栏....................................................................................................... 错误!未定义书签。 2.1.1图形 (3) 2.1.2画笔 (4) 2.1.3画硬币 (4) 2.2工具栏 (5) 2.3状态栏 (5) 3 功能的实现 (5) 3.1 视图设计 (5) 3.2 编辑资源 (6) 3.3 编程思路及各个函数的实现 (7) (1)思路 (7) (2)代码的实现 (7)

1.为基本形状创建一个基类 (8) 2.基本形状类的创建 (8) 2.1矩形类的创建及定义 (8) 2.2圆形类的创建及定义 (10) 2.3正五边形类的创建及定义 (11) 2.4正三角形类的创建及定义 (14) 2.5椭圆类的创建及定义 (16) 2.6正四边形类的创建及的定义 (17) 2.7正六边形类的创建及定义 (18) 2.8直线类的创建及定义 (19) 3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20) 3.1矩形类的调用与与绘图的实现 (20) 3.2圆形类的调用 (24) 3.3正三角形类的调用 (25) 3.4基本类型调用的剩余代码 (26) 4.画笔的使用、颜色及大小的调整 (29) 5.画硬币 (35) 6.工具栏中的自定义控件 (38) 7.状态栏中的显示 (39) 4程序功能的测试 (41) 5最后总结 (42)

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

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

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

C++实验报告(MFC简单画图程序)

VC++程序设计实验报告 一、实验目的 掌握MFC编程 二、实验内容 用MFC向导创建单文档应用程序,一个简单的画图程序。 ?使用C++语言实现 ?使用VC++6.0集成开发环境开发 ?使用MFC应用程序开发框架 三、实验步骤 ?基本功能描述 1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、 曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决 定图形的大小,当鼠标弹起,此图形则绘制完毕。 ?设计思路 1. 对需要用到的变量进行初始化。 2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4. 选择图形或其它属性,可进行下一次绘制。 ?软件设计 A 设计步骤 1.创建单文档 创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程 图2 创建单文档

初识画图程序教案

初识“画图”程序 一、课堂导入 小朋友们,你们喜欢画画吗?平常你们画画都画在哪里呢?(纸上)那你们想不想知道计算机(电脑)画出来的画是什么样的呢?(想)让我们一起来欣赏一下。 出示一些以前学生的优秀作品。 你觉着这几幅画画的怎么样? 你们想不想也变成电脑小画家创作自己的作品呢? 二、认识“画图”程序界面 好,那么我们需要电脑里的一位帮手来帮助我们,大家知道它是谁吗?今天老师就带着大家一起来认识一下“画图”程序。 在认识“画图”程序之前,老师有个问题要考考大家,大家还记得怎么打开计算器吗?接下来,请大家用同样的方法打开画图。 师生演示:开始→所有程序→附件→画图,最大化。 打开以后,呈现在我们面前的就是画图窗口,接下来,就请大家对照课本15页认一认“画图”窗口的4个部分,已经完成的小朋友同桌之家互相说一说。 现在老师就来考考大家,看看大家都认识吗? ①认一认“画图”这位好帮手的4个部分(参考教材15页)。 (它主要由四大部分组成:快速访问工具栏,“画图”按钮,功能区以及绘图区域组成。看绘图区域,就是我们美术上用的画纸。) 三、认识“画图”工具 师:接下来,我找一位小朋友来说一下在美术课上,要想画出一幅作品需要用到哪些工具? 生:颜料、铅笔、橡皮、绘画纸、调色板等 师:我们的“画图”程序里也有这些工具,接下来给大家3分钟的时间请大家尝试用这些工具来简单地画一幅各自擅长的作品。(老师给大家一些小提示:想一想我们在美术课中的画图步骤,要想画出一幅作品,首先用铅笔画出轮廓,然后再填充颜色。大家可以按照这个思路来画。)找同学让他说一说画的是什么?怎么画的?

(小窍门:当鼠标指针在工具图标上停留时,指针下方就会显示这个工具的名称,同时还会显示介绍这种工具作用的文字)真是一位善于观察善于探索的小朋友。总结:她刚刚画图用到了铅笔和刷子这两个工具,接下来就请大家再用这两个工具画一幅我们校园里的树,看看大家能不能探索到这两个工具其他的功能。 四、运用“画图”工具创作作品 现在我们已经认识了这些工具,接下来,请大家选择合适的工具绘制“成长的小树”,各种形状的树都可以画,也可以参照教材16页。 【1、交流说说,用什么工具画树枝、茂盛的大树等】 铅笔和刷子。 【2、谁能说说“铅笔”、“刷子”这两个工具画出来的有什么不同?】(铅笔:表现细节、勾画轮廓;刷子:多种笔头、纹理丰富。) 因此,大家在画图程序上画画时,可以跟我们在纸上画画一样,先用铅笔把轮廓画出来,再填充颜料;也可以直接用刷子把树画出来。 【3、在刚刚画画的过程中,老师发现有的小朋友画的粗,有的画的细,这是怎么回事呢?】 是的,在画图程序里,我们可以选择不同粗细,当然也可以选择不同笔头、不同颜色的刷子等来美化我们的作品。 【4、刚刚在画小树的过程中,我发现有的同学在画的时候,一不小心画错了,该怎么办呢?】 使用橡皮擦。(撤销或图像—删除图像) 接下来,大家进一步美化自己的作品,已经完成的同学可以帮小树添加些新朋友。如:太阳,小鸟、花等。(教师巡回指导) 五、作品评价 师总结:小朋友们在使用工具时,一定要谨慎、小心,因为鼠标非常灵活,不像我们平常用的画笔容易掌控,还有一定要选择合适的工具进行绘画。 退出“画图”程序 作品完成后,我们要退出“画图”程序,当我们单击“关闭”按钮时,屏幕上会出现一个问我们“要不要保存图画”的对话框,单击“不保存”,就不保存

简单画图程序-课程设计

简单画图程序-课程设计 目录 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(),刷新,得到绘制图形。

mfc简单绘图程序报告

简单绘图程序 1 需求说明 1.1 问题描述 设计一个简单的绘图应用程序,可以绘制图形或自由绘制线段,可以更改颜色、画笔粗细、保存文件。 1.2功能说明 1.图形绘制功能:直线、椭圆、矩形。 在菜单栏中选择需要的图形(也可以通过工具栏中选择)用鼠标便能在视图中绘出相应的图形。 2.可以绘制自由线段 3.对图形的操作:能通过菜单栏弹出对话框选择线宽、自定义颜色,也可以擦除绘制的线段。 4.可以保存绘图文件,保存后打开可以继续绘制。 2.1.3 数据说明 在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。在CDzyView类中添加一个私有变量xz;用来保存用户的选择(直线、矩形、椭圆、自由绘图)在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标停止移动时得到另外一个点。为视图类CDzyView分别捕获鼠标左键按下和弹起这两个消息。当鼠标左键按下时,需要将鼠标当前按下点保存至sx、sy,在鼠标移动停止后,将当前坐标保存至ex,ey.

其他主要数据说明: int fd 判断是否为自由绘图模式int w 线宽 int R RGB中的R int G RGB中的G int B RGB中的B CGraph类中 int m_nType:保存后重绘时用户的选择int qdx; 重绘起点x int qdy; 重绘起点y int zdx; 重绘终点x int zdy; 重绘终点y CLine类中 int cx; 重绘线宽 int sx; 重绘起点x int sy; 重绘起点y int zx; 重绘终点x int zy; 重绘终点y int w; 重绘线宽 自定义颜色对话框关联变量: IDC_EDIT_RED int m_Red IDC_EDIT_GREEN int m_Green IDC_EDIT_BLUE int m_Blue IDC_SCROLL_RED CScrollBar m_Sred IDC_SLIDER_GREEN CSliderCtrl m_Sgreen IDC_SPIN_BLUE CSpinButtonCtrl m_Sblue 2 分析、设计与实现 2.1 主要功能设计与实现

小学信息技术《初识画图》教案

《初识画图》教学设计及反思 【课题】初识画图 【课时】 1课时 【教学目标】 知识与技能: 1、学会启动和退出“画图”软件; 2、了解选择“画图工具”的方法; 3、掌握直线、矩形、橡皮等工具的使用方法; 4、学会保存“画图”作品; 过程与方法: 通过对旧知识复习进行知识迁移,从而掌握新知识;在欣赏画图软件功能和初步认识工具箱中工具的过程中,感受“画图”程序的强大功能。同时通过作品“房子”的认知、绘制、创作过程,自主探索基本工具直线、矩形以及橡皮擦的使用。在这个过程中,引导学生在小组学习氛围中,互相交流,资源共享,培养学生的合作意识。通过绘制作品活动,培养学生对计算机学习的兴趣。 情感态度与价值观: 通过绘画,培养学生对信息技术课程的兴趣,对自然和生活的热爱,激发学生的创新精神,培养学生的审美能力。 行为与创新

学习保存作品的方法,进一步增强学生的文件保存意识。 【教学重点】 认识“画图”软件的窗口,了解各部分组成的名称。 【教学难点】 掌握直线、矩形、橡皮等工具的使用方法,根据需要调整“画图区”的大小。 【教学准备】 教学课件、计算机网络教学环境 【教学过程】 一、导入课题 孩子们,你们喜欢画画吗?画画的时候用到哪些工具呢? 老师在这里给大家准备了一个游戏:看图猜成语,你们敢于挑战吗?第一幅:第二幅:第三幅:,看来同学们都很聪明,你们猜一猜老师这些画都是用什么作出来的? 对就是电脑,我们今天就来学习用电脑画图,也就是第八课《初识画图》。(板书课题:初识画图) 通过谈话拉近与学生的关系,使得课堂气氛和谐。用学生熟悉的图片激发学生对“画图”软件的学习兴趣,为本节的学习打下基础。 二、讲授新课 老师在这里给大家设置了几个任务,我们以小组为单位,比一比,看一看,哪一组同学完成的最好,老师奖励小奖品哟! 任务一:启动“画图”软件

简易画图板设计报告

设计报告: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;

MFC实现简单画图形程序(学习相关)

《MFC编程及应用》课程设计报告题目:简单画图形程序 学号:姓名: 指导老师: 时间: 评语:

程序设计步骤: 一、建立基于对话框的应用程序框架; 二、CMy0910200155Dlg类中关键新增变量的作用: CPtrArray pta; //用于保存已绘图形的相关信息。 CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过 程中动态保存对象信息。 CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读 取信息时动态创建类的对象。 COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。 COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。 int num; //用于存放从"Index.txt"文件中读取的数字。 int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时, 表示按下了”撤消”按钮;当为3时,表示按下了”加载历史” 按钮,则从文件中读取信息。 int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示 刚画过圆角矩形;当为2时,表示刚画过椭圆。 int index; //用于存放pta数组的容量。 int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘 问题。 int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg 的一个接口,通过其值在1和0之间转换,来处理弹出式对 话框的初次绘制和移动时的重绘问题。

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

《认识画图软件》教学设计 知识与技能: 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语言的特点有:面向对象、跨平台、安全性、多线程和图

MFC经典绘图方法总结

MFC经典绘图方法总结 Windows 绘图的实质就是利用windows提供的图形设备接口GDI(Graphics Device Interface)将图形会制在显示器上。 为了支持GDI绘图,MFC提供了两种重要的类: 设备上下文DC(Device Context)类,用于设置绘图属性和绘制图形; 绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。 CDC类介绍: 在MFC中,CDC是设备上下文类的基类,派生类包括:CClientDC, CPaintDC, CWindowDC, CMetaFileDC类 CClientDC 客户区设备上下文,绘制客户区时 CPaintDC 一般发生在窗口需要重绘时 CWindwDC 可以绘制整个窗口,通常在窗口WM_NCPAINT消息的响应函数CWnd::OnNCPaint()中使用 CMetaFileDC 专门用于图元文件的绘制,图元文件记录一组GDI命令,重建图形输出。 CDC包含m_hDC和m_hAttribDC二个设备上下文。CDC指导所有对m_hDC的输出GDI调用(SetTextColor)以及对m_hAttribDC的大部分属性GDI调用(GetTextColor)。 CDC对象的重要函数如下: 1、为指定设备创建上下文virtual BOOL CreateDC(...) 比如创建一个为屏幕的设备上下文 CDC dc; dc.CreateDC("DISPLAY", NULL, NULL,NULL); 2、创建内存设备上下文,与指定设备上下文兼容virtual BOOL CreateCompatibleDC( CDC * pDC) 3、删除CDC对象对应的Windows设备上下文, 通常不调用该函数而是使用析构程序virtual BOOL DeleteDC(); 4、将HDC句柄转化为设备上下文的句柄: CDC *pDC=CDC::FromHandle( hDC ) 5、选择GDI对象入选到设备上下文中,一共有五种形式: CPen * SelectObject( CPen * pPen) ; CBrush * SelectObject( CBrush * pBrush) ; virtual CFont * SelectObject( CFont * pFont) ; CBitmap * SelectObject( CBitmap * pBitmap) ; int SelectObject( CRgn * pRgn) ;

《初识画图》教学反思

《初识画图》教学反思 《初识画图》包括:“画图”程序的正确启动与退出、“画图”窗口的组成三个方面内容,也是学生第一次学习如何利用电脑进行绘画,是相当重要的一课,在上完这一课后,我仔细地反思了下,发现这节课的成功之处和不足之处有以下几点。 成功之处: 1、充分挖掘教材,合理补充教材内容 这节课教材内容较简单,主要有启动“画图”软件、认识“画图”窗口和关闭“画图”软件。如果光是讲解这三个内容,肯定不能满足学生的需要。按照学生的心理和认知特点,单单讲解这三方面内容,肯定也比较枯燥,以理论知识为主,所以在新授时我设计一个电脑小博士闯关的游戏,三关就是本课要学的三个知识点,使学生在愉快的情境中学习,轻松化解了本节课的教学重点与难点。在原有教材内容的基础上,增加了让学生用工具箱里的工具画一画,变一变画笔和画布颜色的操作,让学生更进一步地了解了“画图”软件的功能和作用。同学们对工具和颜色是非常感兴趣的,通过他们动手实践,达到了很好的教学效果。除此,我还增加了创作一幅画的操作,让学生利用各种不同的工具画出自己的姓名。因为这节课上要叫学生画一个图画出来比较难,但如果不让他们完成一个作品,似乎有一点缺憾,于是我想到让同学们利用工具箱的工具写名字,这样创作起来难度不大,而且满足了他们创作作品的欲望。事实证明,效果非常显著,每个同学都给自己写了很多个不同工具的名字,大大激发了他们学习“画图”的兴趣和创作图画的欲望。 2、创设游戏,使学生牢记工具箱里的工具 工具箱的工具比较多,共有16种,要让学生一下子记住他们难度较大,靠死记硬背肯定不行,于是我设计了两个游戏,一个找家游戏(连线题),结果大多同学都很顺利的完成了游戏,帮他们找到了正确的位置。另一个开火车游戏,出示一个工具箱的图标,学生说出名字,以小组为单位进行比赛,结果每组都取得了不错的成绩。通过这样两个游戏,使学生在玩的过程中很快记住了工具箱里的各种工具的名称和位置。 3、合理运用教学方法和手段,降低学习难度

基于MFC的OpenGL绘图

基于MFC的OpenGL绘图 本文更新版本请点击 [置顶]《基于MFC的OpenGL编程》系列文章 一、简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。每一个GDI命令需要传给它一个DC,但与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定了一个当前RC,在此线程中其后所有的OpenGL命令都使用相同的当前RC。虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。下面我将首先产生一个OpenGL RC并使之成为当前RC,这将分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。 二、MFC中的OpenGL基本框架 1、首先创建工程 用AppWizard产生一个MFC EXE项目,其他默认即可。 2、将此工程所需的OpenGL文件和库加入到工程中 在工程菜单中,选择"Build"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"opengl32.lib glu32.lib glut.lib glaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。然后打开文件"stdafx.h",加入下列头文件: #include #include 3、改写OnPreCreate函数并给视图类添加成员函数和成员变量

OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。把OnPreCreate改写成如下所示:BOOL COpenGLDemoView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); return CView::PreCreateWindow(cs); } 产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在COpenGLDemoView的类中添加一个保护型的成员函数BOOL SetWindowPixelFormat(HDC hDC)(用鼠标右键添加)和保护型的成员变量:int m_GLPixelIndex;并编辑其中的代码如下: BOOL COpenGLDemoView::SetWindowPixelFormat(HDC hDC) {//定义窗口的像素格式 PIXELFORMATDESCRIPTOR pixelDesc= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0, 0,

c++课程设计(简易绘图程序)

目录 1、需求与功能分析 (1) 2、系统总体框架 (2) 3、模块设计与分析 (3) 3.1画图模块 (3) 3.2贴图模块 (3) 3.3窗口模块 (4) 3.4菜单模块 (4) 3.5工具栏与状态栏模块 (4) 4、类的设计与分析 (4) 4.1、CAboutDlg类 (4) 4.2、CChildFrame类 (4) 4.3、CDib类 (4) 4.4、CDrawingDoc类 (5) 4.5、CDrawingView类 (6) 4.6、CMainFrame类 (7) 4.7、CSettingDlg类 (7) 5、特色算法分析 (8) 5.1 CDib类中的显示bmp位图 (8) 5.2 CDrawingView类中的画图部分 (10) 6、功能测试 (13) 7、存在的不足与对策 (16) 8、程序源代码 (17) 9、使用手册 (17) 10、参考文献 (20)

1、需求与功能分析 为了检验一个学期以来自己学习c++这门课程能够学到多少知识,加上原来就对图像处理就比较感兴趣,曾经更有想过要做一个可以合成红蓝3D图片的一款软件,就是那种需要带上红蓝眼镜才可以看到3D效果的那种图片,自己也有用photoshop做过这样的图片,但是photoshop需要调很多东西才能合成这样的图片,而且还要用相机送两个不同的角度拍两张照片作为源图片去合成红蓝3D图片,虽然我知道原理并不难,但是当我选择了”简易绘图程序”这个课程设计的题目之后,才发现每实现一个功能都需要花很多的精力,而且实现那些功能之后还会发现各种各校的bug,需要细心去寻找解决的办法。如今课程设计也要上交,一样还有很多我想实现的功能都还没实现,最终也没有实现我想要实现的功能---合成红蓝3D图片。只做了一些简单的绘图功能。 功能分析,目前这个软件的主要功能有如下: 1、画直线:通过OnLine()函数实现。 2、画矩形:通过OnRectangle()函数实现。 3、画椭圆:通过OnEllipse()函数实现。 4、铅笔工具:可以画任意线条。通过OnPencil()函数实现。 5、橡皮擦:可以擦除所画的线条。该功能还没实现。 6、右键弹出菜单:可以在客户中点击鼠标右键,快速选择常用菜单。通过 OnContextMenu函数实现。 7、状态栏显示鼠标移动的坐标:在程序的右下角显示,通过OnUpdateX(CCmdUI *pCmdUI)和OnUpdateY(CCmdUI *pCmdUI)这两个函数实现。 8、画图颜色选择:可以画任何颜色的线条,通过OnEditColor()函数实现。 9、读取bmp位图:可以在电脑中选择一个bmp位图,在程序中显示出来,通过 新建一个Cdib类来读取bmp文件信息再view类和Doc类调用来显示该位图。 10、保存为bmp位图:可以将在程序所画的图形保存为一幅bmp图片,通过view 中的SaveAsBmp(CString filename)实现。 11、线条类型及线宽的设置:可以将画出的线条设置成实线、虚线、点线,还可

基于MFC的简单画图程序实验

简单画图程序 【实验目的】 本实验目的是通过构建基于MFC的windows画图程序,使学生: (1) 理解MFC应用程序的运行机制 (2) 掌握使用MFC构建Windows应用程序的基本结构及编程的基本方法 (3) 理解和掌握MFC应用程序消息处理机制及应用 (4) 掌握类向导(ClassWizard)的使用 【实验要求】 (1) 必须做好实验原理的预习。 (2) 需要对提供的程序代码进行分析,并明确实验时还应在何处添加哪些语句。 【实验环境】 Microsoft Windows XP Microsoft Visual C++ 6.0 1 基本功能描述 1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。 3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。 2 设计思路 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同

3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4) 选择图形或其它属性,可进行下一次绘制。

初识画图教案

《初识画图》教案 亭湖区南洋小学王娟 【教学目标】 1、认识“画图”窗口的结构 2、学会用“画图”软件中的基本绘图工具 3、学会爱护小动物,注意自己的健康卫生。 【教学重难点】 重点:工具箱中工具的认识和颜料盒颜色的选取 难点:工具箱中工具的选择和使用 【教学过程】 一、导入(2分钟) 师:今天老师带来一位软件朋友,本领很厉害, 他还让老师给大家带来了一些礼物,大家想不想认识?它说了:只要和它交上朋友,就可以和大家分享自己的快乐, 诉说自己的烦恼,还可以描绘自己心中的梦想. 出示一些学生的画图作品,激发学生学习的兴趣) 二、新授: (一)、启动“画图”软件(3分钟) 师:他是谁呢?大家猜到了吗?它长得什么模样呢?他又躲在哪了呢?你们能不能快速的才能找到它? “画图”软件在“程序”的“附件”里面,同学们能不能自己打开画图软件呢?比一比,谁的动作最快。 (请一名学生上台演示:开始——程序——附件——画图)

(二)、认识“画图”窗口(28分钟) 认识画图窗口各组成部分(课件) 3分钟 师:这么快就找到他了,让我们再走进他的内心,对他作更深一步的了解,好吗? 师(出示“我的电脑”窗口的结构示意图):与“我的电脑”窗口比较,“画图”软件窗口有哪些组成部分? (引导学生认识“画图”窗口的标题栏、菜单栏、工具箱、类型框、工作区、颜料盒、状态栏) 调整画图区(出示预设的窗口)2分钟 师:都记住他的组成部分吗?它想和大家玩个捉迷藏的游戏? 它把自己哪些部分藏起来了?(隐藏画图工具栏等),演示如何调出正常的窗口 还有什么需要调整的吗?(纸张的调整) (学生自主探究,教师让举手的学生回答,并总结三个控制画布大小的控制点的操作技巧) (三)、了解工具箱 1、初识工具箱(5分钟) 师问:工具箱中有多少的按钮? 练习:《工具找家》 师演示练习方法:双击打开桌面上的“练习《工具找家》”图标。

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