版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
./
編寫一個仿Windows畫圖程序〔1本例將實現(xiàn)11.1節(jié)中的一個仿Windows的簡單的畫圖軟件的任務(wù)。1.新建項目創(chuàng)建一個項目類型為VisualBasic,模板為Windows應(yīng)用程序的項目,命名為Ch11_5。2.界面設(shè)計在窗體上添加:一個MenuStrip菜單控件、一個ToolStrip工具欄控件,一個用作繪圖板的PictureBox圖片框控件、兩個讓用戶選擇顏色和線條寬標(biāo)志的Lable控件、5個讓用戶選擇線條寬度的button控件,一個Panel控件上、一個ImageList控件和一個作為狀態(tài)信息欄的StatusStripr。調(diào)整窗體上各控件的大小及位置,如圖11-18所示。
圖11-18
畫圖程序主界面3.設(shè)置各控件的相關(guān)屬性設(shè)置各控件的相關(guān)屬性,如表11-9所示。表11-9
畫圖程序各控件屬性設(shè)置
4.代碼設(shè)計〔1引入命名空間:Im〔2在FrmPaint類里定義全局變量和mSelect枚舉結(jié)構(gòu):Private
g
As
Graphics
'繪圖句柄Private
pstart
As
Point,
pend
As
Point
'定義畫圖的起始點,終點Private
mChoice
AsInteger'選擇圖形枚舉Private
mWidth
AsInteger'畫筆寬度Private
mIcon
As
Icon
'用戶選擇圖標(biāo)PrivateEnum
mSelect
'選擇圖形類別枚舉
Pencil
'鉛筆
Line
'直線
Ellipse
'橢圓
FillEllipse
'填充橢圓
StyleEllipse
'風(fēng)格橢圓
Rec
'矩形
FillRec
'填充矩形
StyleRec
'風(fēng)格矩形
Icon
'圖標(biāo)
Eraser
'橡皮EndEnum〔3在FrmPaint的Load事件中初始化全局變量和Graphics對象:PrivateSub
FrmPaint_Load<ByVal
sender
As
System.Object,
_
ByVal
e
As
System.EventArgs>
HandlesMyBase.Load
g
=
Me.picPaint.CreateGraphics
'獲取PictureBox的繪圖句柄
mChoice
=
mSelect.Pencil
'默認(rèn)選擇選鉛筆作為繪圖工具
mWidth
=
1
'初始化畫筆寬度EndSub〔4定義轉(zhuǎn)換坐標(biāo)起點和終點的過程Convert_Point<>。轉(zhuǎn)換坐標(biāo)起始點和終點,確保起始點始終在終點的左上方,代碼如下:'確保起始點坐標(biāo)位于左上角'結(jié)束點坐標(biāo)位于右下角PrivateSub
Convert_Point<>
Dim
ptemp
As
Point
'用于交換的臨時點If
pstart.X
<
pend.X
ThenIf
pstart.Y
>
pend.Y
Then
ptemp.Y
=
pstart.Y
pstart.Y
=
pend.Y
pend.Y
=
ptemp.Y
EndIfEndIfIf
pstart.X
>
pend.X
ThenIf
pstart.Y
<
pend.Y
Then
ptemp.X
=
pstart.X
pstart.X
=
pend.X
pend.X
=
ptemp.X
EndIfIf
pstart.Y
>
pend.Y
Then
ptemp
=
pstart
pstart
=
pend
pend
=
ptemp
EndIfEndIfEndSub〔5為工具欄ItemClick事件編寫代碼:PrivateSub
tsPaint_ItemClicked<ByVal
sender
As
System.Object,
_
ByVal
e
As
System.Windows.Forms.ToolStripItem
ClickedEventArgs>
Handles
tsPaint.ItemClicked
'獲取發(fā)生事件的索引號Me.mChoice
=
Me.tsPaint.Items.IndexOf<e.ClickedItem>
If
mChoice
=
mSelect.Icon
Then'如果選擇的是圖標(biāo),則打開OpenFileDialog選取圖標(biāo)Dim
dlgOpen
AsNew
OpenFileDialog
dlgOpen.Filter
=
"圖標(biāo)文件|*.ico"If
dlgOpen.ShowDialog
=
Windows.Forms.DialogResult.OK
Then
mIcon
=
New
Icon<dlgOpen.FileName>
EndIfEndIf〔6為btnSetColor控件的Click事件,編寫代碼,選擇畫筆顏色,代碼如下:PrivateSub
btnSetColor_Click<ByVal
sender
As
System.Object,
_
ByVal
e
As
System.EventArgs>
Handles
btnSetColor.Click
'打開"顏色"對話框Dim
dlgColor
AsNew
ColorDialog
If
dlgColor.ShowDialog
=
Windows.Forms.DialogResult.OK
ThenMe.btnSetColor.BackColor
=
dlgColor.Color
EndIfEndSub〔7編寫選擇線條寬度的共享事件過程btnLines_Click<>代碼:PrivateSub
btnLine_Click<ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs>
_
Handles
btnLine1.Click,
btnLine2.Click,
btnLine3.Click,
btnLine4.Click,
btnLine5.Click
'把所有按鈕的背景色都設(shè)為BlackMe.btnLine1.BackColor
=
Color.White
Me.btnLine2.BackColor
=
Color.White
Me.btnLine3.BackColor
=
Color.White
Me.btnLine4.BackColor
=
Color.White
Me.btnLine5.BackColor
=
Color.White
'用戶選中的按鈕背景色為BlueCType<sender,
Button>.BackColor
=
Color.Black
'把畫筆寬度設(shè)為用戶選擇按鈕的Tag值
mWidth
=
CType<sender,
Button>.Tag
EndSub〔8為PictrueBox的MouseDown〔鼠標(biāo)按下事件編寫代碼。在FrmPaint的代碼窗口頂部的"對象"下拉列表框中選擇picPaint,然后在右側(cè)的"事件"下拉列表框中選擇MouseDown,此時代碼編輯器中已經(jīng)自動生成了picPaint_MouseUp的事件代碼,并把鼠標(biāo)定位于事件過程內(nèi)部的第一行,在該過程中編寫如下代碼:PrivateSub
picPaint_MouseDown<ByVal
sender
As
System.Object,
_
ByVal
e
As
System.Windows.Forms.MouseEventArgs>
Handles
picPaint.MouseDown
If
e.Button
=
Windows.Forms.MouseButtons.Left
Then'如果用戶按下的是鼠標(biāo)左鍵,則將當(dāng)前點坐標(biāo)賦給起始點
pstart.X
=
e.X
pstart.Y
=
e.Y
EndIfEndSub11.6.2
編寫一個仿Windows畫圖程序〔3〔9為PictrueBox的MouseUp〔鼠標(biāo)釋放事件編寫代碼:PrivateSub
picPaint_MouseUp<ByVal
sender
As
System.Object,
_
ByVal
e
As
System.Windows.Forms.MouseEventArgs>
Handles
picPaint.MouseUp
If
e.Button
=
Windows.Forms.MouseButtons.Left
Then'如果用戶按下的是鼠標(biāo)左鍵,記錄終點坐標(biāo)
pend.X
=
e.X
pend.Y
=
e.Y
'根據(jù)保存的mChoice繪制圖形SelectCase
mChoice
Case
mSelect.Line
'用戶在工具欄中選擇的是鉛筆Dim
myPen
AsNew
Pen<Me.btnSetColor.BackColor,
mWidth>
g.DrawLine<myPen,
pstart,
pend>
'根據(jù)起點和終點繪制直線Case
mSelect.Rec
'用戶在工具欄中選擇的是空心矩形
Convert_Point<>
'轉(zhuǎn)換矩形的起點為其左上點Dim
myPen
AsNew
Pen<Me.btnSetColor.BackColor,
mWidth>
g.DrawRectangle<myPen,
pstart.X,
pstart.Y,
_
pend.X
-
pstart.X,
pend.Y
-
pstart.Y>
'根據(jù)起點和終點繪制空心矩形Case
mSelect.FillRec
'用戶在工具欄中選擇的是填充矩形
Convert_Point<>
'轉(zhuǎn)換矩形的起點為其左上點Dim
rec
AsNew
Rectangle<pstart.X,
pstart.Y,
_
pend.X
-
pstart.X,
pend.Y
-
pstart.Y>
'根據(jù)起點和終點定義矩形Dim
sbr
AsNew
SolidBrush<btnSetColor.
BackColor>
'定義畫刷顏色為用戶選擇的顏色
g.FillRectangle<sbr,
rec>
'繪制填充矩形Case
mSelect.StyleRec
'用戶在工具欄中選擇的是風(fēng)格矩形
Convert_Point<>
'轉(zhuǎn)換矩形的起點為其左上點Dim
rec
AsNew
Rectangle<pstart.X,
pstart.Y,
_
pend.X
-
pstart.X,
pend.Y
-
pstart.Y>
'根據(jù)起點和終點定義矩形'
定義畫刷風(fēng)格為Cross型,前景色為白色,背景色為用戶選擇Dim
hbr
AsNew
HatchBrush<HatchStyle.Cross,
Color.White,
btnSetColor.BackColor>
g.FillRectangle<hbr,
rec>
'用畫刷填充矩形Case
mSelect.Ellipse
'用戶在工具欄中選擇的是空心橢圓
Convert_Point<>
'轉(zhuǎn)換橢圓外接矩形的起點為其左上點Dim
pen1
AsNew
Pen<btnSetColor.BackColor,
mWidth>
g.DrawEllipse<pen1,
pstart.X,
pstart.Y,
_
pend.X
-
pstart.X,
pend.Y
-
pstart.Y>
'根據(jù)橢圓外接矩形的起點和終點繪制橢圓Case
mSelect.FillEllipse
'用戶在工具欄中選擇的是填充橢圓
Convert_Point<>
'轉(zhuǎn)換橢圓外接矩形的起點為其左上點Dim
rec
AsNew
Rectangle<pstart.X,
pstart.Y,
_
pend.X
-
pstart.X,
pend.Y
-
pstart.Y>
'定義橢圓的外接矩形Dim
sbr
AsNew
SolidBrush<btnSetColor.
BackColor>
'定義畫刷顏色為用戶選擇的顏色
g.FillEllipse<sbr,
rec>
'用畫刷填充矩形Case
mSelect.StyleEllipse
'用戶在工具欄中選擇的是風(fēng)格橢圓
Convert_Point<>
'轉(zhuǎn)換橢圓外接矩形的起點為其左上點Dim
rec
AsNew
Rectangle<pstart.X,
pstart.Y,
_
pend.X
-
pstart.X,
pend.Y
-
pstart.Y>
'定義橢圓的外接矩形'
定義畫刷風(fēng)格為Cross型,前景色為白色,背景色為用戶選擇Dim
hbr
AsNew
HatchBrush<HatchStyle.Cross,
Color.White,
btnSetColor.BackColor>
g.FillEllipse<hbr,
rec>
'用畫刷填充矩形EndSelectEndIfEndSub〔10為PictrueBox的MouseMove〔鼠標(biāo)移動事件編寫代碼:PrivateSub
picPaint_MouseMove<ByVal
sender
As
System.Object,
_
ByVal
e
As
System.Windows.Forms.MouseEventArgs>
Handles
picPaint.MouseMove
If
e.Button
=
Windows.Forms.MouseButtons.Left
Then'如果用戶按下的是鼠標(biāo)左鍵,根據(jù)保存的mChoice繪制圖形SelectCase
mChoice
Case
mSelect.Pencil
'用戶在工具欄中選擇的是鉛筆Dim
pen1
AsNew
Pen<btnSetColor.BackColor,
mWidth>
pend.X
=
e.X
pend.Y
=
e.Y
g.DrawLine<pen1,
pstart,
pend>
pstart
=
pend
'將已經(jīng)繪制的終點作為下一次的繪制的起點Case
mSelect.Eraser
'用戶在工具欄中選擇的是橡皮Dim
myPen
AsNew
Pen<Color.White,
mWidth>
'定義白色畫筆作為擦除效果
pend.X
=
e.X
pend.Y
=
e.Y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024數(shù)控機床主軸可靠性加工過程的可靠性技術(shù)規(guī)范
- 《國際貿(mào)易學(xué)》大學(xué)題集
- 文書模板-無廢城市建設(shè)總結(jié)報告
- 小區(qū)物業(yè)管理服務(wù)方案
- 沙糖桔種植的果園成本費用核算-記賬實操
- 2024年四川省資陽市中考英語試題(含答案)
- 第7課《溜索》教學(xué)設(shè)計-2023-2024學(xué)年統(tǒng)編版語文九年級下冊
- 2024年電調(diào)收音機項目資金申請報告代可行性研究報告
- 貨物代理合作協(xié)議書(3篇)
- 幼兒園安全演練應(yīng)急預(yù)案范文(3篇)
- 實驗三十四 植物葉綠體色素的提取、分離、表征及含量測定
- 《西方經(jīng)濟學(xué)(精要本,第二版)》思考與練習(xí)解答
- 大連區(qū)域自然地理與地質(zhì)環(huán)境
- (完整版)人教版英語8年級(下冊)目錄及單元詳解經(jīng)典總結(jié)
- 《祝?!方虒W(xué)實錄1高品質(zhì)版
- 山東大學(xué)藥學(xué)院藥物化學(xué)教學(xué)大綱
- 巖石的結(jié)構(gòu)和構(gòu)造
- 兒童糖尿病ppt課件
- 整體機房維護方案及報價通用
- 安全員安全技術(shù)交底
- 《申報表作廢申請單》
評論
0/150
提交評論