




免费预览已结束,剩余5页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11.6.2 编写一个仿Windows画图程序(1)本例将实现11.1节中的一个仿Windows的简单的画图软件的任务。1新建项目创建一个项目类型为Visual Basic,模板为Windows应用程序的项目,命名为Ch11_5。2界面设计在窗体上添加:一个MenuStrip菜单控件、一个ToolStrip工具栏控件,一个用作绘图板的PictureBox图片框控件、两个让用户选择颜色和线条宽标志的Lable控件、5个让用户选择线条宽度的button控件,一个Panel控件上、一个ImageList控件和一个作为状态信息栏的StatusStripr。调整窗体上各控件的大小及位置,如图11-18所示。图11-18 画图程序主界面3设置各控件的相关属性设置各控件的相关属性,如表11-9所示。表11-9 画图程序各控件属性设置4代码设计(1)引入命名空间:Imports System.Drawing.Drawing2D(2)在FrmPaint类里定义全局变量和mSelect枚举结构:1. PrivategAsGraphics绘图句柄 2. PrivatepstartAsPoint,pendAsPoint定义画图的起始点,终点 3. PrivatemChoiceAsInteger选择图形枚举 4. PrivatemWidthAsInteger画笔宽度 5. PrivatemIconAsIcon用户选择图标 6. PrivateEnummSelect选择图形类别枚举 7. Pencil铅笔 8. Line直线 9. Ellipse椭圆 10. FillEllipse填充椭圆 11. StyleEllipse风格椭圆 12. Rec矩形 13. FillRec填充矩形 14. StyleRec风格矩形 15. Icon图标 16. Eraser橡皮17. End Enum(3)在FrmPaint的Load事件中初始化全局变量和Graphics对象:1. PrivateSubFrmPaint_Load(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.EventArgs)HandlesMyBase.Load 3. 4. g=Me.picPaint.CreateGraphics获取PictureBox的绘图句柄 5. mChoice=mSelect.Pencil默认选择选铅笔作为绘图工具 6. mWidth=1初始化画笔宽度 7. EndSub(4)定义转换坐标起点和终点的过程Convert_Point()。转换坐标起始点和终点,确保起始点始终在终点的左上方,代码如下:1. 确保起始点坐标位于左上角 2. 结束点坐标位于右下角 3. PrivateSubConvert_Point() 4. DimptempAsPoint用于交换的临时点 5. Ifpstart.Xpend.YThen7. ptemp.Y=pstart.Y 8. pstart.Y=pend.Y 9. pend.Y=ptemp.Y 10. EndIf11. EndIf12. Ifpstart.Xpend.XThen13. Ifpstart.Ypend.YThen19. ptemp=pstart 20. pstart=pend 21. pend=ptemp 22. EndIf23. EndIf24. EndSub(5)为工具栏ItemClick事件编写代码:1. PrivateSubtsPaint_ItemClicked(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.Windows.Forms.ToolStripItemClickedEventArgs)HandlestsPaint.ItemClicked 3. 获取发生事件的索引号 4. Me.mChoice=Me.tsPaint.Items.IndexOf(e.ClickedItem) 5. IfmChoice=mSelect.IconThen6. 如果选择的是图标,则打开OpenFileDialog选取图标 7. DimdlgOpenAsNewOpenFileDialog 8. dlgOpen.Filter=图标文件|*.ico9. IfdlgOpen.ShowDialog=Windows.Forms.DialogResult.OKThen10. mIcon=NewIcon(dlgOpen.FileName) 11. EndIf12. EndIf(6)为btnSetColor控件的Click事件,编写代码,选择画笔颜色,代码如下:1. PrivateSubbtnSetColor_Click(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.EventArgs)HandlesbtnSetColor.Click 3. 打开颜色对话框 4. DimdlgColorAsNewColorDialog 5. IfdlgColor.ShowDialog=Windows.Forms.DialogResult.OKThen6. Me.btnSetColor.BackColor=dlgColor.Color 7. EndIf8. EndSub(7)编写选择线条宽度的共享事件过程btnLines_Click()代码:1. PrivateSubbtnLine_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ 2. HandlesbtnLine1.Click,btnLine2.Click,btnLine3.Click,btnLine4.Click,btnLine5.Click 3. 4. 把所有按钮的背景色都设为Black 5. Me.btnLine1.BackColor=Color.White 6. Me.btnLine2.BackColor=Color.White 7. Me.btnLine3.BackColor=Color.White 8. Me.btnLine4.BackColor=Color.White 9. Me.btnLine5.BackColor=Color.White 10. 11. 用户选中的按钮背景色为Blue 12. CType(sender,Button).BackColor=Color.Black 13. 14. 把画笔宽度设为用户选择按钮的Tag值 15. mWidth=CType(sender,Button).Tag 16. EndSub(8)为PictrueBox的MouseDown(鼠标按下)事件编写代码。在FrmPaint的代码窗口顶部的对象下拉列表框中选择picPaint,然后在右侧的事件下拉列表框中选择MouseDown,此时代码编辑器中已经自动生成了picPaint_MouseUp的事件代码,并把鼠标定位于事件过程内部的第一行,在该过程中编写如下代码:1. PrivateSubpicPaint_MouseDown(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlespicPaint.MouseDown 3. Ife.Button=Windows.Forms.MouseButtons.LeftThen4. 5. 如果用户按下的是鼠标左键,则将当前点坐标赋给起始点 6. pstart.X=e.X 7. pstart.Y=e.Y 8. EndIf9. EndSub(9)为PictrueBox的MouseUp(鼠标释放)事件编写代码:1. PrivateSubpicPaint_MouseUp(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlespicPaint.MouseUp 3. 4. Ife.Button=Windows.Forms.MouseButtons.LeftThen5. 如果用户按下的是鼠标左键,记录终点坐标 6. pend.X=e.X 7. pend.Y=e.Y 8. 根据保存的mChoice绘制图形 9. SelectCasemChoice 10. CasemSelect.Line用户在工具栏中选择的是铅笔 11. DimmyPenAsNewPen(Me.btnSetColor.BackColor,mWidth) 12. g.DrawLine(myPen,pstart,pend)根据起点和终点绘制直线 13. 14. CasemSelect.Rec用户在工具栏中选择的是空心矩形 15. Convert_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型,前景色为白色,背景色为用户选择 32. DimhbrAsNewHatchBrush(HatchStyle.Cross,Color.White,btnSetColor.BackColor) 33. g.FillRectangle(hbr,rec)用画刷填充矩形 34. 35. CasemSelect.Ellipse用户在工具栏中选择的是空心椭圆 36. Convert_Point()转换椭圆外接矩形的起点为其左上点 37. Dimpen1AsNewPen(btnSetColor.BackColor,mWidth) 38. g.DrawEllipse(pen1,pstart.X,pstart.Y,_ 39. pend.X-pstart.X,pend.Y-pstart.Y)根据椭圆外接矩形的起点和终点绘制椭圆 40. 41. CasemSelect.FillEllipse用户在工具栏中选择的是填充椭圆 42. 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()转换椭圆外接矩形的起点为其左上点 50. DimrecAsNewRectangle(pstart.X,pstart.Y,_ 51. pend.X-pstart.X,pend.Y-pstart.Y)定义椭圆的外接矩形 52. 定义画刷风格为Cross型,前景色为白色,背景色为用户选择 53. DimhbrAsNewHatchBrush(HatchStyle.Cross,Color.White,btnSetColor.BackColor) 54. g.FillEllipse(hbr,rec)用画刷填充矩形 55. EndSelect56. EndIf57. EndSub(10)为PictrueBox的MouseMove(鼠标移动)事件编写代码:1. PrivateSubpicPaint_MouseMove(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlespicPaint.MouseMove 3. Ife.Button=Windows.Forms.MouseButtons.LeftThen4. 如果用户按下的是鼠标左键,根据保存的mChoice绘制图形 5. SelectCasemChoice 6. CasemSelect.Pencil用户在工具栏中选择的是铅笔 7. Dimpen1AsNewPen(btnSetColor.BackColor,mWidth) 8. pend.X=e.X 9. pend.Y=e.Y 10. g.DrawLine(pen1,pstart,pend) 11. pstart=pend将已经绘制的终点作为下一次的绘制的起点 12. CasemSelect.Eraser用户在工具栏中选择的是橡皮 13. DimmyPenAsNewPen(Color.White,mWidth)定义白色画笔作为擦除效果 14. pend.X=e.X 15. pend.Y=e.Y 16. g.DrawLine(myPen,pstart,pend)将已经绘制的终点作为下一次绘制的起点 17. pstart=pend将已经绘制的终点作为下一次绘制的起点 18. EndSelect19. EndIf20. EndSub(11)为PictrueBox的Mouse的Click(鼠标单击)事件编写代码:1. PrivateSubpicPaint_Click(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.EventArgs)HandlespicPaint.Click 3. IfmChoice=mSelect.IconThen4. 画图标 5. g.DrawIcon(mIcon,pstart.X,pstart.Y) 6. EndIf7. EndSub(12)为新建miNew的Click事件编写代码:1. PrivateSubmiNew_Click(ByValsenderAsSystem.Object,_ 2. ByValeAsSystem.EventArgs)HandlesmiNew.Click 3. 4. Me.picPaint.Refresh() 5. EndS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网商节假日前安全考核试卷含答案
- 企业质押合同风险管控范本
- 猎头招聘方案设计与实施指导
- 唐诗宋词300首经典诵读与理解
- 2025-2030动态指纹传感器行业标准制定及市场竞争格局研究
- 2025-2030动力电池正极材料技术路线竞争格局演变分析
- 2025-2030动力电池梯次利用储能电站经济性评估与商业模式创新研究报告
- 2025-2030动力电池回收网络建设与循环经济价值测算报告
- 2025-2030动力电池回收湿法冶金工艺重金属污染防控技术评估报告
- 企业网络安全风险评估实施细则
- 国际篮联三对三篮球比赛记录表
- 07FK02防空地下室通风设备安装图集
- 室内装饰装修施工工艺标准规范及管理流程
- 【拓展阅读】类文阅读《燧人氏钻木取火》
- 李建涛员工从“老板”做起课件
- 海船船员甲类三管轮实习记录簿
- 注采压力分布规律研究课件
- 填料及表面处理培训课件
- 文学理论(全套课件)
- 法院民事调解协议书
- 2022年人口变动情况抽样调查表
评论
0/150
提交评论