《重点难点和错误分析 ——项目五 简易画图板.ppt》由会员分享,可在线阅读,更多相关《重点难点和错误分析 ——项目五 简易画图板.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、重点难点和错误分析 项目五 简易画图板主 讲:浙江广播电视大学 郑 炜一、保存图片文件及打开一、保存图片文件及打开将图形保存到文件的语句:将图形保存到文件的语句:SavePicture语法格式:语法格式:SavePicturepicture,stringexpressionPicture:产生图形文件的产生图形文件的PictureBox控件或控件或Image控件的图片内容控件的图片内容Stringexpression:欲保存的图形文件名欲保存的图形文件名一、保存图片文件及打开一、保存图片文件及打开例子:例子:PrivateSubsave_Click()dlgFile.Filter=BMPILE
2、S(*.BMP)|*.BMP|_JPGFILES(*.JPG)|*.JPGdlgFile.ShowSaveFn=dlgFile.FileNameIfFnThenSavePicturepicPaintzone.Image,FnEndIfEndSub一、保存图片文件及打开一、保存图片文件及打开打开已存在的图形文件,在图形控件内显打开已存在的图形文件,在图形控件内显示图形内容。示图形内容。格式:格式:图片框控件名图片框控件名.Picture=LoadPicture(filename)当当filename为一个文件的路径文件名时,图片框为一个文件的路径文件名时,图片框控件加载了一个图形文件。控件加载了
3、一个图形文件。当当filename为空时,清空(删除)图片框内的图形为空时,清空(删除)图片框内的图形内容。内容。一、保存图片文件及打开一、保存图片文件及打开将图形按一定比例绘制在图片框控件内将图形按一定比例绘制在图片框控件内格式:格式:图片框控件名图片框控件名.PaintPicturepicture,x,y,width,heightPicture:要绘制到要绘制到object 上的图形源上的图形源x,y:均为单精度值,指定在均为单精度值,指定在object上绘制上绘制picture的目的目标坐标标坐标width,height:单精度值,指示单精度值,指示picture的目标宽度的目标宽度和高
4、和高度度一、保存图片文件及打开一、保存图片文件及打开例子:例子:dlgFile.Filter=BMPFILES(*.BMP)|*.BMP|JPGFILES(*.JPG)dlgFile.ShowOpenIfdlgFile.FileNameThenpicPaintzone.Picture=LoadPicture(dlgFile.FileName)Fn=dlgFile.FileNamepicPaintzone.PaintPicturepicPaintzone.Picture,0,0,_picPaintzone.ScaleWidth,picPaintzone.ScaleHeightEndIfpicPa
5、intzone是是“绘绘图区图区”,图片框控件,图片框控件二、绘图方法二、绘图方法在应用程序中加进适当的图形和动画常常可以增加程在应用程序中加进适当的图形和动画常常可以增加程序的魅力,使其多姿多彩。利用序的魅力,使其多姿多彩。利用VB提供的绘图方法可以很提供的绘图方法可以很容易地完成各种图形编程工作,容易地完成各种图形编程工作,VisualBasic的绘图方法如的绘图方法如下:下:Print显示字符串显示字符串Line画直线和方框画直线和方框Circle画圆或椭圆画圆或椭圆Point取得点的颜色值取得点的颜色值Pset设置点的颜色值设置点的颜色值1、Line方法方法在对象上画直线或矩形在对象上
6、画直线或矩形语法格式:语法格式:object.LineStep(x1,y1)Step(x2,y2),color,BFObject:所绘直线的控件对象,例如所绘直线的控件对象,例如Form、PictureBox等等(x1,y1):所画线段的起点坐标所画线段的起点坐标(x2,y2):所画线段的终点坐标所画线段的终点坐标Color:可选的颜色参数可选的颜色参数BF:B参数可选参数,利用对角坐标画出矩形;如果使用了参数可选参数,利用对角坐标画出矩形;如果使用了B参数,则参数,则F参数规定矩形以矩形边框的颜色填充。参数规定矩形以矩形边框的颜色填充。例例利用利用Line方法绘制直线或矩形方法绘制直线或矩形
7、运用运用Line方法绘制窗体坐标系方法绘制窗体坐标系PrivateSubForm_Click()ClsForm1.Scale(-110,110)-(110,-110)定义坐标系定义坐标系Line(-105,0)-(105,0)画画X轴轴Line(0,105)-(0,-105)画画Y轴轴EndSub例例利用利用Line方法绘制直线或矩形方法绘制直线或矩形运用运用Line方法在窗体坐标系内绘制矩形方法在窗体坐标系内绘制矩形PrivateSubForm_Click()ClsForm1.Scale(-110,110)-(110,-110)定义坐标系定义坐标系Line(-105,0)-(105,0)画画
8、X轴轴Line(0,105)-(0,-105)画画Y轴轴Line(-40,40)-(40,-40),B画矩形画矩形Line(-70,40)-(-50,-40),vbRed,BF画实心矩形画实心矩形EndSub2、Circle方法方法Circle方法用来绘制圆、椭圆、圆弧等图形方法用来绘制圆、椭圆、圆弧等图形语法格式语法格式对象名对象名.CircleStep(x,y),Radius,Color,Start,End,Aspet对象名对象名:要绘制图形的容器对象名称,如窗体、:要绘制图形的容器对象名称,如窗体、图片框等,缺省时为当前窗体。图片框等,缺省时为当前窗体。(x,y):圆、椭圆、弧或扇形的圆
9、心坐标。圆、椭圆、弧或扇形的圆心坐标。Radius:圆、椭圆、弧或扇形的半径,若为椭圆,圆、椭圆、弧或扇形的半径,若为椭圆,则为最长轴的尺寸。则为最长轴的尺寸。2、Circle方法方法Circle方法用来绘制圆、椭圆、圆弧等图形方法用来绘制圆、椭圆、圆弧等图形语法格式语法格式对象名对象名.CircleStep(x,y),Radius,Color,Start,End,AspetStart:可选型,指定弧的起点位置。取值范围从可选型,指定弧的起点位置。取值范围从-2到到2,缺省值是,缺省值是0。若为负数,则在画弧的同时还要画出到。若为负数,则在画弧的同时还要画出到弧的起点的连线。弧的起点的连线。E
10、nd:可选项,指定弧的终点位置。取值范围从可选项,指定弧的终点位置。取值范围从-2到到2,缺省值是,缺省值是2。若为负数,则在画弧的同时还要画出。若为负数,则在画弧的同时还要画出圆心到弧的终点的连线。弧的画法是从起点逆时针画到终圆心到弧的终点的连线。弧的画法是从起点逆时针画到终点。点。2、Circle方法方法语法格式语法格式对象名对象名.CircleStep(x,y),Radius,Color,Start,End,AspetAspet:可选项,圆的纵轴和横轴的尺寸比。缺省可选项,圆的纵轴和横轴的尺寸比。缺省值为值为1,表示画一个标准圆。当纵横比大于,表示画一个标准圆。当纵横比大于1时,椭时,椭
11、圆的纵轴比横轴长;反之,则比横轴短。圆的纵轴比横轴长;反之,则比横轴短。例例在窗体上绘制圆、圆弧等在窗体上绘制圆、圆弧等绘制圆绘制圆PrivateSubForm_Click()Cls清屏清屏Constpi=3.1415926ScaleWidth=100ScaleHeight=100Circle(30,30),10画标准圆画标准圆EndSub例例在窗体上绘制圆、圆弧等在窗体上绘制圆、圆弧等绘制椭圆绘制椭圆PrivateSubForm_Click()Cls清屏清屏Constpi=3.1415926ScaleWidth=100ScaleHeight=100Circle(70,30),10,vbGre
12、en,0.5画绿色椭圆画绿色椭圆Circle(70,30),10,vbRed,2画红色椭圆画红色椭圆EndSub例例在窗体上绘制圆、圆弧等在窗体上绘制圆、圆弧等绘制圆弧和扇形绘制圆弧和扇形PrivateSubForm_Click()Cls清屏清屏Constpi=3.1415926ScaleWidth=100ScaleHeight=100Circle(30,75),10,-0.75*pi,-0.25*pi画扇区画扇区Circle(75,75),10,-0.25*pi,-0.75*pi画扇区画扇区Circle(75,75),10,1.25*pi,1.75*pi画弧画弧EndSub三、鼠标事件三、鼠
13、标事件MouseDown和和MouseUp事件事件语法格式:语法格式:PrivateSub控件对象名控件对象名_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,YAsSingle)PrivateSub控件对象名控件对象名_MouseUp(ButtonAsInteger,ShiftAsInteger,xAsSingle,YAsSingle)MouseDown和和MouseUp事件事件语法格式:语法格式:PrivateSub控件对象名控件对象名_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle
14、,YAsSingle)Button参数:参数:可以用来区分当前鼠标的左、中、右按可以用来区分当前鼠标的左、中、右按键,键,1表示用户按下了鼠标左按键,表示用户按下了鼠标左按键,2表示右按键,表示右按键,4表示中间键。表示中间键。Shift参数:参数:可以用来区别鼠标与键盘的组合,它的值可以用来区别鼠标与键盘的组合,它的值等于等于1,表示,表示Shift键被按下,键被按下,2表示表示Ctrl键,键,4表示表示Alt键。键。X,Y参数:参数:返回鼠标指针当前的位置,它们的计算返回鼠标指针当前的位置,它们的计算单位由窗体的单位由窗体的ScaleMode决定,由自定义坐标系统决决定,由自定义坐标系统决
15、定,如果没有自定义坐标系统,则按照默认坐标系。定,如果没有自定义坐标系统,则按照默认坐标系。示例示例1当鼠标左键单击窗体时,按钮跟随鼠标位当鼠标左键单击窗体时,按钮跟随鼠标位置移动;当鼠标右键单击窗体时,窗体内置移动;当鼠标右键单击窗体时,窗体内出现弹出菜单。出现弹出菜单。示例示例1PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1Then单击鼠标左键时单击鼠标左键时Command1.MoveX,YElseIfButton=2Then单击鼠标右键时单击鼠标右键时PopupM
16、enuedit,X,YEndIfEndSubMouseMove事件事件语法格式:语法格式:PrivateSub控件对象名控件对象名_MouseMove(ButtonAsInteger,ShiftAsInteger,xAsSingle,YAsSingle)参数与参数与MouseDown、MouseUp一致一致示例示例设计程序,当鼠标在窗体内移动时,在鼠设计程序,当鼠标在窗体内移动时,在鼠标指针当前位置画一个直径为标指针当前位置画一个直径为100的圆,的圆,如图所示。如图所示。PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSi
17、ngle,YAsSingle)Circle(X,Y),100EndSub在项目中巧妙运用鼠标事件在项目中巧妙运用鼠标事件运用运用MouseDown事件启动绘图,并绘制起事件启动绘图,并绘制起点位置的图形,当鼠标按下后,将绘图区点位置的图形,当鼠标按下后,将绘图区的绘图笔类型设置为异或笔(的绘图笔类型设置为异或笔(DrawMode=7)运用运用MouseMove事件处理连续滑动鼠标绘事件处理连续滑动鼠标绘制图形,当鼠标移动到新的位置,则先擦制图形,当鼠标移动到新的位置,则先擦除在这一位置之前的坐标位置所成形的图除在这一位置之前的坐标位置所成形的图形,然后再绘制新图形。形,然后再绘制新图形。四、常
18、见错误分析四、常见错误分析Form_Load事件内怎么无法绘制图形?事件内怎么无法绘制图形?如何清除已绘制的图形,例如线条?如何清除已绘制的图形,例如线条?如何判定对象是否越出窗体的边界?如何判定对象是否越出窗体的边界?1、Form_Load事件内怎么无法绘制图形?事件内怎么无法绘制图形?解决方法:解决方法:用绘图方法在窗体上绘制图形时,如果将绘制过程放在用绘图方法在窗体上绘制图形时,如果将绘制过程放在Form_Load事件内,由于窗体装入内存有一个时间过程,事件内,由于窗体装入内存有一个时间过程,在该时间段内同步地执行了绘图命令,所绘制的图形无在该时间段内同步地执行了绘图命令,所绘制的图形无
19、法在窗体上显示。法在窗体上显示。有两种方法可解决此问题:有两种方法可解决此问题:方法一:方法一:将绘图程序代码放在其他事件内。例如将绘图程序代码放在其他事件内。例如Paint等等事件。事件。方法二:方法二:将窗体的将窗体的AutoRedraw属性设置为属性设置为True。2、如何清除已绘制的图形,例如线条?、如何清除已绘制的图形,例如线条?解决方法:解决方法:Line控件在窗体上移动时,原位置上不会留下图形痕迹。控件在窗体上移动时,原位置上不会留下图形痕迹。如果用如果用Line方法来代替方法来代替Line控件,则每次在新位置上画控件,则每次在新位置上画直线前,需要清除原来位置上的线条。清除原来
20、位置上直线前,需要清除原来位置上的线条。清除原来位置上的线条,可将的线条,可将DrawMode属性属性设置为设置为异或(异或(Xor)模式)模式,在原位置上重画一次直线,即可清除原来的线条。在原位置上重画一次直线,即可清除原来的线条。3、如何判定对象是否越出窗体的边界?、如何判定对象是否越出窗体的边界?解决方法:解决方法:当对象在窗体上移动时,对象是否越出窗体的上边界或当对象在窗体上移动时,对象是否越出窗体的上边界或左边界,不能用对象的左边界,不能用对象的Top0或对象的或对象的Left0来判断,来判断,对象的对象的Top0(Left0)仅表示该控件对象的上边界越出仅表示该控件对象的上边界越出窗体的上(左)边界,而要使整个控件越出窗体的上窗体的上(左)边界,而要使整个控件越出窗体的上(左)边界,还需要(左)边界,还需要加上控件的高度(宽度)加上控件的高度(宽度)。谢谢!