




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 編寫一個(gè)仿Windows畫圖程序(1)本例將實(shí)現(xiàn)11.1節(jié)中的一個(gè)仿Windows的簡單的畫圖軟件的任務(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對象: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. '打開"顏色"對話框 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的代碼窗口頂部的"對象"下拉列表框中選擇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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025員工勞動(dòng)合同終止協(xié)議書樣本
- 航空旅游人工智能助手考核試卷
- 課間15分鐘“微運(yùn)動(dòng)”實(shí)施方案-少年活力燃課間
- 2024年水果、堅(jiān)果加工品資金需求報(bào)告代可行性研究報(bào)告
- 網(wǎng)絡(luò)安全對策研究試題及答案
- 智能社區(qū)快遞驛站租賃與快遞業(yè)務(wù)拓展合同
- 金融科技股權(quán)投資及股權(quán)轉(zhuǎn)讓及風(fēng)險(xiǎn)控制協(xié)議
- 智能倉儲(chǔ)解決方案無人叉車租賃合作協(xié)議
- 虛擬偶像IP虛擬形象代言及廣告宣傳合同
- 網(wǎng)紅飲品店品牌加盟連鎖與全國物料配送管理協(xié)議
- 三方合作解除協(xié)議書
- 批判教育學(xué)的流派和代表人物及其觀點(diǎn)
- 三年級(jí)下學(xué)期音樂復(fù)習(xí)題
- 農(nóng)網(wǎng)配電營業(yè)工復(fù)習(xí)題
- 電氣畢業(yè)論文-基于-plc自動(dòng)門控制設(shè)計(jì)
- 煉鋼廠風(fēng)險(xiǎn)分級(jí)管控清單連鑄區(qū)域
- 新時(shí)期農(nóng)村初中語文教學(xué)中滲透心理健康教育的研究 論文
- 女性中醫(yī)保健智慧樹知到答案章節(jié)測試2023年暨南大學(xué)
- 餐飲員工入職登記表
- GA 1808-2022軍工單位反恐怖防范要求
- -衛(wèi)生資格-副高-護(hù)理學(xué)-副高-章節(jié)練習(xí)-??谱o(hù)理學(xué)-內(nèi)科疾病患者護(hù)理(多選題)(共42題)
評論
0/150
提交評論