简易画图板设计报告分析
画板制作工作总结报告

一、前言随着我国文化产业的发展,画板作为一种重要的绘画工具,其市场需求日益增长。
在过去的一年里,我单位主要负责画板制作工作,现将一年来的工作情况进行总结。
二、工作回顾1. 画板制作工艺改进为了提高画板质量,降低成本,我们针对传统画板制作工艺进行了改进。
具体措施如下:(1)优化材料采购渠道,降低材料成本;(2)改进画板拼接技术,提高画板稳定性;(3)优化底漆、面漆工艺,提升画板表面质量。
2. 产品种类丰富根据市场需求,我们推出了多种类型的画板,包括木制画板、金属画板、塑料画板等。
在产品设计中,注重美观与实用性的结合,满足不同消费者的需求。
3. 提高生产效率通过优化生产流程,加强员工培训,提高生产设备利用率,我们成功提高了画板生产效率。
具体表现在:(1)缩短生产周期,确保产品及时交付;(2)提高产品质量,降低次品率;(3)降低生产成本,提高企业竞争力。
4. 市场拓展在市场拓展方面,我们积极与各大画廊、美术院校、绘画爱好者等建立合作关系,拓宽销售渠道。
同时,参加各类展会,提升品牌知名度。
三、存在问题1. 市场竞争加剧,部分产品利润空间缩小;2. 部分原材料价格波动较大,对生产成本造成一定影响;3. 员工技能水平参差不齐,需加强培训。
四、改进措施1. 深入研究市场需求,调整产品结构,提高产品附加值;2. 加强原材料供应商管理,降低采购成本;3. 提高员工技能水平,提升整体生产效率;4. 加强与上下游企业合作,实现产业链协同发展。
五、总结在过去的一年里,我单位在画板制作领域取得了显著成绩。
在新的一年里,我们将继续努力,不断提高产品质量和市场份额,为我国文化产业的发展贡献力量。
画板设计报告

青岛理工大学琴岛学院设计报告课题名称:画图板学院:青岛理工大学琴岛学院专业班级:计算机网络技术101班学号:20100312010学生:李经纬指导教师:张秀国青岛理工大学琴岛学院教务处2011年 12 月 30 日一、需求分析1.选题:程序的原型最先是老师在上课时演示的,老师指导我们做画图只能实现单一的画线功能,只可以画出直线或者图形,每次只能画出当前图形之前画出的图形不再显示,而且上课的时候只能实现几个颜色的画图,无法实现填充画图以及自由选择颜色。
经过查阅资料,手动添加了一些代码和函数实现了这些功能。
2.界面:(1)程序打开界面如下图1所示:图1 打开界面(2)程序打开界面如下图2所示:图2 设置界面3.功能划分:本画图板可以实现的功能主要有画点,画直线,画圆,画矩形,任意直线,设置直线颜色,设置填充颜色还有线条类型。
(1)画图菜单子菜单中可以选择画图形的方式,可以画出的图形有点、直线、矩形,椭圆、以及任意直线。
(2)选择画点功能可以在任意位置画出一个点,默认像素为1,颜色为黑色。
(3)选择画矩形可以画出一个由默认白色填充的矩形,关于填充色可以在颜色中进行选择自定义颜色。
(4)椭圆也可以实现和矩形相同的功能。
(5)可以选择画曲线。
(6)颜色菜单下可以选择图形颜色以及填充色。
(7)点击帮助可显示版本信息以及作者。
(8)设置菜单中有线段粗细和类型的选择及预览程序运行实现效果如下图3所示:图3.运行实现界面图4.版权信息4.用到的类表格、每个类中用到的函数及添加的命令响应表格、各资源对应的ID号表格:表1 用到的类表2 CMyDrawView类用到的函数及命令响应1.直线图元类的实现在头文件中添加如下代码,定义函数以及参数在CLine类下添加消息处理函数CShape(),添加代码:class CLine :public CShape{……CLine(COLORREF m_clrShape,CPoint m_ptOrigin,CPoint m_ptEnd,UINT m_nLineWidth,int m_nLineStyle);void Serialize(CArchive &archive);void Draw(CDC *pDC);public:COLORREF m_clrShape;CPoint m_ptOrigin,m_ptEnd;UINT m_nLineWidth;int m_nLineStyle;……};这样就实现了画直线的功能,其中CLine()表示绘制纯虚函数,参数为设备指针。
重点难点和错误分析 -项目五 简易画图板

团队讨论
组织团队成员讨论,分析 可能的原因,如算法优化 不足、硬件加速支持不够 等。
实验验证
通过实验验证,确定问题 根源在于绘图算法的性能 瓶颈。
成功解决问题的方法和策略
算法优化
针对绘图算法进行深入研究,采用更 高效的算法和数据结构,提高绘图精 度和速度。
硬件加速
利用硬件加速技术,如GPU加速,大 幅提升绘图性能。
避免或减少错误的方法建议
编码规范
遵循一定的编码规范,提高代码的可读性和可维护性。
充分测试
在开发过程中进行充分的测试,包括单元测试、集成测试 和用户验收测试等,确保软件质量。
深入了解用户需求
与用户保持密切沟通,充分理解用户需求,避免设计出不 符合用户期望的界面和功能。
提高技术水平
不断学习新技术和知识,提高自己的技术水平,减少在实 现功能时出现的技术难题。同时,积极寻求团队或社区的 帮助和支持,共同解决问题。
编码不规范
如变量命名不规范、代码注释不清晰等,导 致代码可读性差,易于出错。
对用户需求理解不足
没有充分理解用户需求,导致设计出的界面 和功能不符合用户期望。
缺乏测试
在开发过程中没有进行充分的测试,导致一 些潜在错误没有被及时发现和修复。
技术水平不足
由于缺乏相关技术经验或知识,导致在实现 某些功能时出现技术难题。
界面简洁易用
项目的界面设计简洁明了,用户可以轻松上手, 无需复杂的操作即可完成简单的绘图任务。
3
跨平台兼容性
项目在Windows、Mac和Linux等操作系统上均 可正常运行,具有良好的跨平台兼容性。
经验教训反思
需求分析不足
在项目初期,对用户需求的分析 不够充分,导致在开发过程中出 现了一些功能上的不足和缺陷。
简单画图程序课程设计报告分析

目录1 基本功能描述----------------------------------------------------------12 设计思路----------------------------------------------------------13 软件设计----------------------------------------------------------33.1 设计步骤----------------------------------------------------------33.2 界面设计----------------------------------------------------------73.3 关键功能实----------------------------------------------------------84. 附录----------------------------------------------------------94.1 调试报告----------------------------------------------------------94.2 测试结果----------------------------------------------------------104.3关键源代码---------------------------------------------------------105 结论与心得体会----------------------------------------------------------116. 参考文献----------------------------------------------------------117. 思考题----------------------------------------------------------11简单画图程序1 基本功能描述1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
大学课程设计报告绘图板系统设计-课程设计报告

2016-2017学年第一学期《Windows程序设计》课程设计报告题目:绘图板系统设计专业:班级:姓名:指导教师:成绩:二0一六年十一月十五日目录1设计目的 (3)2设计内容分析 (3)2.1绘图板简要介绍 (3)2.2功能的设计 (3)3主要模块 (4)3.1流程图 (4)3.2菜单栏 (4)3.3状态栏 (7)4详细设计界面 (8)5设计小结 (14)6参考文献 (15)1设计目的通过我们大一学期学习的《Windows程序设计教程》一书,掌握.net基本机构以及C#语言的基本知识,充分运用GDI+编程,完成简单绘制图形程序的这样的设计,以达到一个简单绘图板的系统设计。
这是一次难得的锻炼自己的机会,既是对以往知识的温习,也是对现学知识的灵活运用,也是为毕业设计做知识储备。
2设计内容分析2.1绘图板简要介绍这个绘图板系统设计,是基于Windows程序设计知识进行的,整个过程中,需要的是较好的知识储备以及对知识的灵活运用,加上良好的操作能力。
利用C#的编程思想以及组件的开发原理来完成系统的设计。
该设计系统是VS下Windows窗体设计工作项目文件,即一个简易的绘图工具,主要是设计了菜单栏、状态栏等一些简单的基本元素,能够实现简单的集合画图,在鼠标下控制顺利工作。
这次课程设计是利用C#的编程思想以及组件开发原理来完成系统的设计,突出C#语言与其它语言不同点(即体现C#的高级功能,如属性概念、接口、事件、委托等),体现可视化编程的基本目标,如系统带有菜单、状态栏以及一些常用的高级控件。
2.2功能的设计(1)能够由鼠标控制绘制直线、矩形和椭圆:当我们已经开始新建文件或者打开任意可操作文件过后,可以通过鼠标操作完成对直线、矩形以及椭圆形状的选择,从而实现简易绘图功能;本段详细阐述所选设计题目任务的具体内容及具体要求,分析设计软件的预期功能和涉及的C#知识点。
(2)简易绘图板这个小程序要求能完成简单的图形绘制,如直线、圆、矩形等;能实现基本的线型线宽的改变;能实现绘图界面的清空;能通过菜单栏实现文件的保存、打开以及在帮助菜单中找到使用说明和其它问题解决办法。
Java画图板课程设计报告

目录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.1.1 结构设计 (2)3.2软件功能模块及主要类设计 (2)3.2.1功能描述 (2)3.2.2总体结构图 (3)3.2.3主要类设计 (3)4 详细设计与实现 (5)4.1 主界面 (5)4.1.1主界面功能设计 (5)4.1.2主界面设计 (5)4.1.3主界面主要代码 (6)4.2 菜单栏 (6)4.2.1菜单栏功能设计 (6)4.2.2菜单栏界面设计 (7)4.2.3菜单栏主要代码 (10)4.3 工具栏 (11)4.3.1工具栏功能设计 (11)4.3.2工具栏界面设计 (11)4.3.3工具栏主要代码 (11)4.4 画图区 (12)4.4.1画图区功能设计 (12)4.4.2画图区界面设计 (13)4.4.3画图区主要代码 (13)4.5 状态栏 (13)4.5.1状态栏功能设计 (13)4.5.2状态栏设计 (13)4.5.3状态栏代码 (13)5 小结和展望 (14)参考文献 (16)附录 (16)使用说明书 (16)源程序清单 (17)1引言1.1课程设计选题《画图板软件开发和设计》1.2课程设计的目的巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。
1.3本选题的设计背景日常生活、学习中我们经常需要画图,简单的画图我们可以手工画图,但往往还是不能满足需求。
因此,借助计算机准确而快速的画图就十分有必要了。
好的画图工具能够很好的完成日常生活中的各种画图工作。
学习了Java语言后设计开发一个画图软件是对Java语言学习的巩固以及提高。
Java画图板程序设计分析报告

Java画图板程序设计报告————————————————————————————————作者:————————————————————————————————日期:西安科技大学Java语言课程设计报告题目:画图板应用程序开发班级:学号:姓名:2010年 12 月目录1 设计题目及具体要求 (3)2 总体设计 (6)3 详细设计与实现 (4)4 系统测试 (11)5 设计小结 (31)参考文献1、设计题目及具体要求1.1 题目需求1. 设计题目:小画图板的开发。
2. 重点分析本软件的重难点为主窗体的设计、菜单栏和工具栏的设计、事件响应的处理、画图的基本功能的实现。
3. 实现功能1.新建一个空白图形文件:用于绘制新的图形。
2.打开或保存一个图形文件,便于对图形文件的管理。
3.绘制一些基本的图形组件:直线,矩形,实心矩形,椭圆,实心椭圆,圆,实心圆,圆角矩形,实心圆角矩形等。
4.用鼠标在绘图板上单击拖动进行随笔花。
5.橡皮擦:可以将已绘制的图形擦掉。
6.添加文字:可以在绘图区域内添加文字。
7.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。
本程序中包括:宋体,隶书,华文彩云,仿宋-GB2312,华文行楷,Times New Roman,Serif,Monospaced,SonsSerif,Garamond。
当然,在下面的程序分析中可以看到,由于设置了字体选择数组,使得可以随意添加系统支持的任何字体。
大大方便和简化了程序设计。
8.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体,斜体,用同时选中两者,只选择其中一种或两者都不选中3种选择方式。
9.设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩,生动活泼。
10. 设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不同的。
当作用于绘制图形组建时,它的作用是改变画笔绘制线条的粗细;当作用于文字时,它的作用是改变文字的大小。
JAVA画图板程序实验报告(附完整代码)分析

画板程序一、软件系统分析和设计方案1、功能需求分析设计类似于Windows画板的程序,程序可以通过功能菜单(或工具条)进行功能选择操作,在画板中可以用鼠标操作绘制不同颜色的点,直线,多边形和椭圆,可以保存和打开自定义的图形文件。
2、结构设计过程经过对需求的分析,我们设计的画图板界面主要包括菜单栏、工具栏、画板三个部分。
菜单栏包含文件、编辑、帮助等常见功能菜单,实现打开保存文件等功能;工具栏主要包括画笔、矩形、椭圆、直线、刷子、橡皮、文字、颜色等工具,可完成一些基本操作;画板能够编辑处理图片及文字。
而代码实现上采用面向对象的思想,将上述组件封装与一个画板类中布局并实现功能;通过一个窗框类实现画板对象;最后在主类中建立窗框对象。
思路如下图:二、软件实现和代码编写具体代码及详细注释如下:import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import javax.swing.*;import javax.swing.UIManager.*;import java.io.*;import java.util.Vector;//主类建立窗框public class DrawPad {public static void main(String[] args) {try {// 优化UI效果for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) {UIManager.setLookAndFeel(info.getClassName());break;}}} catch (Exception e) {System.out.println(e);}new DrawFrame();}}// 添加窗口和画板组件class DrawFrame extends JFrame {public DrawFrame() {DrawPanel panel = new DrawPanel();add(panel);setTitle("简单JAVA画板");setBounds(100, 100, 800, 600);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}// 定义绘画点的基本属性class position implements Serializable {int x;int y;int type;String s;Color color;}// 定义画板组件class DrawPanel extends JPanel implements ActionListener, MouseListener, MouseMotionListener {JMenuBar mb;// 菜单栏JMenu menu1, menu2, menu3;JMenuItem i1, i2, i3, i4;JPanel jp1; // 工具栏public JButton anj0, anj1, anj2, anj3, anj4, anj5, anj6, anj7, anj8, anj9,anj10;JLabel l1, lcolor;Vector<position> thedraw = new Vector<position>(); // 保存画图轨迹的数组int style = 0; // 保存画图类型,默认为画笔int x1 = 0;// 保存点的坐标int x2 = 0;int y1 = 0;int y2 = 0;String input = "";// 默认输入文字内容Color linecolor = Color.BLACK; // 默认线的颜色public DrawPanel() {setBackground(Color.WHITE);setLayout(new BorderLayout());setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));// 上部菜单栏mb = new JMenuBar();mb.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));add(mb, BorderLayout.NORTH);// 加入菜单栏的组件menu1 = new JMenu(" 文件");menu2 = new JMenu(" 编辑");menu3 = new JMenu(" 帮助");i1 = new JMenuItem("打开", new ImageIcon("img/open.png"));i2 = new JMenuItem("保存", new ImageIcon("img/save.png"));i3 = new JMenuItem("清空", new ImageIcon("img/clear.png"));i4 = new JMenuItem("关于简单JAVA画板", new ImageIcon( "img/about.png"));menu1.add(i1);menu1.addSeparator();menu1.add(i2);menu2.add(i3);menu3.add(i4);mb.add(menu1);mb.add(menu2);mb.add(menu3);add(mb, BorderLayout.NORTH);// 侧边工具栏jp1 = new JPanel();jp1.setBackground(Color.LIGHT_GRAY);jp1.setLayout(new BoxLayout(jp1, BoxLayout.Y_AXIS));jp1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));add(jp1, BorderLayout.WEST);// 加入工具栏的组件anj0 = new JButton("画笔", new ImageIcon("img/pen.png"));anj1 = new JButton("刷子", new ImageIcon("img/brush.png"));anj2 = new JButton("橡皮", new ImageIcon("img/erease.png"));anj3 = new JButton("文字", new ImageIcon("img/word.png"));anj4 = new JButton("直线", new ImageIcon("img/sline.png"));anj5 = new JButton("矩形", new ImageIcon("img/rec.png"));anj6 = new JButton("圆矩", new ImageIcon("img/frec.png"));anj7 = new JButton("椭圆", new ImageIcon("img/eli.png"));anj10 = new JButton("");lcolor = new JLabel("■");// 会变色的方块l1 = new JLabel(" 颜色");anj10.add(lcolor);anj10.add(l1);jp1.add(anj0);jp1.add(anj1);jp1.add(anj2);jp1.add(anj3);jp1.add(anj4);jp1.add(anj5);jp1.add(anj6);jp1.add(anj7);jp1.add(anj10);// 事件处理i1.addActionListener(this);i2.addActionListener(this);i3.addActionListener(this);i4.addActionListener(this);anj0.addActionListener(this);anj1.addActionListener(this);anj2.addActionListener(this);anj3.addActionListener(this);anj4.addActionListener(this);anj5.addActionListener(this);anj6.addActionListener(this);anj7.addActionListener(this);anj10.addActionListener(this);addMouseListener(this);addMouseMotionListener(this);}// 记录鼠标选择的功能public void actionPerformed(ActionEvent e) {if (e.getSource() == anj0)style = 0;else if (e.getSource() == anj1)style = 1;else if (e.getSource() == anj2)style = 2;else if (e.getSource() == anj3) {style = 3;input = JOptionPane.showInputDialog("输入文字后在画板上点击放置");} else if (e.getSource() == anj4)style = 4;else if (e.getSource() == anj5)style = 5;else if (e.getSource() == anj6)style = 6;else if (e.getSource() == anj7)style = 7;else if (e.getSource() == anj10) {linecolor = JColorChooser.showDialog(null, "请选择颜色", Color.BLACK);lcolor.setForeground(linecolor);} else if (e.getActionCommand().equals("关于简单JAVA画板")) {JOptionPane.showMessageDialog(null,"这是一个简单的JAVA画板。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计报告: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点、直线、矩形、椭圆的绘制(周峰谢程焜)对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。
当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。
为视类CGraphicView分别捕获鼠标左键按下和弹起这两个消息。
另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicView再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0。
在鼠标按下消息响应函数中,保存该点,代码如下:void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultm_ptOrigin=point; //保存鼠标按下得到点,也是绘制一个点CView::OnLButtonDown(nFlags, point);}在鼠标左键弹起消息响应函数中实现绘图,代码如下:void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default //创建并获得设备描述CClientDC dc(this);switch (m_nDrawType){case 1:dc.SetPixel(point,RGB(255,0,0)); /*绘制点*/break;case 2: /*绘制直线*/dc.MoveTo(m_ptOrigin);/*调用MoveTo函数移动到原点*/dc.LineTo(point);/*调用LineTo函数绘制到终点。
*/break;case 3: /*绘制矩形*/dc.Rectangle(CRect(m_ptOrigin,point));break;case 4: /*绘制椭圆*/dc.Ellipse(CRect(m_ptOrigin,point));break;CView::OnLButtonUp(nFlags, point);}在上述程序中,设置一个点,用到的函数是SetPixel,这也是CDC类的一个成员方法,该函数的生命形式如下:COLORREF SetPixel (POINT point,COLORREF crColor);该函数是在指定的点设置一个像素。
其中第一个参数(point)是指定的点,第二个参数(crColor)是指定的颜色。
在程序中设定的颜色在系统颜色表中可能不存在,但系统会选择一种和这个颜色最接近的颜色。
RGB是一个宏,它有三个参数,分别代表红、绿、蓝三种颜色的值。
这三个参数BYTE类型,取值范围为0~255。
RGB(0,0,0)是黑色,RGB(255,255,255)是白色,将这三个分量设置成为0~255之间的任意值,从而得到各种不同的颜色。
这里的RGB(255,0,0)是红色。
绘制直线时,首先调用MoveTo函数移动到原点,然后调用LineTo函数绘制到终点。
绘制矩形时使用Rectangle函数,该函数声明形式为:BOOL Rectangle (LPCRECT lpRect);该函数有一个指向Crect对象的参数,后者可以利用两个点来构造。
需要注意的是该函数需要的是指向Crect对象的指针,而上述代码中传递的却是Crect对象,但运行编译时也能成功通过,运行时也不会报错,这是为什么呢?我们知道C系列的语言都是强类型语言,如果类型不匹配的话,需要进行强制类型转换。
但这里为什么没有进行这样的强制类型转换程序也可以通过呢?实际上,Crect类提供了这样一个成员函数:重载LPCRECT操作符,其作用是将Crect转换为LPCRECT类型。
因此,当在程序中给Rectangle函数的参数赋值时,如果它发现该参数是一个Crect对象,它就会隐式地调用LPCRECT操作符,将Crect类型的对象转换为LPRECT 类型。
因此,在给函数传递参数时,如果我们看到的传递的数值类型和所需要的类型不匹配,但编译和运行都正确的情况时,就要想想这其中的缘由了。
当然,有的情况下可能是这些类型之间本来就可以互相转换,例如short类型和int类型。
但是参数是对象类的话,就要考虑了,它选择的对象的构造方法进行的隐式转换,还是有其他重载的操作符。
当用户选择椭圆菜单项时,调用Ellipes函数绘制一个椭圆。
3.2连续线和扇形的绘制(周峰谢程焜)Windows系统为我们提供了一个画图程序,在该程序中,利用画笔可以绘制连续的线条,下面我们设计绘制连续线和扇形。
为了绘制连续的线条,首先要得到线条的起点,这在前面已经实现。
然后需要捕获鼠标移动过程中的每一个点,这可以通过捕获鼠标移动消息(WM_MOUSEMOVE)来实现。
在此消息响应函数中,在依次捕获的各个点之间绘制一条条非常短的线段,从而就可以绘制出一条连续的线条。
遵照这一思路,我们开始增加程序的功能。
首先为视类增加鼠标移动消息(WM_MOUSEMOVE)的响应函数(OnMouseMove)。
这样,只要鼠标在应用程序窗口中移动时都会进入到这个消息响应函数中。
但这并不是我们所期望的,我们希望在鼠标左键按下后开始绘图。
因此,我们需要有一个变量来表示鼠标左键是否按下这一状态,然后在鼠标移动消息响应函数中对这一变量进行判断。
当此变量为真,即鼠标左键已经按下去,我们开始绘图。
于是,为视类添加一个BOOL型的私有变量m_bDraw,当鼠标左键按下去时,此变量为真;当鼠标左键弹起时,此变量为假,这时,我们就不再绘制线条了。
该变量在视类头文件中的定义代码如下:Private:BOOL m_bDraw;接下来在视类的构造函数中,将此变量初始化为FALSE。
m_bdraw=FALSE;当鼠标左键按下去时,在视类的OnLButtonDown函数中将此变量初始化为TRUE。
m_bdraw=TRUE;当鼠标左键弹起时,在视类的OnLButton函数中将此变量初始化为假。
m_bdraw=FALSE;然后在OnMouseMove函数中首先对m_bdraw变量进行判断,如果其值为真,说明鼠标左键已经按下去了,这时就可开始进行画线操作。
还有一点需要注意,因为每绘制一条线段后,下次应该从这条线段的终点开始继续绘制。
因此,绘制完当前线段后,应该修改线段的起点,将当前线段的终点作为下一条线段的起点,程序代码如下:void CGraphicView::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default{//创建并获得设备描述CClientDC dc(this);//创建宽度为1的实线红色画笔CPen pen (PS_SOLID, 1, RGB(255,0,0));//把创建的画笔选入设备描述CPen *pOldpen=dc.SelectObject(&pen);if(m_bDraw==true){dc.MoveTo(m_ptOrigin);dc.LineTo(point);//修改线段的起点m_ptOrigin=point;}//恢复设备描述dc.SelectObject(pOldpen);CView::OnMouseMove(nFlags, point);}如果在上面绘制连续线条的程序中,保持每段小直线的起点不变,即以鼠标左键按下时的起点为起点不变,分别绘制到鼠标移动点的直线,这时就会出现扇形的效果。