用VB編寫畫圖程序_第1頁
用VB編寫畫圖程序_第2頁
用VB編寫畫圖程序_第3頁
用VB編寫畫圖程序_第4頁
用VB編寫畫圖程序_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論