




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 編寫一個(gè)仿Windows畫圖程序(1)本例將實(shí)現(xiàn)11.1節(jié)中的一個(gè)仿Windows的簡(jiǎn)單的畫圖軟件的任務(wù)。1新建項(xiàng)目創(chuàng)建一個(gè)項(xiàng)目類型為Visual Basic,模板為Windows應(yīng)用程序的項(xiàng)目,命名為Ch11_5。2界面設(shè)計(jì)在窗體上添加:一個(gè)MenuStrip菜單控件、一個(gè)ToolStrip工具欄控件,一個(gè)用作繪圖板的PictureBox圖片框控件、兩個(gè)讓用戶選擇顏色和線條寬標(biāo)志的Lable控件、5個(gè)讓用戶選擇線條寬度的button控件,一個(gè)Panel控件上、一個(gè)ImageList控件和一個(gè)作為狀態(tài)信息欄的StatusStripr。調(diào)整窗體上各控件的大小及位置,如圖11-18所
2、示。 圖11-18 畫圖程序主界面3設(shè)置各控件的相關(guān)屬性設(shè)置各控件的相關(guān)屬性,如表11-9所示。表11-9 畫圖程序各控件屬性設(shè)置 4代碼設(shè)計(jì)(1)引入命名空間:Im(2)在FrmPaint類里定義全局變量和mSelect枚舉結(jié)構(gòu):1. Private g As Graphics
3、9;繪圖句柄 2. Private pstart As Point, pend As Point '定義畫圖的起始點(diǎn),終點(diǎn) 3. Private mChoice As Integer '選擇圖形枚舉 4. Private mWidth As
4、;Integer '畫筆寬度 5. Private mIcon As Icon '用戶選擇
5、圖標(biāo) 6. Private Enum mSelect '選擇圖形類別枚舉 7. Pencil &
6、#160; '鉛筆 8. Line
7、0; '直線 9. Ellipse
8、0; '橢圓 10. FillEllipse '填充橢圓 11.
9、60; StyleEllipse '風(fēng)格橢圓 12. Rec
10、0; '矩形 13. FillRec
11、60; '填充矩形 14. StyleRec
12、; '風(fēng)格矩形 15. Icon
13、;'圖標(biāo) 16. Eraser '橡皮 17. End Enum(3)在FrmPaint的Load事件中初始
14、化全局變量和Graphics對(duì)象: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 '默認(rèn)選擇選鉛筆作為繪圖工具 6. mWidth = 1
16、160; '初始化畫筆寬度 7. End Sub (4)定義轉(zhuǎn)換坐標(biāo)起點(diǎn)和終點(diǎn)的過程Convert_Point()。轉(zhuǎn)換坐標(biāo)起始點(diǎn)和終點(diǎn),確保起始點(diǎn)始終在終點(diǎn)的左上方,代碼如下:1. '確保起始點(diǎn)坐標(biāo)位于左上角 2. '結(jié)束點(diǎn)坐標(biāo)位于
17、右下角 3. Private Sub Convert_Point() 4. Dim ptemp As Point '用于交換的臨時(shí)點(diǎn) 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. '獲取發(fā)生事件的索引號(hào) 4. Me.mChoice = Me.tsPaint.Items.IndexOf(e.ClickedItem) 5. If mChoice = mSelect.Icon Then
27、60;6. '如果選擇的是圖標(biāo),則打開OpenFileDialog選取圖標(biāo) 7. Dim dlgOpen As New OpenFileDialog 8. dlgOpen.Filter = "圖標(biāo)文件|*.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. '打開"顏色"對(duì)話框 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. '把所有按鈕的背景色都設(shè)為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. '把畫筆寬度設(shè)為用戶選擇按鈕的Tag值
35、160;15. mWidth = CType(sender, Button).Tag 16. End Sub (8)為PictrueBox的MouseDown(鼠標(biāo)按下)事件編寫代碼。在FrmPaint的代碼窗口頂部的"對(duì)象"下拉列表框中選擇picPaint,然后在右側(cè)的"事件"下拉列表框中選擇MouseDown,此時(shí)代碼編輯器中已經(jīng)自動(dòng)生成了picPaint_MouseUp的事件代碼,并把鼠標(biāo)定位于事件過程內(nèi)部的第一行,在該過程中編寫如下代碼:
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. '如果用戶按下的是鼠標(biāo)左鍵,則將當(dāng)前點(diǎn)坐標(biāo)賦給起始點(diǎn) 6. pstart.X = e.X 7. pstart.Y = e.Y
38、8. End If 9. End Sub 11.6.2 編寫一個(gè)仿Windows畫圖程序(3)(9)為PictrueBox的MouseUp(鼠標(biāo)釋放)事件編寫代碼: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. '如果用戶按下的是鼠標(biāo)左鍵,記錄終點(diǎn)坐標(biāo) 6.
40、60; pend.X = e.X 7. pend.Y = e.Y 8. '根據(jù)保存的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) '根據(jù)起點(diǎn)和終點(diǎn)繪制直線 13. 14. Case mSelect.Rec
43、'用戶在工具欄中選擇的是空心矩形 15. Convert_Point() '轉(zhuǎn)換矩形的起點(diǎn)為其左上點(diǎn) 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) '根據(jù)起點(diǎn)和終點(diǎn)繪制空心矩形 19. 20. Case mSelect.FillRec '用戶在工具欄中選擇的是填充
46、矩形 21. Convert_Point() '轉(zhuǎn)換矩形的起點(diǎn)為其左上點(diǎn) 22. Dim rec As
47、160;New Rectangle(pstart.X, pstart.Y, _ 23. pend.X - pstart.X, pend.Y - pstart.Y) '根據(jù)起點(diǎn)和終點(diǎn)定義矩形 24.
48、160; Dim sbr As New SolidBrush(btnSetColor.BackColor) '定義畫刷顏色為用戶選擇的顏色 25. g.FillRectangle(sbr, rec) '繪制填充矩形
49、 26. 27. Case mSelect.StyleRec '用戶在工具欄中選擇的是風(fēng)格矩形 28. Convert_Point()
50、0; '轉(zhuǎn)換矩形的起點(diǎn)為其左上點(diǎn) 29. Dim rec As New Rectangle(pstart.X, pstart.Y, _ 30.
51、60; pend.X - pstart.X, pend.Y - pstart.Y) '根據(jù)起點(diǎn)和終點(diǎn)定義矩形 31. ' 定義畫刷風(fēng)格為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、) '轉(zhuǎn)換橢圓外接矩形的起點(diǎn)為其左上點(diǎn) 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) '根據(jù)橢圓外接矩形的起點(diǎn)和終點(diǎn)繪制橢圓 40. 41.
56、160; Case mSelect.FillEllipse '用戶在工具欄中選擇的是填充橢圓 42. Convert_Point() '轉(zhuǎn)換橢圓外接矩形的起點(diǎn)為其左上點(diǎn) 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 '用戶在工具欄中選擇的是風(fēng)格橢圓 49.
60、; Convert_Point() '轉(zhuǎn)換橢圓外接矩形的起點(diǎn)為其左上點(diǎn) 50. Dim rec As New Rectangle(pstart.X, pstart
61、.Y, _ 51. pend.X - pstart.X, pend.Y - pstart.Y) '定義橢圓的外接矩形 52.
62、 ' 定義畫刷風(fēng)格為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、鼠標(biāo)移動(dòng))事件編寫代碼: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. '如果用戶按下的是鼠標(biāo)左鍵,根據(jù)保存的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 '將已經(jīng)繪制的終點(diǎn)作為下一次的繪制的起點(diǎn) 12. Case mSelect.Eraser '用戶在工具欄中選擇的是橡皮 13.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- VB開發(fā)流程的常見問題及答案
- 軟件考試試題及答案總結(jié)分享
- 開放源代碼軟件考試題目及答案
- 信息處理技術(shù)員考試題庫及答案
- 2025屆湖南省岳陽市汨羅市沙溪中學(xué)數(shù)學(xué)七下期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 兒童活動(dòng)中心安全防范措施計(jì)劃
- 明確任務(wù)分工的實(shí)施方案計(jì)劃
- 校內(nèi)交流與學(xué)習(xí)共享活動(dòng)計(jì)劃
- 軟件水平考試信息處理試題及答案
- 教學(xué)日志撰寫要求計(jì)劃
- (2025)中國漢字聽寫大賽全部試題庫及答案
- 前程無憂測(cè)試題庫28個(gè)題答案
- 無傘空投技術(shù)研究進(jìn)展及國外準(zhǔn)備階段分析
- 上海家政服務(wù)合同樣本
- 全國農(nóng)牧漁業(yè)豐收獎(jiǎng)獎(jiǎng)勵(lì)制度
- 黑龍江省哈爾濱市第四十七中學(xué)2024-2025學(xué)年八年級(jí)下學(xué)期3月月考地理試題(含答案)
- 《電力建設(shè)工程施工安全管理導(dǎo)則》(nbt10096-2018)
- 垃圾場(chǎng)應(yīng)急預(yù)案
- 醫(yī)院醫(yī)療服務(wù)收費(fèi)自查自糾制度
- 低壓電纜破損修補(bǔ)方案
- 上海交大附中2024-2025學(xué)年下學(xué)期高二語文摸底考試作文導(dǎo)寫:這種“我”的崛起必然導(dǎo)致“我們”的消解
評(píng)論
0/150
提交評(píng)論