简易画图板的设计与实现

合集下载

画板系统的设计与实现.

画板系统的设计与实现.

画板系统的设计与实现本工程以一个比较有趣的例子,来说明如何使用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 制作简单绘图板

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编程语言实现一个简易的画图板应用程序,让学生在学习的过程中掌握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程序设计——简易画图板

包头师范学院本科学年论文论文题目:基于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、能由鼠标控制绘制直线、矩形、椭圆,并能控制线条的颜色。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);}六、测试数据及其结果分析七、调试过程中的问题在编程时遇到了图像在变换大小时,原来的图形会消失,后来通过老师的讲解,及查看相关资料,这里涉及的一个重绘问题。

相关文档
最新文档