简易画图板的设计与实现
画板系统的设计与实现.
画板系统的设计与实现本工程以一个比较有趣的例子,来说明如何使用Visual Basic来开发Windows应用程序。
本工程将使用VB来开发一个类似“画图”软件的程序,通过此程序,我们可以实现用鼠标画直线、矩形以及不规则线等,可以控制笔线粗细等功能。
本系统可以完成以下任务:●通过自制调色板选取画笔的前景色和背景色。
●用户可以设置控制画笔的粗细,颜色。
●可以画点、线(直线和不规则线)、矩形等。
●指示鼠标坐标,前景背景,按钮工具的信息等。
首先,现在窗体上添加各种控件,如图1-1、图1-1画图板的设计窗口图1-2画图板的运行窗口本系统采用的主要原理:●系统初始化:完成系统的各项初始化。
Dim nToolNum, nMyForeColor, nMyBackColor‘被访问的工具按钮、前景、背景Dim nStartX, nStartY, nEndX, nEndY As Integer‘指定开始和结束坐标Dim nLineWidth As Integer‘指定线宽Dim DrawOrNot As Boolean ‘是否开始画图Private Sub Form_Load()‘初始化各项参数nToolNum = 0nLineWidth = 1DrawOrNot = FalsenMyForeColor = RGB(0, 0, 0)nMyBackColor = RGB(255, 255, 255)DrawPic.ForeColor = nMyForeColorDrawPic.BackColor = nMyBackColorEnd Sub●在颜料盒中选定前景和背景:Private Sub Label1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)If (Button = 1) Then‘如果是左键,则进行前景颜色设置ForeSee.BackColor = Label1(Index).BackColor‘使用控件数组获取颜色DemoLine.BorderColor = ForeSee.BackColor‘显示线的颜色nMyForeColor = ForeSee.BackColorDrawPic.ForeColor = ForeSee.BackColorEnd IfIf (Button = 2) Then‘如果是右键,则进行背景颜色设置BackSee.BackColor = Label1(Index).BackColorLineCon.BackColor = BackSee.BackColornMyBackColor = BackSee.BackColorEnd IfnMyForeColor = ForeSee.BackColornMyBackColor = BackSee.BackColorEnd Sub●用滚动条控制画笔的线宽:Private Sub HScroll1_Change()LineCon.BackColor = BackSee.BackColorDemoLine.BorderWidth = HScroll1.ValueDrawPic.DrawWidth = HScroll1.ValueEnd Sub●用鼠标进行画图的过程控制:Private Sub DrawPic_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)‘依据按下的工具值,来进行坐标和作图方式的选择即DrawMode赋值,分为正常和异或(分别取值13和7)Select Case nToolNumCase 1DrawPic.CurrentX = X: DrawPic.CurrentY = YDrawPic.DrawMode = 13Case 2nStartX = X: nStartY = YnEndX = X: nEndY = YDrawPic.DrawMode = 7Case 3nStartX = X: nStartY = YnEndX = X: nEndY = YDrawPic.DrawMode = 7nStartX = X: nStartY = YCase 4If Button = 1 ThenDrawPic.ForeColor = nMyForeColorElseDrawPic.ForeColor = nMyBackColorEnd IfnStartX = X: nStartY = YDrawPic.DrawMode = 7DrawPic.PSet (nStartX, nStartY), DrawPic.ForeColorCase 5DrawPic.CurrentX = X: DrawPic.CurrentY = YDrawPic.DrawMode = 13nStartX = X: nStartY = YEnd SelectEnd SubPrivate Sub DrawPic_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘依据鼠标的移动来进行作图,并根据鼠标的左右键判断用前景还是背景作图If Button <> 0 ThenIf Button = 2 ThenDrawPic.ForeColor = nMyBackColorElseDrawPic.ForeColor = nMyForeColorEnd IfSelect Case nToolNumCase 1DrawPic.Line -(X, Y), DrawPic.ForeColorCase 2DrawPic.Line (nStartX, nStartY)-(nEndX, nEndY), Not (DrawPic.ForeColor)DrawPic.Line (nEndX, nEndY)-(X, Y), Not (DrawPic.ForeColor)nStartX = X: nStartY = YCase 3DrawPic.Line (nStartX, nStartY)-(nEndX, nEndY), Not (DrawPic.ForeColor), BDrawPic.Line (nEndX, nEndY)-(X, Y), Not (DrawPic.ForeColor), BnStartX = X: nStartY = YCase 4DrawPic.PSet (X, Y), nMyForeColorCase 5DrawPic.Line -(X, Y), nMyBackColorEnd SelectEnd IfLabel4.Caption = "X: " & X & " Y: " & Y‘显示鼠标的坐标位置End SubPrivate Sub Drawpic_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘依据按下的工具值,来用正常的绘图方式将画好的图重新绘制一遍,使在鼠标移动过程中的异或方式画的图被覆盖。
C#2010 制作简单绘图板
ptemp.Y = pstart.Y;
pstart.Y = pend.Y;
pend.Y = ptemp.Y;
}
}else if(pstart.X > pend.X)
{
if (pstart.Y < pend.Y)
{
ptemp.X = pstart.X;
pstart.X = pend.X;
pend.X = ptemp.X;
//鼠标弹起
private void picPaint_MouseUp(object sender, MouseEventArgs e)
{
if(e.Button == System.Windows.Forms.MouseButtons.Left)
{
pstart.X = e.X;
pstart.Y = e.Y;
}
}
(13)定义picPaint_MouseUp()函数用于获取当鼠标弹起时的坐标并赋值给点pend,然后设置paintBoard的鼠标弹起触发函数为picPaint_MouseUp(),代码如下所示。
图9-5设置菜单控件属性
(4)右击执行【查看代码】命令,打开Form1.cs代码文件。在class Form1中定义reset_click()函数用于新建绘图板,并将【新建】菜单项的鼠标单击触发函数设置为reset_click()函数,代码如下所示。
//新建绘图板
private void reset_click(object sender,EventArgs e)
(2)从【工具箱】面板的【菜单和工具栏】窗口中选择MenuStrip控件,并将该控件拖至Windows窗体内。然后,设置其菜单内容,如图9-4所示。
画图板java课程设计
画图板java课程设计一、教学目标本课程旨在通过Java编程语言实现一个简易的画图板应用程序,让学生在学习的过程中掌握Java编程的基本语法、面向对象编程思想以及图形用户界面(GUI)的设计与实现。
1.理解Java编程语言的基本语法。
2.掌握Java中的面向对象编程概念,如类、对象、封装、继承和多态。
3.熟悉Java中的图形用户界面(GUI)设计原则和常用组件。
4.能够使用Java编写简单的控制台应用程序。
5.能够运用面向对象编程思想设计和实现程序。
6.能够使用Java Swing库设计并实现一个图形用户界面。
情感态度价值观目标:1.培养学生的逻辑思维能力和问题解决能力。
2.激发学生对计算机科学和编程的兴趣。
3.培养学生的团队合作意识和自我学习能力。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程思想和图形用户界面(GUI)的设计与实现。
1.Java编程语言的基本语法:–数据类型、变量和常量–运算符和表达式–控制语句(条件语句、循环语句)–方法(定义、调用、参数传递)2.面向对象编程思想:–类和对象的概念–封装、继承和多态的原理和应用–构造函数和析构函数–静态成员和方法3.图形用户界面(GUI)的设计与实现:–Java Swing库的基本组件(如JFrame、JPanel、JButton等)–事件处理机制(事件监听器、事件处理程序)–绘图功能(Graphics类、绘图方法)三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法。
1.讲授法:教师讲解Java编程语言的基本语法、面向对象编程概念和图形用户界面设计原理。
2.讨论法:学生分组讨论实际案例,分析和解决问题。
3.案例分析法:分析经典案例,让学生理解面向对象编程思想和GUI设计原则。
4.实验法:学生动手编写代码,实现画图板应用程序。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:《Java编程思想》或《Java核心技术》2.参考书:《Java Swing教程》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络环境五、教学评估为了全面、客观、公正地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:学生课堂参与度、提问回答、小组讨论等,占总成绩的20%。
简易画图板设计报告分析
设计报告:Graphic简易画图板-----韩伟谢程焜肖越周峰电科二班1设计目的设计一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。
此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。
并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开以及笔刷的使用。
2 总体设计设计图如图6图63详细设计首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。
为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。
当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。
添加的六个菜单项的ID及名称如表1所示。
然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。
在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。
因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述:private: UINT m_nDrawType;接着,在视类的构造函数中将此变量初始化为0,程序代码如下:CGraphicView::CGraphicView(){// TODO: add construction code herem_nDrawType=0;}利用switch/case语句,来分别完成相应图形的绘制。
当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。
程序代码如下:void CGraphicView::OnDot(){// TODO: Add your command handler code herem_nDrawType=1;}void CGraphicView::OnLine(){// TODO: Add your command handler code herem_nDrawType=2;}void CGraphicView::OnRectangle(){// TODO: Add your command handler code herem_nDrawType=3;}void CGraphicView::OnEllipse(){// TODO: Add your command handler code herem_nDrawType=4;}void CGraphicView::OnShanxing(){// TODO: Add your command handler code herem_nDrawType=5;}void CGraphicView::OnLianxuxian(){// TODO: Add your command handler code herem_nDrawType=6;}3.1点、直线、矩形、椭圆的绘制(周峰谢程焜)对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。
简易画板设计报告
简易画板设计报告1. 引言本文档主要介绍了一个简易画板的设计报告。
该画板的设计目标是提供一个简单易用的界面,用户可以使用鼠标在画板上绘制图形,选择不同的颜色和线条粗细进行绘制。
该设计报告将介绍画板的需求分析、设计思路、实现细节以及未来的改进方向。
2. 需求分析2.1 功能需求简易画板需要具备以下基本功能:•绘制基本图形:直线、曲线、矩形、圆形等。
•支持选择画笔颜色和线条粗细。
•支持撤销和重做操作。
•支持保存和载入绘制的图形。
•支持清空画板。
2.2 非功能需求除了基本的功能需求外,简易画板还需要具备以下非功能需求:•界面简洁明了,操作简单易懂。
•绘制响应迅速,用户体验良好。
3. 设计思路3.1 架构设计简易画板的架构设计使用MVC(Model-View-Controller)模式,分为三个主要组件:•Model:用于存储和处理画板上的图形数据。
•View:用于显示画板界面和绘制图形。
•Controller:用于处理用户的输入动作和操作。
MVC模式的设计可以使各个组件之间的耦合度低,易于维护和修改。
3.2 功能设计绘制基本图形的功能可以通过在画板上监听鼠标的按下、移动和抬起动作来实现。
根据用户选择的图形类型和画笔属性,绘制对应的图形。
选择画笔颜色和线条粗细的功能可以通过在界面上展示颜色和粗细的选项,并监听用户的选择来完成。
撤销和重做操作可以通过记录绘制的图形历史记录,以栈的形式实现。
保存和载入绘制的图形可以将图形数据保存到文件或者数据库中,供后续使用。
清空画板的功能可以通过清除画板上的所有图形实现。
4. 实现细节4.1 技术选择在实现简易画板的功能时,我们可以选择使用以下技术:•前端界面:使用HTML、CSS和JavaScript来实现画板的界面和交互。
•后端存储:使用文件或者数据库来保存绘制的图形数据。
4.2 前端设计前端界面的设计可以使用HTML和CSS来实现,界面需要包括画板和工具栏两个主要的部分。
重点难点和错误分析 -项目五 简易画图板
团队讨论
组织团队成员讨论,分析 可能的原因,如算法优化 不足、硬件加速支持不够 等。
实验验证
通过实验验证,确定问题 根源在于绘图算法的性能 瓶颈。
成功解决问题的方法和策略
算法优化
针对绘图算法进行深入研究,采用更 高效的算法和数据结构,提高绘图精 度和速度。
硬件加速
利用硬件加速技术,如GPU加速,大 幅提升绘图性能。
避免或减少错误的方法建议
编码规范
遵循一定的编码规范,提高代码的可读性和可维护性。
充分测试
在开发过程中进行充分的测试,包括单元测试、集成测试 和用户验收测试等,确保软件质量。
深入了解用户需求
与用户保持密切沟通,充分理解用户需求,避免设计出不 符合用户期望的界面和功能。
提高技术水平
不断学习新技术和知识,提高自己的技术水平,减少在实 现功能时出现的技术难题。同时,积极寻求团队或社区的 帮助和支持,共同解决问题。
编码不规范
如变量命名不规范、代码注释不清晰等,导 致代码可读性差,易于出错。
对用户需求理解不足
没有充分理解用户需求,导致设计出的界面 和功能不符合用户期望。
缺乏测试
在开发过程中没有进行充分的测试,导致一 些潜在错误没有被及时发现和修复。
技术水平不足
由于缺乏相关技术经验或知识,导致在实现 某些功能时出现技术难题。
界面简洁易用
项目的界面设计简洁明了,用户可以轻松上手, 无需复杂的操作即可完成简单的绘图任务。
3
跨平台兼容性
项目在Windows、Mac和Linux等操作系统上均 可正常运行,具有良好的跨平台兼容性。
经验教训反思
需求分析不足
在项目初期,对用户需求的分析 不够充分,导致在开发过程中出 现了一些功能上的不足和缺陷。
基于VC MFC程序设计——简易画图板
包头师范学院本科学年论文论文题目:基于VC++MFC程序设计——简易画图板院系:信息科学与技术学院专业:计算机科学与技术学号:姓名:指导教师:撰写学年:2010至2011学年二零一零年十二月摘要本软件是利用VC++这个强大的可视化编程工具开发的,软件主要功能包括图形的绘制、线型的设置、颜色的设置,图形文件的重绘和保存等功能。
本文介绍了如何完成上述功能,同时详细阐述了画图系统的实现过程以及对画图系统所做的功能扩充。
在画图软件设计上,其主要任务是:实现“绘制图形”、“图形的保存”两项功能。
本软件具有实用性、稳定性、易用性,和可维护性的特点,应该说它应是一个开放性的软件,用户可以根据需要对其功能进行扩充、完善与修改,使其符合自己的要求。
总之,本软件是一个逐步完善的软件。
关键词:VC++;MFC;绘图AbstractThis software is using vc + + this powerful visual programming tool development, software main functions including graphics rendering, linetype Settings, color setting, graphics file redraw of preserving and function.The paper introduced how to accomplish these functions, and explains in detail drawing system realization process and to drawing system do function expansion. In drawing software design, its main task is to achieve "drawings", "graphic save" two functions.This software has practicability, stability, ease-of-use, and maintainability characteristic, should say it should be an open software, the user can according to the needs of its functions were expansion, perfect and modification, make them comply with their requirements. Anyhow, this software is a perfect gradually software.Key words:Vc + +; MFC; drawing目录引言 (1)第1章vc++6.0和MFC简介 (2)1.1 vc++6.0简介 (2)1.2 MFC简介 (2)第2章基础知识 (2)2.1工程的新建 (3)2.2单文档简介 (4)2.3添加消息响应函数 (5)2.4资源 (5)2.5设备环境 (6)第3章简易画图板的制作 (6)3.1设计目的 (6)3.2 总体设计 (7)3.3详细设计 (7)3.3.1点、直线、矩形、椭圆的绘制 (9)3.3.2连续线和扇形的绘制 (11)3.3.3画刷 (13)3.3.4设置对话框 (15)3.3.5颜色 (16)3.3.6打开与保存 (17)第4章结果及结论 (17)4.1运行结果 (17)4.2结论 (18)参考文献 (20)附录:简易画图板主要程序代码 (21)致谢 (31)引言计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。
简易绘图板程序
C#课程设计报告书----简易绘图板程序系别: 计算机科学与工程系专业: 计算机科学与技术班级:学号:姓名:同组人员:日期: 2007 3 10目录设计目的------------------------------------------ 3 总体设计------------------------------------------- 3 模块设计------------------------------------------- 4 源程序清单------------------------------------------- 15 设计测试------------------------------------------ 15 设计小结------------------------------------------- 17一设计目的1)掌握.NET基本结构以及C#语言的基本知识和技能;2)基本掌握面向对象程序开发的基本思路和方法;3)掌握GDI+开发基本知识;4)利用所学的基本知识和技能,进行简单数据库应用程序设计课程设计是我们的主要教学实践环节,通过课程设计我们围绕基础课或者专业课,运用学的知识,结合实际应用设计而进行的一次综合分析设计能力的训练.课程设计的宗旨在与培养我们在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料,综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础.通过本次课程设计,能够锻炼我们的动手能力,使我们能够很好的巩固上一个学期所学的知识内容,掌握工程软件设计的基本方法,强化了我们上机动手的能力,通过这次的课程设计,我们感觉到了以前学习的不足,以及在学习的过程中遇到的问题,能使我们对学过的知识加深理解,为后续学的计算机专业课,打下坚实的基础.在课程设计过程中我们感觉到了,团体合作的重要性,我们组几个人进行合作分工,提高了设计的效率,充分体现了团体精神,为以后出去在社会上工作时的合作精神奠定了基础,能够感觉到合作的重要性.还有在老师的指导下我们我们才能顺利的进行设计,感觉到了老师的重要性,有了老师我们设计才有了方向目标.二总体设计简单绘图板程序此图形图像处理机具有如下功能:1、能由鼠标控制绘制直线、矩形、椭圆,并能控制线条的颜色。
基于C++Builder画图板软件的设计与实现
有广 阔的 发展 前 景 ,它 不仅 使 用 户 可 方便 地 享 受移 动 商务 环 境 下 的个 性 化信 息 服 务 ,也有 效 地 提 高 了移 动 商务 的服 务 质 量 和
资源使用效益。但是,移动商务环境下的个性化推荐是一项多
学 科 交 叉 的系 统 工 程 , 多种理 论和 技 术 的应 用 研 究对 提 高 个 性
顾客收到服务员的推荐后 ,根据 自身的个性化要求C 与情境 状态W ,确定各菜系各口味的最终选择数量C N i i 。 2 . 2服务员的推荐规则
3 对图像的处理包括 :旋转、缩放、色彩明亮度的变化 , 服务 员的推荐规则包括 :确 定菜品推荐数量 的规则R 1 和 图像 的锐化、柔化、反色和浮雕处理等功能; 确 定各 口味具体 菜肴 的推 荐规 则R 2推荐 规则集 合可 定义 为 4 实现 B MP 格式 图 片与J P G 格 式图 片的 转换。 R = { R 1 . R 2 } 。服务方利用所获得的顾客个性化信息及情景信息与 本文所设计的软件功能还没有Wi n d o ws 画图板的功能完 消费行为决策规则 的结论共同构成服务员推荐规则的条件 ,通 备 ,也没有P h o t o s h o p 功能强大 ,还有待完善。( 过R 1 和R 2 规则的顺序推理,最终构成服务员的推荐菜单。 ( 1) 菜品推荐数量的规则R 1 菜品总量由顾客聚餐 目的、人数、节假 日、顾客的口味偏 [ 1 ] 刘光 . C+ + Bu i d e r程 序设计导 学【 M] . 北京 :清华大学 出版社 , 好 、菜 系偏 好 、月 份 的影响 。 因此 规则 R 1 可 表示 为 : 2 00 4. 1 —8.
提 出了混合个性推荐研究的模型 ,希望该模型研究为未来的研 究者提供有益的参考。 本 文 提 出 的 混 合 个 性 推 荐 模 型 对 于 具 有 顾 客 个 性 化 特 征
我学院:C#简易画图程序的设计与实现
学游戏,就上我学院!简易画图程序的设计与实现目录1课题描述 (2)2程序设计流程图 (2)2.1 系统说明 (2)2.2主界面的设计 (3)3 功能的设计 (3)3.1文件功能的设计 (3)3.2工具栏的功能的设计 (4)4测试 (6)4.1系统测试 (6)4.2 调试结果 (7)4.3 错误原因分析 (7)总结 (7)参考文献 (8)附录: (8)源代码: (8)学游戏,就上我学院! 1课题描述1、理解 Windows 窗体2、使用基本控件如标签、文本、按钮、列表框和组合框3、掌握窗体的常用属性和方法4、设计一个简单的画图程序2程序设计流程图2.1 系统说明一个简易的画图程序,能进行简单的画图工作。
学游戏,就上我学院!2.2主界面的设计3 功能的设计3.1文件功能的设计private void新建ToolStripMenuItem_Click(object sender, EventArgs e){Graphics g = this.CreateGraphics();g.Clear(backColor);toolStrip1.Enabled = true;theImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height); editFileName = "新建文件";this.Text = "txt\t" + editFileName;ig = Graphics.FromImage(theImage);ig.Clear(backColor);}学游戏,就上我学院!private void退出ToolStripMenuItem_Click(object sender, EventArgs e) {Application.Exit();}private void保存ToolStripMenuItem_Click(object sender, EventArgs e) {saveFileDialog1.Filter = "图像(*.bmp)|*.bmp";saveFileDialog1.FileName = editFileName;if (saveFileDialog1.ShowDialog() == DialogResult.OK){theImage.Save(saveFileDialog1.FileName, ImageFormat.Bmp);this.Text = "txt\t" + saveFileDialog1.FileName;editFileName = saveFileDialog1.FileName;}}private void Form1_Paint(object sender, PaintEventArgs e){Graphics g = this.CreateGraphics();if (theImage != null){//g.Clear(backColor);g.DrawImage(theImage, this.ClientRectangle);}}3.2工具栏的功能的设计private void toolStripButton1_Click(object sender, EventArgs e){ChangeBackColor(function);function = 1;学游戏,就上我学院!toolStripButton1.BackColor = Color.Gray;}private void toolStripButton2_Click(object sender, EventArgs e) {ChangeBackColor(function);function = 2;toolStripButton2.BackColor = Color.Gray;}private void toolStripButton3_Click(object sender, EventArgs e) {ChangeBackColor(function);function = 3;toolStripButton3.BackColor = Color.Gray;}private void toolStripButton4_Click(object sender, EventArgs e) {ChangeBackColor(function);function = 4;toolStripButton4.BackColor = Color.Gray;}private void toolStripButton5_Click(object sender, EventArgs e) {ChangeBackColor(function);function = 5;toolStripButton5.BackColor = Color.Gray;}private void toolStripButton6_Click(object sender, EventArgs e) {ChangeBackColor(function);function = 6;toolStripButton6.BackColor = Color.Gray;}private void toolStripButton7_Click(object sender, EventArgs e) {学游戏,就上我学院!if (colorDialog1.ShowDialog() == DialogResult.OK){foreColor = colorDialog1.Color;if (colorDialog1.Color != Color.Black)toolStripButton7.BackColor = colorDialog1.Color;elsetoolStripButton7.BackColor = Color.Silver;}4测试4.1系统测试选择“生成”→“生成解决方案”选项,以生成此项目。
Java实现简易画图板
Java实现简易画图板本⽂实例为⼤家分享了Java实现简易画图板的具体代码,供⼤家参考,具体内容如下这是Windows系统⾃带的画图板,我们就是模仿着⽤Java去写⼀个简易版的画图板。
效果图图中的四个颜⾊按钮是可以配合要画的图形⽽改变线条颜⾊的,⽽且每次打开颜⾊按钮的颜⾊都是随机的。
⽬前画图什么的都没什么问题,只是⼀些细节没有去完全修复了,但不影响使⽤,再加上近段时间有点太忙,就没有去完善相关细节了,有兴趣的⼩伙伴可以评论区帮忙提出指正意见哈。
画图板UI界⾯代码import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;import java.awt.Graphics;import java.util.Random;public class DrawGraphics {Random rand=new Random();public static void main(String []args){DrawGraphics draw=new DrawGraphics();draw.displayUI();}public JButton getButton(String s,DrawListener dl,boolean flag){JButton btn=new JButton();//每个按钮的尺⼨Dimension dim=new Dimension(200,50);//如果flag为true,创建⽂字按钮,否则创建颜⾊按钮if(flag){btn=new JButton(s);}else{Color c= new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256));btn.setBackground(c);}btn.setPreferredSize(dim);btn.addActionListener(dl);return btn;}public void displayUI(){JFrame frame=new JFrame();FlowLayout f1=new FlowLayout();frame.setTitle("画图板");frame.setSize(1000,1000);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocationRelativeTo(null);frame.setLayout(f1);frame.setResizable(false);DrawListener dl=new DrawListener();String []name={"直线","矩形","圆","三⾓形"};for(int i=0;i<name.length;i++){frame.add(getButton(name[i],dl,true));}for(int i=0;i<name.length;i++){frame.add(getButton("",dl,false));}frame.addMouseListener(dl);frame.setVisible(true);// 获取画笔 --- 必须要放在可视化之后Graphics g=frame.getGraphics();dl.g=g;dl.btnstr=name[0];=name;}}画图板UI监听器代码import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import java.awt.Color;import java.awt.Graphics;public class DrawListener implements MouseListener,ActionListener{ Graphics g;int x1,x2,y1,y2;int x3,x4,x5,y3,y4,y5;int count=0;String []name;String btnstr;int i;@Overridepublic void actionPerformed(ActionEvent e) {btnstr=e.getActionCommand();if(btnstr.equals("")){JButton btn=(JButton)e.getSource();Color btnColor=btn.getBackground();g.setColor(btnColor);}else {for(i=0;i<name.length;i++){if(btnstr.equals(name[i]))break;}}}@Overridepublic void mouseClicked(MouseEvent e) {if(btnstr.equals(name[3])||btnstr.equals("")){g.drawOval(e.getX()-4, e.getY()-4, 8, 8);if(count==0){x3=e.getX();y3=e.getY();count++;}else if(count==1){x4=e.getX();y4=e.getY();g.drawLine(x3, y3, x4, y4);count++;}else if(count==2){x5=e.getX();y5=e.getY();g.drawLine(x3, y3, x5, y5);g.drawLine(x4, y4, x5, y5);count=0;}}}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubx1=e.getX();y1=e.getY();}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stubx2=e.getX();y2=e.getY();if(btnstr.equals(name[0])||btnstr.equals("")){g.drawLine(x1, y1, x2, y2);}else if(btnstr.equals(name[1])||btnstr.equals("")){g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));}else if(btnstr.equals(name[2])||btnstr.equals("")){g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));}}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
基于HTML5Canvas的画图板设计与实现
摘要Web2.0带来的丰富互联网技术让所有人都享受到了技术发展和体验进步的乐趣。
而作为下一代互联网标准,HTML5自然也是备受期待和瞩目。
HTML5是近十年来Web开发标准巨大的飞跃。
和以前的版本不同,HTML5并非仅仅用来表示Web内容,它的新使命是将Web 带入一个成熟的应用平台,在HTML5平台上,视频、音频、图象、动画,以及同电脑的交互都被标准化。
现阶段对于HTML5技术的研发和开发工作主要集中在技术草案的确立与新互联网应用的开发上,而随着互联网的发展,HTML标准也在不断变化,HTML标准已经走过第4代了,因为它能够用简单的标签元素,代替属性能实现之前需要用很多复杂JavaScript 代码才能有实现的功能,HTML5越来越受到欢迎。
HTML5带来很多令人激动的新特性,这在之前的HTML中是不可见到的。
其中一个最值得提及的特性就是用于绘画的HTML Canvas,可以对2D或位图进行动态、脚本的渲染。
本文详细分析了HTML5技术的简介和发展前景,并深入探讨了HTML5引入的核心标签Canvas元素,介绍了Canvas可以实现的主要功能,在此基础上实现了部分类似Windows画图板的功能,包括铅笔、图章仿制、画直线、圆、矩形、橡皮擦、背景图、取色板、插入文字等功能,在实现过程中也利用了最新的CSS3技术,最后再次总结了这次毕设的经验和对未来的展望。
本文针对其引入的Canvas绘图元素进行了深入的研究,此元素可以替代画图作为动画渲染的工具,效率与安全性更高,开发更便捷,必将是以后的动画,游戏等应用首选的开发方式,前景非常好。
【关键词】Web2.0 HTML5 CSS3 CanvasABSTRACTWeb2.0 brings a wealth of Internet technology for all to enjoy the fun of technology development and experience progress. As a next-generation Internet standard, HTML5 is naturally highly anticipated and attention. HTML5 is a huge leap over the past decade Web development standards. Unlike the previous version,HTML5 is not just used to represent Web content, its new mission is the Web into a full-fledged application platform, HTML5 platform, video, audio, image, animation, and interaction with the computer be standardized. At this stage for the HTML5 technology and development work focused on the establishment of the draft technology and new Internet application development, HTML standards are changing with the development of the Internet, HTML standard has gone through four generations, because it simple label elements, instead of before the property can be realized with a lot of complex JavaScript code in order to achieve the functions, HTML5 has been more popular.HTML5 brings a lot of exciting new features. This is not seen in the previous HTML. One of the most worth mentioning the characteristics is HTML Canvas for painting, 2D or bitmap rendering of dynamic script. I detailed analysis the HTML5 technology introduction and development prospects, a deeper look into the core of the introduction of HTML5 tag Canvas element, the Canvas can be achieved, based on the a similar Windows drawing board, including pencil, stamp imitation, draw a straight line, circle, rectangle, eraser, background image, take a swatch in the realization of the process also takes advantage of the latest CSS3 techniques and, finally, this complete set up experience and vision for the future.This paper introduces the Canvas drawing elements which conducted research, this element can replace the drawing as a tool for animation rendering, higher efficiency and security, the development of more convenient, be the future animation, games and other application development method of choice , the outlook is very good.【Key words】WEB2.0 HTML5 CSS3 Canvas目录前言 (1)第一章关于HTML5和画图板 (2)第一节HTML5简介 (2)第二节HTML5特性 (2)第三节HTML5国内外发展现状 (3)第四节画图工具 (4)第二章相关技术简介 (5)第一节Canvas元素简介 (5)第二节第一个Canvas程序的实现 (5)第三节JavaScript及jQuery简介 (7)第四节CSS3简介 (9)第五节开发工具DreamWeaver介绍 (12)第六节调试工具Firefox及Firebug简介 (13)第三章功能设计 (16)第一节需求设计 (16)第二节基本原理 (17)第三节布局及界面设计 (19)第四节JavaScript设计 (20)第四章功能的实现 (21)第一节简单功能的实现 (21)第二节前台显示实现 (24)第三节JavaScript画图实现 (25)第四节最终效果 (32)第五节不足之处 (38)第五章结束语 (39)致谢 (40)参考文献 (41)附录 (42)前言随着互联网时代的高速发展,上网早已经成为人民日常生活中一个必不可少的部分,人们可以在网络上获取信息,甚至于在网络上完成日常的正常生活。
画图板的设计与实现学士学位论文
北京邮电大学毕业设计(论文)任务书第1页第2页第3页画图板的设计与实现摘要本文的主要内容是记述同题课程设计中的一些关键技术和辅助文档。
本文的目标是设计一款基于Qt编程语言的简易画图板,使其具有涂鸦,绘制基本图形等功能。
本程序具有一定的实用意义和价值。
功能分装良好可以方便的根据需求进行扩充。
本文运用材料综述的方法,首先记述了编程环境的搭建,介绍了Qt的优点,Qt编码规范和Qt的双缓冲机制在绘图中的运用。
着重分析了Qt在软件开发中的编程机制,并根据应用特点进行了设计的构件与算法的需求分析。
其次在需求分析中给出是可行性分析,然后放入功能分析图和流程图帮助梳理设计思路。
最后在详细设计阶段完成编码,实现程序功能,得到一个功能健全的画图板应用程序。
在本文中将设计并实现画图板的一些基本功能,例如:新建,打开,保存,清空,放大,缩小,还原,基本图形绘制,转换画笔颜色等功能。
最后运行结果符合设计要求,方案可行。
经过测试后程序功能实现良好。
关键词嵌入式Linux QT;图形用户界面;电子画板;双缓冲机制The Realization of Drawing Board FunctionAbstractThe main content of this paper is described with the course in the design of so me key technologies and supporting documents.The goal of this article is to design a simple drawing board based on Qt programming language, make its have graffiti, dr aw up the basic graph, and other functions.This program has a certain practical signif icance and value.Function according to the requirements of good packaging can easily expanded.This article applies the method of material review, the construction of the first d escribes the programming environment, this paper introduces the advantages of Qt Qt code conventions and Qt double-buffering mechanism used in the drawing.Qt program ming in the software development mechanism is analyzed emphatically, and the desig n based on the application of artifacts and requirements analysis of the algorithm.Seco nd is feasibility analysis is given in the requirements analysis, and then into the com b function analysis diagram and flowchart to help design thinking.Program is realized by encoding the detailed design phase is complete, the function, get a functioning dr awing board application.Designed and implemented in this paper some basic function of drawing board, f or example: the new, open, save, empty, enlarge, shrink, reduction, basic graphics ren dering, convert the brush color, and other functions.Finally run results conform to the requirements of the design, the scheme is feasible.Program function is good.Key words Linux QT ; graphical user interface (GUI);electronic drawing board; double buffering mechanism目录摘要 (i)Abstract (ii)1 引言 (1)1.1 研究背景 (1)1.2 研究的目的和意义 (2)1.3 程序设计的环境选择 (2)2 画图板设计的技术背景 (3)2.1 Qt的主要特征 (3)2.2 QT creator简介 (3)2.3 Qt creator环境搭建 (4)2.4 QT编程机制信号与槽机制简介 (5)2.5 Qt编码规范 (7)2.6 GDI绘图理论基础 (9)2.7 双缓冲机制 (9)2.8 双缓冲技术绘图 (10)3 画图板项目需求分析 (12)3.1 可行性研究 (12)3.1.1 经济可行性 (12)3.1.2 技术可行性 (12)3.1.3 运行可行性 (12)3.1.4 时间可行性 (12)3.1.5 法律可行性 (12)3.2 功能分析 (13)3.3 系统用例分 (13)3.4 性能需求 (13)3.4.1 应用需求分析 (14)3.4.2 运行需求分析 (14)3.4.3 其他需求分析 (14)4 画图板概要设计 (15)4.1 画图板功能模块关系与划分 (15)4.2 画图板总体设计流程图 (16)5 画图板详细设计 (17)5.1 画图板界面设计 (18)5.1.1 画图板的界面元素声明 (18)5.1.2 图板界面布局实现 (19)5.2 画图板功能详细设计 (20)5.2.1 画图板的文件编辑功能实现 (20)5.2.2 画图板的图片编辑功能实现 (23)5.3 画图板绘图功能实现 (26)5.3.1 绘图板的基本图形绘制功能实现 (26)5.3.2 绘图板自由绘图功能实现 (30)5.3.3 画图板画图辅助选项实现 (33)6 画图板程序测试 (35)6.1 测试的重要性及目的 (35)6.2 测试的方法 (36)6.3 测试用例 (36)6.4 测试结果 (36)结论 (38)参考文献 (39)致谢 (40)外文原文 (41)中文翻译 (49)1 引言随着操作系统不断的更新换代,其自带的画图板界面及功能也是不断变化着,像是xp、vista、win7,它们的画图板的界面布局风格以及功能都有所不同。
简易绘图板的课程设计
简易绘图板的课程设计一、课程目标知识目标:1. 学生能够理解简易绘图板的原理,掌握基本的绘图工具和功能。
2. 学生能够运用所学的绘图技能,创作出具有个性和创意的图画。
3. 学生能够了解并描述绘图板在信息技术和艺术设计领域的应用。
技能目标:1. 学生能够熟练操作简易绘图板,运用绘图软件进行基本的绘图操作。
2. 学生能够运用绘图板的各项功能,如画笔、橡皮、颜色选择等,进行创意绘图。
3. 学生能够通过实践,掌握基本的绘画技巧,提高观察力和动手能力。
情感态度价值观目标:1. 学生培养对信息技术的兴趣和爱好,增强对艺术创作的自信心。
2. 学生在团队协作中,学会相互欣赏、尊重和借鉴,培养合作精神。
3. 学生通过创作,培养审美观念,提高对美的感知和表达能力。
课程性质:本课程为信息技术与艺术相结合的实践课程,旨在提高学生的动手操作能力、创新意识和审美情趣。
学生特点:六年级学生具备一定的信息技术基础,好奇心强,喜欢尝试新事物,有一定的绘画基础。
教学要求:教师需引导学生掌握简易绘图板的使用方法,注重培养学生的创新能力和审美观念,结合实际操作,提高学生的实践能力。
通过课程目标的分解,使学生在课程结束后能够独立完成创意绘图作品,并在此过程中培养良好的情感态度和价值观。
二、教学内容1. 简易绘图板的介绍与认识:- 绘图板的原理与结构- 绘图板在信息技术和艺术领域的应用2. 绘图软件的基本操作:- 软件的启动与界面认识- 基本工具的使用:画笔、橡皮、颜色选择、图层等3. 绘画技巧与创作实践:- 线条练习与图形绘制- 色彩搭配与涂抹技巧- 简单人物、景物的绘画方法4. 创意绘图作品制作:- 主题设定与构思- 绘图步骤与方法- 作品展示与评价教学内容安排与进度:第一课时:简易绘图板的介绍与认识,绘图软件的启动与界面认识第二课时:基本工具的使用,线条练习与图形绘制第三课时:色彩搭配与涂抹技巧,简单人物、景物的绘画方法第四课时:创意绘图作品制作,作品展示与评价教材关联章节:- 信息技术课本第三章:《计算机绘画》- 艺术课本第二章:《色彩与图形》教学内容注重科学性和系统性,结合课程目标,使学生能够在实践中掌握绘图板的使用和绘画技巧,培养创新能力和审美观念。
简易画图板设计报告
设计报告:Graphic简易画图板-----韩伟谢程焜肖越周峰电科二班1设计目的设计一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。
此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。
并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开以及笔刷的使用。
2 总体设计设计图如图6图63详细设计首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。
为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。
当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。
添加的六个菜单项的ID及名称如表1所示。
然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。
在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。
因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述:private: UINT m_nDrawType;接着,在视类的构造函数中将此变量初始化为0,程序代码如下:CGraphicView::CGraphicView(){// TODO: add construction code herem_nDrawType=0;}利用switch/case语句,来分别完成相应图形的绘制。
当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。
程序代码如下:void CGraphicView::OnDot(){// TODO: Add your command handler code herem_nDrawType=1;}void CGraphicView::OnLine(){// TODO: Add your command handler code herem_nDrawType=2;}void CGraphicView::OnRectangle(){// TODO: Add your command handler code herem_nDrawType=3;}void CGraphicView::OnEllipse(){// TODO: Add your command handler code herem_nDrawType=4;}void CGraphicView::OnShanxing(){// TODO: Add your command handler code herem_nDrawType=5;}void CGraphicView::OnLianxuxian(){// TODO: Add your command handler code herem_nDrawType=6;}3.1点、直线、矩形、椭圆的绘制(周峰谢程焜)对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。
绘图板课程设计
绘图板课程设计一、教学目标本课程旨在通过绘图板的使用教学,让学生掌握绘图板的基本功能,包括线条、图形、颜色填充等,能利用绘图板进行简单的创作和设计。
在技能方面,使学生能熟练操作绘图板,培养学生的观察力、想象力和创造力。
在情感态度价值观方面,培养学生对绘画艺术的热爱,提高学生审美能力,培养学生合作、探究的学习态度。
二、教学内容根据课程目标,我们将教学内容分为以下几个部分:1. 绘图板的基本功能和使用方法;2. 线条、图形、颜色填充等基本绘图技巧;3. 简单的创作和设计练习;4. 作品欣赏和分析。
三、教学方法为了激发学生的学习兴趣和主动性,我们将采用多种教学方法,如讲授法、示范法、练习法、小组讨论法等。
在教学过程中,教师将结合理论讲解和实际操作,让学生在实践中学习和掌握知识。
同时,学生进行小组讨论和作品展示,培养学生的合作和交流能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1. 绘图板和相关软件;2. 教材和参考书;3. 网络资源,如绘图板教学视频、优秀作品欣赏等;4. 实验设备,如绘图板、彩色笔等。
以上是本课程的教学设计,我们将根据实际情况进行调整和优化,以达到最佳的教学效果。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
平时表现主要评估学生的课堂参与度、合作态度等;作业主要评估学生的绘图技巧和创作能力;考试则是对学生综合运用所学知识进行创作的评估。
评估方式将力求客观、公正,全面反映学生的学习成果。
六、教学安排本课程的教学安排将紧凑合理,确保在有限的时间内完成教学任务。
教学进度将根据课程目标和教学内容进行规划,同时考虑学生的实际情况和需要,如作息时间、兴趣爱好等。
教学地点将选择适合绘图板教学的环境,以保证教学效果。
七、差异化教学根据学生的不同学习风格、兴趣和能力水平,我们将设计差异化的教学活动和评估方式。
例如,对于绘画能力较强的学生,可以提供更深入的创作指导;对于绘画基础较差的学生,则可以通过额外的辅导和练习来提高他们的绘画技能。
Java基础之简单画图板的实现
Java基础之简单画图板的实现Java基础之简单画图板的实现不难理解,画图板就是主要用鼠标的各种操作实现在窗体界面上绘图。
所以实现一个简单的画图板,就必须先有一个事件源对象(窗体界面),为了更加美观,再在窗体界面上实例化两个面板对象,在其中一个面板对象上定义所画图形按钮(可以使用流式布局来世界面更美观);画图时,只在另一个面板对象上面进行操作。
代码如下:注:暂不考虑重绘问题如果想要在画图板面板上实现绘图,就必须为其添加一个监听器来监听鼠标对其的操作。
定义监听器的代码如下:这里我所写的简单画图板主要实现 "画笔","画直线","画矩形","画椭圆","画三角形","改变所画图形颜色","设置画笔粗细"的功能。
要实现画不同的图形,就必须要点击不同的按钮来选择要画的是一个什么样的图形,对此如果我们一个一个声明不同的按钮,则会定义较多的名称,而且还会影响代码的简洁性,所以可以将这些不同的按钮定义成一个数组中储存的对象,同理颜色按钮也可以声明一个数组来储存,在这里我选择字符串类数组储存按钮上的字符串,Color类数组储存按钮上的颜色。
实现代码如下:(注意添加监听器)最后,要实现画图,就必须获取画笔对象,获取画笔对象需要注意两点:1、图形画在哪个图形上,那么画笔组件就在这个图形上获取2、获取画笔对象,一定在窗体可见之后3、获取的画笔对象必须要用一个方法来传给自己定义的事件监听类中实现代码如下:其中DrawMouse类中定义了public void setG(Graphics g) {this.g = g;}方法来传递画笔。
以上的基本工作完成之后,就关注可以具体如何画出一个图形出来。
定义一个DrawMouse类继承了接口MouseListener, ActionListener,MouseMotionListener首先需要实例化一个Graphics对象g来接收传过来的画笔对象,由于我使用的是字符串数组来储存按钮上面的字符串,以及Color类的数组储存按钮的背景颜色,所以在重写ActionListener接口中的actionPerformed方法时,要首先获取按钮上的颜色或者文字,当获取的不是文字时,说明点击的是颜色按钮,读取按钮的颜色后给设置画笔的颜色;如果读取的是文字时,需要继续下一步的操作,实现代码如下:Java中提供了许多画图形的方法,画图的时候毫无疑问需要获取一定数量的坐标值,在继承的接口中的方法里,有一个MouseEvent 类型的形参e,可以通过调用getX(),getY()来获取经一定操作后当前位置的坐标的x值或y值。
基于触摸屏的画图板的设计与实现
导 师:王洁 答辩人:郭佳烽 专 业:电子1101
论文框架
1 课题分析 2 课题任务 3 实现方法 4 总结
课题分析
现今触摸屏是一种最新的电脑输入设备,它 是目前最简单、方便、自然的而且又适用于 中国多媒体信息查询国情的输入设备,触摸 屏具有坚固耐用、反应速度快、节省空间、 易于交流等许多优点,极大地方便了那些不 懂电脑操作的用户。基于触摸屏的画图板的 设计能让我们在实现设计的同时,感受到触 摸屏操作简便直观、图像清晰、坚固耐用及 节省空间,我们可以在触摸屏上画图,轻易 的实现人机,具有操作方便,使用灵活,效 率高及输入速度快的特点。
按键电路
TFT-LCD STM32微控制器的工作电路
软件总体框图
总结
本次设计主要介绍了一种基于 STM32单片机的触摸屏人机界 面系统的设计。通过总体设计, 能实现触摸屏画图板的任务要求。
该设计主要运用了触摸屏,我们 可以感受到人机的交互,这方便 了人们对计算机的操作使用,是 一种极有发展前途的交互式输入 技术。
系统框图
本设计采用STM32作为微控制器,其外围硬件模块 主要 包括电源模块﹑微处理器模块﹑按键及液晶显示屏接口。 电源采用USB供电,在设计过程中用PC供电
硬件总体框图
核心板主要有微控器及其必要的外围电路。
主要硬件内容
STM32F103RBT6微控制器及其管脚图
按键
WK_UP为电路板的复位键连接PA0引脚 ,KEY0和KEY1分别接到芯片的PA13 、PA1屏上能实现的 画图板的基本功能功能:清屏、 画点、划线、显示数字、字符串 、图片、汉字等,具有触摸屏定 位的功能。发挥要求:选择彩色 显示屏,能选择画笔颜色,线条 粗细等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业课程设计(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)改变画刷属性默认值(黑色)默认值(黑色)选择填充改变画笔属性选择线色图1 程序流程图五、详细设计1)创建单文档 2) 编辑菜单 3)创建工具栏4)在相应消息函数处添加代码,实现其功能 5)选择要绘制的图形 6)改变线宽 7)改变线色 8)绘制图形 9)关键代码// GraphicView.cpp : implementation of the CGraphicView class //矩形鼠标左键按下 响应函数OnLButtonDown() opoint =point直线鼠标左键弹起响应函数OnLButtonUp()刷新,得到图形 鼠标移动 响应函数OnMouseMove()epoint=point响应OnPaint(),绘制图形 响应函数 OnEllipse() shape=3响应函数 OnRect() shape=2响应函数 OnLine() shape=1椭圆结束#include "stdafx.h"#include "Graphic.h"#include "GraphicDoc.h"#include "GraphicView.h"#include "SettingDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CGraphicViewIMPLEMENT_DYNCREATE(CGraphicView, CView)BEGIN_MESSAGE_MAP(CGraphicView, CView)//{{AFX_MSG_MAP(CGraphicView)ON_COMMAND(IDM_DOT, OnDot)ON_COMMAND(IDM_ELL, OnEll)ON_COMMAND(IDM_LINE, OnLine)ON_COMMAND(IDM_RECT, OnRect)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_COMMAND(IDM_SETTING, OnSetting)ON_COMMAND(IDM_COLOR, OnColor)ON_WM_MOUSEMOVE()//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CGraphicView construction/destructionCGraphicView::CGraphicView(){// TODO: add construction code herem_nDrawType=0;m_ptOrigin=0;m_nLineWidth=1;m_nLineStyle=0;m_clr=RGB(0,0,0);m_bDrawing=0;}CGraphicView::~CGraphicView(){}BOOL CGraphicView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cscs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,LoadCursor(NUL L,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),0);return CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CGraphicView drawingvoid CGraphicView::OnDraw(CDC* pDC){CGraphicDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here}/////////////////////////////////////////////////////////////////////////////// CGraphicView printingBOOL CGraphicView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CGraphicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add extra initialization before printing}void CGraphicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CGraphicView diagnostics#ifdef _DEBUGvoid CGraphicView::AssertValid() const{CView::AssertValid();}void CGraphicView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CGraphicDoc* CGraphicView::GetDocument() // non-debug version is inline {ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraphicDoc)));return (CGraphicDoc*)m_pDocument;}#endif //_DEBUG///////////////////////////////////////////////////////////////////////////// // CGraphicView message handlersvoid CGraphicView::OnDot(){// TODO: Add your command handler code herem_nDrawType=1;}void CGraphicView::OnEll(){// TODO: Add your command handler code herem_nDrawType=4;}void CGraphicView::OnLine(){// TODO: Add your command handler code herem_nDrawType=2;}void CGraphicView::OnRect(){// TODO: Add your command handler code herem_nDrawType=3;}void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default m_bDrawing=1;m_ptOrigin=point;m_ptTarget=point;CView::OnLButtonDown(nFlags, point);}void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default if(!m_bDrawing)return;m_bDrawing=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);switch(m_nDrawType){case 1:dc.SetPixel(point,m_clr);break;case 2:dc.MoveTo(m_ptOrigin);dc.LineTo(point);break;case 3:dc.Rectangle(CRect(m_ptOrigin,point));break;case 4:dc.Ellipse(CRect(m_ptOrigin,point));break;}CView::OnLButtonUp(nFlags, point);}void CGraphicView::OnSetting(){// TODO: Add your command handler code here CSettingDlg dlg;dlg.m_nLineWidth=m_nLineWidth;dlg.m_nLineStyle=m_nLineStyle;dlg.m_clr=m_clr;if(IDOK==dlg.DoModal())m_nLineWidth=dlg.m_nLineWidth;m_nLineStyle=dlg.m_nLineStyle;}void CGraphicView::OnColor(){// TODO: Add your command handler code here CColorDialog dlg;dlg.m_cc.Flags|=CC_RGBINIT;dlg.m_cc.rgbResult=m_clr;if(IDOK==dlg.DoModal())m_clr=dlg.m_cc.rgbResult;}void CGraphicView::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultif(!m_bDrawing)return;CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);dc.SelectObject(&pen);dc.SetROP2(R2_NOT);CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject(pBrush);switch(m_nDrawType){case 1:break;case 2:dc.MoveTo(m_ptOrigin);dc.LineTo(m_ptTarget);m_ptTarget = point;dc.MoveTo(m_ptOrigin);dc.LineTo(m_ptTarget);break;case 3:dc.Rectangle(CRect(m_ptOrigin,m_ptTarget)); m_ptTarget = point;dc.Rectangle(CRect(m_ptOrigin,m_ptTarget)); break;case 4:dc.Ellipse(CRect(m_ptOrigin,m_ptTarget));m_ptTarget = point;dc.Ellipse(CRect(m_ptOrigin,m_ptTarget)); break;}CView::OnMouseMove(nFlags, point);}六、测试数据及其结果分析七、调试过程中的问题在编程时遇到了图像在变换大小时,原来的图形会消失,后来通过老师的讲解,及查看相关资料,这里涉及的一个重绘问题。