




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 编写一个仿Windows画图程序(1)本例将实现11.1节中的一个仿Windows的简单的画图软件的任务。1新建项目创建一个项目类型为Visual Basic,模板为Windows应用程序的项目,命名为Ch11_5。2界面设计在窗体上添加:一个MenuStrip菜单控件、一个ToolStrip工具栏控件,一个用作绘图板的PictureBox图片框控件、两个让用户选择颜色和线条宽标志的Lable控件、5个让用户选择线条宽度的button控件,一个Panel控件上、一个ImageList控件和一个作为状态信息栏的StatusStripr。调整窗体上各控件的大小及位置,如图11-18所
2、示。 图11-18 画图程序主界面3设置各控件的相关属性设置各控件的相关属性,如表11-9所示。表11-9 画图程序各控件属性设置 4代码设计(1)引入命名空间:Im(2)在FrmPaint类里定义全局变量和mSelect枚举结构:1. Private g As Graphics
3、9;绘图句柄 2. Private pstart As Point, pend As Point '定义画图的起始点,终点 3. Private mChoice As Integer '选择图形枚举 4. Private mWidth As
4、;Integer '画笔宽度 5. Private mIcon As Icon '用户选择
5、图标 6. Private Enum mSelect '选择图形类别枚举 7. Pencil &
6、#160; '铅笔 8. Line
7、0; '直线 9. Ellipse
8、0; '椭圆 10. FillEllipse '填充椭圆 11.
9、60; StyleEllipse '风格椭圆 12. Rec
10、0; '矩形 13. FillRec
11、60; '填充矩形 14. StyleRec
12、; '风格矩形 15. Icon
13、;'图标 16. Eraser '橡皮 17. End Enum(3)在FrmPaint的Load事件中初始
14、化全局变量和Graphics对象:1. Private Sub FrmPaint_Load(ByVal sender As System.Object, _ 2. ByVal e As System.EventArgs) Handles MyBase.Load 3. 4. g = Me.picPaint.Crea
15、teGraphics '获取PictureBox的绘图句柄 5. mChoice = mSelect.Pencil '默认选择选铅笔作为绘图工具 6. mWidth = 1
16、160; '初始化画笔宽度 7. End Sub (4)定义转换坐标起点和终点的过程Convert_Point()。转换坐标起始点和终点,确保起始点始终在终点的左上方,代码如下:1. '确保起始点坐标位于左上角 2. '结束点坐标位于
17、右下角 3. Private Sub Convert_Point() 4. Dim ptemp As Point '用于交换的临时点 5. If
18、160;pstart.X < pend.X Then 6. If pstart.Y > pend.Y Then 7. ptemp.Y = ps
19、tart.Y 8. pstart.Y = pend.Y 9. pend.Y = ptemp.Y 10.
20、 End If 11. End If 12. If pstart.X > pend.X Then 13.
21、160; If pstart.Y < pend.Y Then 14. ptemp.X = pstart.X 15. &
22、#160; pstart.X = pend.X 16. pend.X = ptemp.X 17. End If 18. &
23、#160; If pstart.Y > pend.Y Then 19. ptemp = pstart 20.
24、0; pstart = pend 21. pend = ptemp 22. End If 23.
25、 End If 24. End Sub (5)为工具栏ItemClick事件编写代码:1. Private Sub tsPaint_ItemClicked(ByVal sender As System.Object, _ 2. ByVal e As System.Windows.Forms.
26、ToolStripItemClickedEventArgs) Handles tsPaint.ItemClicked 3. '获取发生事件的索引号 4. Me.mChoice = Me.tsPaint.Items.IndexOf(e.ClickedItem) 5. If mChoice = mSelect.Icon Then
27、60;6. '如果选择的是图标,则打开OpenFileDialog选取图标 7. Dim dlgOpen As New OpenFileDialog 8. dlgOpen.Filter = "图标文件|*.ic
28、o" 9. If dlgOpen.ShowDialog = Windows.Forms.DialogResult.OK Then 10. mIcon = New Icon(dlgOpen.FileName) 11.
29、0; End If 12. End If (6)为btnSetColor控件的Click事件,编写代码,选择画笔颜色,代码如下:1. Private Sub btnSetColor_Click(ByVal sender As System.Object, _ 2. ByVal e As System.E
30、ventArgs) Handles btnSetColor.Click 3. '打开"颜色"对话框 4. Dim dlgColor As New ColorDialog 5. If dlgColor.ShowDialog = Windows.Forms.DialogResult.OK The
31、n 6. Me.btnSetColor.BackColor = dlgColor.Color 7. End If 8. End Sub (7)编写选择线条宽度的共享事件过程btnLines_Click()代码:1. Private Sub btnLine_Click(ByVal sender As System.Objec
32、t, ByVal e As System.EventArgs) _ 2. Handles btnLine1.Click, btnLine2.Click, btnLine3.Click, btnLine4.Click, btnLine5.Click 3. 4. '把所有按钮的背景色都设为Black 5.
33、0; Me.btnLine1.BackColor = Color.White 6. Me.btnLine2.BackColor = Color.White 7. Me.btnLine3.BackColor = Color.White 8. Me.btnLine4.BackColor = Color.White 9.
34、 Me.btnLine5.BackColor = Color.White 10. 11. '用户选中的按钮背景色为Blue 12. CType(sender, Button).BackColor = Color.Black 13. 14. '把画笔宽度设为用户选择按钮的Tag值
35、160;15. mWidth = CType(sender, Button).Tag 16. End Sub (8)为PictrueBox的MouseDown(鼠标按下)事件编写代码。在FrmPaint的代码窗口顶部的"对象"下拉列表框中选择picPaint,然后在右侧的"事件"下拉列表框中选择MouseDown,此时代码编辑器中已经自动生成了picPaint_MouseUp的事件代码,并把鼠标定位于事件过程内部的第一行,在该过程中编写如下代码:
36、1. Private Sub picPaint_MouseDown(ByVal sender As System.Object, _ 2. ByVal e As System.Windows.Forms.MouseEventArgs) Handles picPaint.MouseDown 3. If e.Button = Windows.
37、Forms.MouseButtons.Left Then 4. 5. '如果用户按下的是鼠标左键,则将当前点坐标赋给起始点 6. pstart.X = e.X 7. pstart.Y = e.Y
38、8. End If 9. End Sub 11.6.2 编写一个仿Windows画图程序(3)(9)为PictrueBox的MouseUp(鼠标释放)事件编写代码:1. Private Sub picPaint_MouseUp(ByVal sender As System.Object, _ 2. ByVal e As System.Windows
39、.Forms.MouseEventArgs) Handles picPaint.MouseUp 3. 4. If e.Button = Windows.Forms.MouseButtons.Left Then 5. '如果用户按下的是鼠标左键,记录终点坐标 6.
40、60; pend.X = e.X 7. pend.Y = e.Y 8. '根据保存的mChoice绘制图形 9. Select Case mChoice 10.
41、 Case mSelect.Line '用户在工具栏中选择的是铅笔 11. Dim myPen As New Pen(Me.btnSetColor.BackColor, mWidth) 1
42、2. g.DrawLine(myPen, pstart, pend) '根据起点和终点绘制直线 13. 14. Case mSelect.Rec
43、'用户在工具栏中选择的是空心矩形 15. Convert_Point() '转换矩形的起点为其左上点 16. Dim&
44、#160;myPen As New Pen(Me.btnSetColor.BackColor, mWidth) 17. g.DrawRectangle(myPen, pstart.X, pstart.Y, _ 18.
45、 pend.X - pstart.X, pend.Y - pstart.Y) '根据起点和终点绘制空心矩形 19. 20. Case mSelect.FillRec '用户在工具栏中选择的是填充
46、矩形 21. Convert_Point() '转换矩形的起点为其左上点 22. Dim rec As
47、160;New Rectangle(pstart.X, pstart.Y, _ 23. pend.X - pstart.X, pend.Y - pstart.Y) '根据起点和终点定义矩形 24.
48、160; Dim sbr As New SolidBrush(btnSetColor.BackColor) '定义画刷颜色为用户选择的颜色 25. g.FillRectangle(sbr, rec) '绘制填充矩形
49、 26. 27. Case mSelect.StyleRec '用户在工具栏中选择的是风格矩形 28. Convert_Point()
50、0; '转换矩形的起点为其左上点 29. Dim rec As New Rectangle(pstart.X, pstart.Y, _ 30.
51、60; pend.X - pstart.X, pend.Y - pstart.Y) '根据起点和终点定义矩形 31. ' 定义画刷风格为Cross型,前景色为白色,背景色为用户选择 32. &
52、#160; Dim hbr As New HatchBrush(HatchStyle.Cross, Color.White, btnSetColor.BackColor) 33. g.FillRectang
53、le(hbr, rec) '用画刷填充矩形 34. 35. Case mSelect.Ellipse '用户在工具栏中选择的是空心椭圆 36. Convert_Point(
54、) '转换椭圆外接矩形的起点为其左上点 37. Dim pen1 As New Pen(btnSetColor.BackColor, mWidth) 38. &
55、#160; g.DrawEllipse(pen1, pstart.X, pstart.Y, _ 39. pend.X - pstart.X, pend.Y - pstart.Y) '根据椭圆外接矩形的起点和终点绘制椭圆 40. 41.
56、160; Case mSelect.FillEllipse '用户在工具栏中选择的是填充椭圆 42. Convert_Point() '转换椭圆外接矩形的起点为其左上点 43.
57、60; Dim rec As New Rectangle(pstart.X, pstart.Y, _ 44. pend.X - pstart.X, pend.Y
58、160;- pstart.Y) '定义椭圆的外接矩形 45. Dim sbr As New SolidBrush(btnSetColor.BackColor) '定义画刷颜色为用户选择的颜色 46. &
59、#160; g.FillEllipse(sbr, rec) '用画刷填充矩形 47. 48. Case mSelect.StyleEllipse '用户在工具栏中选择的是风格椭圆 49.
60、; Convert_Point() '转换椭圆外接矩形的起点为其左上点 50. Dim rec As New Rectangle(pstart.X, pstart
61、.Y, _ 51. pend.X - pstart.X, pend.Y - pstart.Y) '定义椭圆的外接矩形 52.
62、 ' 定义画刷风格为Cross型,前景色为白色,背景色为用户选择 53. Dim hbr As New HatchBrush(HatchStyle.Cross, Color.White, btnSetColor.BackColor) 54.
63、60; g.FillEllipse(hbr, rec) '用画刷填充矩形 55. End Select 56. End If 57. End Sub (10)为PictrueBox的MouseMove(
64、鼠标移动)事件编写代码:1. Private Sub picPaint_MouseMove(ByVal sender As System.Object, _ 2. ByVal e As System.Windows.Forms.MouseEventArgs) Handles picPaint.MouseMove 3. If e.Button =
65、160;Windows.Forms.MouseButtons.Left Then 4. '如果用户按下的是鼠标左键,根据保存的mChoice绘制图形 5. Select Case mChoice 6. &
66、#160;Case mSelect.Pencil '用户在工具栏中选择的是铅笔 7. Dim pen1 As New Pen(btnSetColor.BackColor, mWidth) 8.
67、160; pend.X = e.X 9. pend.Y = e.Y 10.
68、60; g.DrawLine(pen1, pstart, pend) 11. pstart = pend '将已经绘制的终点作为下一次的绘制的起点 12. Case mSelect.Eraser '用户在工具栏中选择的是橡皮 13.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电设备材料采购合同
- 粉末冶金在雷达天线制造中的应用考核试卷
- 窗帘布艺的个性化定制服务考核试卷
- 烘焙食品的创新研发考核试卷
- 石油钻采设备智能化发展趋势与政策影响考核试卷
- 有机肥料及微生物肥料制造考核试卷
- 玩具设计的人机交互原理考核试卷
- 插画与动漫设计创意考核试卷
- 网球训练设备出租考核试卷
- 糕点店品牌形象与标识设计考核试卷
- 广州市黄埔区教育局招聘事业编制教职员考试真题2024
- 国际经济学(下册国际金融)克鲁格曼-中文答案
- 2025年宁夏银川市唐徕中学南校区中考一模英语试题(原卷版+解析版)
- 乡村民宿开发管理运营手册
- 殡葬服务笔试题库及答案
- 2025年光大银行校园招聘笔试参考题库(带答案)
- 中医康复理疗师职业指导试题及答案
- 全过程工程咨询投标方案(技术方案)
- 研究生教育高质量发展新动能推动方案
- 宁波十校2025届高三3月联考语文试卷(含答案解析)
- 在线网课学习课堂《人工智能(北理 )》单元测试考核答案
评论
0/150
提交评论