版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11.6.2编写一个仿Windows画图程序(1)本例将实现11.1节中的一个仿Windows的简单的画图软件的任务。.新建项目创建一个项目类型为VisualBasic,模板为Windows应用程序的项目,命名为Ch11_5。.界面设计在窗体上添加:一个MenuStrip菜单控件、一个ToolStrip工具栏控件,一个用作绘图板的PictureBox图片框控件、两个让用户选择颜色和线条宽标志的Lable控件、5个让用户选择线条宽度的button控件,一个Panel控件上、一个ImageList控件和一个作为状态信息栏的StatusStripr。调整窗体上各控件的大小及位置,如图11-18所示。.设置各控件的相关属性设置各控件的相关属性,如表11—9所示。表11-9画图程序各控件属性设置
控件类另“屉性名F届性值户Fcirm。TextJ国图软件卡Nam&pFrmPaint<pMeawPmsPaiiit^tsd一文件(&F)续表4控性类别口属性名甲B性值"MetiuStrip^Name。msPaint^1oolStripMmu4tem+JNam却Test。. 文件(即上ToolStripMenu.ltem^Name-::miNew。t雷好1新建(&N>中ToolStripMenu.ltemvNam"miEnit甲ted「退出C&X)T:7oolStripMenuJtemFNam"irdOpsratorP;Testi操作侬”冲TocilStri产NamMtsPaiiit^p.工具降It-ems^p*X|ml.ibfnKi1国儿.出5回«.ib£LKi国uHiir固U皿S|S]凡dH.e回■.itKidT画11口同囤IM.*1CT0,CO*■Itna^eList^Nam占;
.代码设计(1)引入命名空间:ImportsSystem.Drawing.Drawing2D(2)在FrmPaint类里定义全局变量和mSelect枚举结构:PrivategAsGraphicsPrivatePrivategAsGraphicsPrivatepstartAsPoint,pendAsPointPrivate mChoiceAsIntegerPrivate mWidthAsIntegerPrivate mIconAsIconPrivateEnummSelect别枚举Pencil‘铅笔'绘图句柄'定义画图的起始点,终点'选择图形枚举'画笔宽度'用户选择图'选择图形类'直线Ellipse椭圆FillEllipse '填充椭圆StyleEllipse '风格椭圆Rec'矩形FillRec填充矩形StyleRec风格矩形Icon'图标Eraser‘橡皮EndEnum(3)在FrmPaint的Load事件中初始化全局变量和Graphics对象:PrivateSubFrmPaint_Load(ByValsenderAsSystem.Object,_ByValeAsSystem.EventArgs)HandlesMyBase.Loadg=Me.picPaint.CreateGraphics'获取PictureBox的绘图句柄mChoice=mSelect.Pencil '默认选择选铅笔作为绘图工具mWidth=1初始化画笔宽度EndSub(4)定义转换坐标起点和终点的过程Convert_Point()。转换坐标起始点和终点,确保起始点始终在终点的左上方,代码如下:.'确保起始点坐标位于左上角3.PrivateSub)Convert_Point()3.PrivateSub)Convert_Point()4.DimptempAsPoint5.Ifpstart.X<pend.XThen6.Ifpstart.Y>pend.YThen7.ptemp.Y=pstart.Y8.pstart.Y=pend.Y9.pend.Y=ptemp.Y10.EndIf11.EndIf12.Ifpstart.X>pend.XThen13.Ifpstart.Y<pend.YThen14.ptemp.X=pstart.X2. '结束点坐标位于右下角'用于交换的临时点pend.X=ptemp.XEndIfIfpstart.Y>pend.YThenptemp=pstartpstart=pendpend=ptemp1.2.3.‘打开"颜色”对话框4.DimdlgColorAsNewColorDialog1.2.3.‘打开"颜色”对话框4.DimdlgColorAsNewColorDialog5.IfdlgColor.ShowDialog=Windows.Forms.DialogResult.OKThenEndIfEndIfEndSub(5)为工具栏ItemClick事件编写代码:PrivateSubtsPaint_ItemClicked(ByValsenderAsSystem.Object,_ByValeAsSystem.Windows.Forms.ToolStripItemClickedEventArgs)HandlestsPaint.ItemClicked'获取发生事件的索引号Me.mChoice=Me.tsPaint.Items.IndexOf(e.ClickedItem)IfmChoice=mSelect.IconThen'如果选择的是图标,则打开OpenFileDialog选取图标DimdlgOpenAs New OpenFileDialogdlgOpen.Filter="图标文件|*.ico”If dlgOpen.ShowDialog =Windows.Forms.DialogResult.OKThenmIcon=NewIcon(dlgOpen.FileName)EndIfEndIf(6)为btnSetC010r控件的Click事件,编写代码,选择画笔颜色,代码如下:PrivateSubbtnSetColor_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnSetColor.Click6.6.Me.btnSetColor.BackC010r=dlgColor.Color7.EndIf8.EndSub(7)编写选择线条宽度的共享事件过程btnLines_Click()代码:PrivateSubbtnLine_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesbtnLine1.Click,btnLine2.Click,btnLine3.Click,btnLine4.Click,btnLine5.Click'把所有按钮的背景色都设为BlackMe.btnLine1.BackC010r = Color.WhiteMe.btnLine2.BackC010r = Color.WhiteMe.btnLine4.BackColor=Color.WhiteMe.btnLine5.BackColor=Color.White'用户选中的按钮背景色为BlueCType(sender,Button).BackColor=Color.Black'把画笔宽度设为用户选择按钮的Tag值mWidth=CType(sender,Button).TagEndSub(8)为PictrueBox的MouseDown(鼠标按下)事件编写代码。在FrmPaint的代码窗口顶部的"对象"下拉列表框中选择picPaint,然后在右侧的"事件"下拉列表框中选择MouseDown,此时代码编辑器中已经自动生成YpicPaint_MouseUp的事件代码,并把鼠标定位于事件过程内部的第一行,在该过程中编写如下代码:PrivateSubpicPaint_MouseDown(ByValsenderAsSystem.Object,_ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlespicPaint.MouseDownIfe.Button=Windows.Forms.MouseButtons.LeftThen'如果用户按下的是鼠标左键,则将当前点坐标赋给起始点pstart.X=e.Xpstart.Y=e.YEndIfEndSub11.6.2编写一个仿Windows画图程序(3)(9)为PictrueBox的MouseUp(鼠标释放)事件编写代码:PrivateSubpicPaint_MouseUp(ByValsenderAsSystem.Object,_ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlespicPaint.MouseUpIfe.Button=Windows.Forms.MouseButtons.LeftThen'如果用户按下的是鼠标左键,记录终点坐标pend.X =e.Xpend.Y =e.Y'根据保存的mChoice绘制图形Select CasemChoiceCasemSelect.Line'用户在工具栏中选择的是铅笔mWidth)12.g.DrawLine(myPen,pstart,pend)'根据起点和终点13.14.15.绘制直线CasemSelect.RecConvert_Point()'用户在工具栏中选择的是空心矩'转换矩形的起点为其左上16.DimmyPenAsNewPen(Me.btnSetColor.BackColor,mWidth)17.g.DrawRectangle(myPen,pstart.X,pstart.Y,18.pend.X-pstart.X,pend.Y-pstart.Y)根据起点和终点绘制空心矩形19.20.CasemSelect.FillRec'用户在工具栏中选择的是填充矩21.Convert_Point()'转换矩形的起点为其左上22.DimrecAsNewRectangle(pstart.X,pstart.Y,23.pend.X-pstart.X,pend.Y-pstart.Y)'根据起点和终点定义矩形24.DimsbrAsNewSolidBrush(btnSetColor.BackColor)mWidth)12.g.DrawLine(myPen,pstart,pend)'根据起点和终点13.14.15.绘制直线CasemSelect.RecConvert_Point()'用户在工具栏中选择的是空心矩'转换矩形的起点为其左上16.DimmyPenAsNewPen(Me.btnSetColor.BackColor,mWidth)17.g.DrawRectangle(myPen,pstart.X,pstart.Y,18.pend.X-pstart.X,pend.Y-pstart.Y)根据起点和终点绘制空心矩形19.20.CasemSelect.FillRec'用户在工具栏中选择的是填充矩21.Convert_Point()'转换矩形的起点为其左上22.DimrecAsNewRectangle(pstart.X,pstart.Y,23.pend.X-pstart.X,pend.Y-pstart.Y)'根据起点和终点定义矩形24.DimsbrAsNewSolidBrush(btnSetColor.BackColor)'定义画刷颜色为用户选择的颜色25.g.FillRectangle(sbr,rec)'绘制填充矩形26.27.CasemSelect.StyleRec'用户在工具栏中选择的是风格矩28.Convert_Point()'转换矩形的起点为其左上29.DimrecAsNewRectangle(pstart.X,pstart.Y,30.pend.X-pstart.X,pend.Y-pstart.Y)'根据起点和终点定义矩形31.定义画刷风格为Cross型,前景色为白色,背景色为用户选择11.DimmyPenAsNewPen(Me.btnSetColor.BackColor,11.DimhbrAsNewHatchBrush(HatchStyle.Cross,Color.White,btnSetColor.BackColor)g.FillRectangle(hbr,rec)'用画刷填充矩形CasemSelect.Ellipse'用户在工具栏中选择的是空心椭圆Convert_Point()'转换椭圆外接矩形的起点为其左上点Dimpen1AsNewPen(btnSetColor.BackColor,mWidth)g.DrawEllipse(pen1,pstart.X,pstart.Y,_pend.X-pstart.X,pend.Y-pstart.Y)根据椭圆外接矩形的起点和终点绘制椭圆CasemSelect.FillEllipse'用户在工具栏中选择的是填充椭圆Convert_Point()'转换椭圆外接矩形的起点为其左上点43. DimrecAsNewRectangle(pstart.X,pstart.Y, 44. pend.X-pstart.X,pend.Y-pstart.Y)‘定义椭圆的外接矩形45. DimsbrAsNewSolidBrush(btnSetColor.BackColor)'定义画刷颜色为用户选择的颜色46. g.FillEllipse(sbr,rec)'用画刷填充矩形47.48. CasemSelect.StyleEllipse '用户在工具栏中选择的是风格椭圆49. Convert_Point() '转换椭圆外接矩形的起点为其左上点DimrecAsNewRectangle(pstart.X,pstart.Y, pend.X-pstart.X,pend.Y-pstart.Y)定义椭圆的外接矩形'定义画刷风格为Cross型,前景色为白色,背景色为用户选择DimhbrAsNewHatchBrush(HatchStyle.Cross,Color.White,btnSetColor.BackColor)g.FillEllipse(hbr,rec)'用画刷填充矩形EndSelectEndIfEndSub(10)为PictrueBox的MouseMove(鼠标移动)事件编写代码:1.PrivateSubpicPaint_MouseMove(ByValsenderAsSystem.Object,2.ByValeAsSystem.Windows.Forms.MouseEventArgs)2.HandlespicPaint.MouseMoveIfe.Button=Windows.Forms.MouseButtons.LeftThen'如果用户按下的是鼠标左键,根据保存的mChoice绘制图形SelectCasemChoiceCasemSelect.Pencil '用户在工具栏中选择的是铅笔Dimpen1AsNewPen(btnSetColor.BackColor,mWidth)8.pend.X=e.X
8.g.DrawLine(pen1,pstart,pend)pstart=pend'将已经绘制的终点作为下一次的绘制的起点CasemSelect.Eraser'用户在工具栏中选择的是橡皮DimmyPen As NewPen(Color.White,mWidth)'定义白色画笔作为擦除效果pend.X= e.Xpend.Y= e.Yg.DrawLine(myPen,pstart,pend)'将已经绘制的终点作为下一次绘制的起点17.pstartpend
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年呼和浩特货运从业资格考试题库
- 2025年杭州货车从业资格证答题题库
- CRM系统在远程客户服务中的应用研究
- 创新能力在学生职业规划中的重要性
- 创新型企业文化的实践与品牌影响力提升
- 高职《物理(一)》期末考试试卷及答案
- 教科版二年级上册科学期末测试卷附答案【考试直接用】
- 从行业趋势看学校食品安全信息的专业化和可读性
- 创新小学数学教育游戏化教学方法
- 以教学为引领推动学院的全面发展研究
- GB/T 23468-2009坠落防护装备安全使用规范
- GB/T 14801-2009机织物与针织物纬斜和弓纬试验方法
- 国家开放大学电大《计算机应用基础(本)》终结性考试试题答案(格式已排好)任务一
- 2023年福建永泰闽投抽水蓄能有限公司招聘笔试题库及答案解析
- 2023年惠州市交通投资集团有限公司招聘笔试题库及答案解析
- 第一学期期末大作业(经济学)
- 腮腺肿瘤课件
- 变压器保护课件
- 《大学英语B》形成性考核 参考资料 广东开放大学
- 新生儿肠梗阻护理查房讲解课件
- 收款账户确认书
评论
0/150
提交评论