《Visual Basic NET程序設(shè)計(jì)》課件第7章_第1頁
《Visual Basic NET程序設(shè)計(jì)》課件第7章_第2頁
《Visual Basic NET程序設(shè)計(jì)》課件第7章_第3頁
《Visual Basic NET程序設(shè)計(jì)》課件第7章_第4頁
《Visual Basic NET程序設(shè)計(jì)》課件第7章_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第7章SolidWorks基本概念

7.1圖形的繪制7.2圖形的瀏覽7.3動畫制作習(xí)題實(shí)驗(yàn)七動態(tài)托盤

7.1圖?形?的?繪?制

【案例7-1】

仿Windows畫圖程序。

本案例要求模仿Windows畫圖程序,有菜單欄和工具欄。單擊工具欄上的相應(yīng)按鈕選擇要畫的圖形;在畫筆顏色處單擊色塊調(diào)出調(diào)色板,選擇顏色;單擊畫筆寬度中需要的線條,以決定所畫邊框的粗細(xì)。將鼠標(biāo)移到繪圖區(qū)相應(yīng)的位置按住左鍵拖到適當(dāng)位置放開即繪出了相應(yīng)圖形。此案例的運(yùn)行界面如圖7-1所示。圖7-1仿Windows畫圖程序主界面

【技能目標(biāo)】

(1)熟悉Point/Pointf、Size/Sizef、Rectangle/Rectanglef對象。

(2)熟悉顏色、畫筆、畫刷的使用方法。

(3)熟悉Graphics的各種繪制圖形的方法。

(4)掌握圖形的平移變換、旋轉(zhuǎn)變換和比例變換的方法。

【操作要點(diǎn)與步驟】

(1)建立一個新的Windows應(yīng)用程序,命名為VBnet7-1。

(2)在窗體上添加如下控件:一個MainMenu控件設(shè)計(jì)菜單,一個ToolBar控件設(shè)計(jì)繪圖工具欄,一個PictureBox作為本程序畫板,兩個Label控件用于讓用戶選擇顏色和畫筆寬度標(biāo)志,五個Button控件用于選擇畫筆寬度,一個ColorDialog控件作調(diào)色板,一個ImageList控件,一個OpenFileDialog控件,一個StatusBar作為狀態(tài)信息欄。調(diào)整窗體上各控件的大小及位置。

(3)設(shè)置各控件的相關(guān)屬性,屬性值設(shè)置如表7-1所示。

為ImageList1控件添加圖標(biāo)的方法如下:

單擊ImageList1的Images屬性右側(cè)的“”按鈕,彈出如圖7-2所示的“Image集合編輯器”對話框,在窗口中單擊“添加”按鈕為ImageList1添加圖標(biāo)。

沒有設(shè)置屬性的控件其屬性均為默認(rèn)值,在以后的案例中屬性說明與此相同。

(4)為工具欄ToolBar控件添加按鈕。單擊ToolBar1控件的Buttons屬性右側(cè)的“”按鈕,彈出“ToolBarButton集合編輯器”,在窗口中單擊“添加”按鈕為ToolBarButton1添加按鈕,按鈕命名為ToolBarButton1~ToolBarButton10。圖7-2“Image集合編輯器”對話框除了ToolBarButton1的Pushed屬性為True外,其余按鈕的Pushed屬性均為False,即程序剛運(yùn)行時(shí),只有“鉛筆工具”的按鈕處于按下狀態(tài),默認(rèn)用戶選擇的是“鉛筆工具”。

(5)以上步驟完成了界面設(shè)計(jì)及控件屬性設(shè)置,這時(shí)就可進(jìn)行代碼編寫了。

●在Form1類里定義全局變量和mSelect枚舉變量。代碼如下:●?在Form1的Load事件中初始化全局變量和Graphics對象。代碼如下:●定義轉(zhuǎn)換坐標(biāo)起點(diǎn)和終點(diǎn)的過程Convert_Point(),確保起點(diǎn)始終在終點(diǎn)的左上方。代碼如下:●雙擊ToolBar1控件,編寫ToolBar1的ButtonClick事件代碼?!耠p擊lbcolor控件,進(jìn)入lbcolor的Click事件,選擇畫筆顏色。代碼如下:●編寫選擇畫筆寬度的共享事件過程btnpen_Click()的代碼?!駷?/p>

PictrueBox1的MouseDown(鼠標(biāo)按下)事件編寫代碼。

在Form1的代碼窗口中,在左側(cè)的對象下拉列表框中選擇PictureBox1,然后在右側(cè)的事件下拉列表框中選擇MouseUp,此時(shí)代碼編輯器中已經(jīng)自動生成了PictureBox1_MouseUp的事件碼,并把鼠標(biāo)定位于事件過程內(nèi)部的第一行。在該過程中編寫如下代碼:●為

PictrueBox1的MouseUp(鼠標(biāo)釋放)事件編寫代碼?!駷?/p>

PictrueBox1的MouseMove(鼠標(biāo)移動)事件編寫代碼?!駷?/p>

PictrueBox1的Mouse的Click(鼠標(biāo)單擊)事件編寫代碼。至此,基本代碼編寫完成,按F5鍵或工具欄上的運(yùn)行按鈕即可運(yùn)行程序,這時(shí)用戶就可以畫圖了。

【相關(guān)知識】

知識點(diǎn)7-1-1繪圖基礎(chǔ)知識

圖形程序設(shè)計(jì)需用到相關(guān)基礎(chǔ)支持類與結(jié)構(gòu),如常用點(diǎn)(Point)、矩形(Rectangle)、大小(Size)等Structure(結(jié)構(gòu))來表示范圍。

1.Point/Pointf結(jié)構(gòu)

Point/Pointf結(jié)構(gòu)主要用于設(shè)置控件在窗體中所在位置的坐標(biāo)點(diǎn),即表示一個二維(X,?Y)坐標(biāo)。二者的差別在于:Point使用整數(shù)坐標(biāo),而Pointf使用單精度浮點(diǎn)數(shù)據(jù)類型坐標(biāo)。

1)聲明方法

Point結(jié)構(gòu)聲明方法如下:

DimpAsNewPoint(整數(shù)X,整數(shù)Y)

例如,

DimpAsNewPoint(10,20)‘定義一個X坐標(biāo)是10,Y坐標(biāo)是20的點(diǎn)

Pointf結(jié)構(gòu)聲明與Point相似,即直接指定坐標(biāo)點(diǎn)X、Y的單精度浮點(diǎn)數(shù)值,方法如下:

DimpAsNewPointf(單精度浮點(diǎn)X,單精度浮點(diǎn)Y)

2)?Point結(jié)構(gòu)的其他屬性、方法與功能

(1)?Offset方法。功能是設(shè)置坐標(biāo)點(diǎn)位移。例如:

(2)?Equals方法。功能是表示如果兩個點(diǎn)的坐標(biāo)相同,則返回True,否則返回False。

(3)?IsEmpty屬性。功能是如果某點(diǎn)的X坐標(biāo)和Y坐標(biāo)都為0,則返回True,否則返回False。

例如,

DimxAsBoolean‘?定義一個邏輯變量x

DimpAsNewPoint(0,0)’?定義一個坐標(biāo)點(diǎn)為(0,0)的點(diǎn)

x=p.IsEmpty()

2.Size/Sizef結(jié)構(gòu)

Size/Sizef是GDI+?繪圖中經(jīng)常用到的結(jié)構(gòu),用Width(寬度)和Height(高度)兩個屬性來表示其大小。

聲明方法:

DimsAsNewSize(Width,Height)

3.Rectangle/Rectanglef結(jié)構(gòu)

Rectangle/Rectanglef結(jié)構(gòu)用來定義一個矩形區(qū)域,二者的區(qū)別在于Rectangle結(jié)構(gòu)的坐標(biāo)是整型,Rectanglef結(jié)構(gòu)的坐標(biāo)是浮點(diǎn)型。

1)聲明方法

Rectangle結(jié)構(gòu)聲明方法如下:

DimrAsNewRectangle(X,Y,Width,Height)

例如,創(chuàng)建一個左上角X坐標(biāo)是20,Y坐標(biāo)是30,寬度是10,高度是15的矩形,其代碼如下:

DimrecAsNewRectangle(20,30,10,15)

2)?Rectangle結(jié)構(gòu)的主要屬性、方法和功能

Rectangle結(jié)構(gòu)的主要屬性、方法和功能見表7-2。

與VB6.0一樣,在VB.NET中也是以所在控件容器的最左且最上一點(diǎn)作為坐標(biāo)系統(tǒng)原繪圖基礎(chǔ)知識:顏色、畫筆和畫刷知識點(diǎn)7-1-2點(diǎn)的。

知識點(diǎn)7-1-2繪圖基礎(chǔ)知識:顏色、畫筆和畫刷

1.顏色

顏色是繪圖功能中非常重要的一部分,在VB.NET中顏色用Color結(jié)構(gòu)和Color列舉來表示。Color結(jié)構(gòu)中顏色由4個整數(shù)值Red、Green、Blue和Alpha表示。其中,Red、Green、Blue可簡寫成R、G、B,表示顏色的紅、綠、藍(lán)三原色;Alpha表示不透明度。

1)使用FromArgb方法設(shè)置顏色

語法格式:Color.FromArgb([A,]R,G,B)。

功能:由透明度、紅、綠、藍(lán)來調(diào)配顏色。

說明:A表示透明參數(shù),其值為0~255,數(shù)值越小越透明。0表示全透明,255表示完全不透明。A可缺省,其默認(rèn)值為255。R、G、B為顏色參數(shù),不可缺省。(R,G,B)合成原理如圖7-3如示。

例如:

(255,0,0)為紅色;

(0,255,0)為綠色;

(0,0,255)為藍(lán)色;

(255,0,255)為紫色。圖7-3顏色合成原理圖

2)獲取Color結(jié)構(gòu)的各顏色分量值

VB.NET中可獲取對象Color的四個自變量的值,其語法如下:

R=對象.Color.R

G=對象.Color.G

B=對象.Color.B

例如,取出PictureBox1控件背景的R自變量值。

R=PictureBox1.BackColor.R

3)用Color列舉設(shè)置顏色

使用Color列舉可直接指定系統(tǒng)定義的顏色,這些被定義的顏色均用英文命名,有140多個,常用的有Red、Green、Blue、Yellow、Brown、White、Gold、Tomato、Pink、SkyBlue、Orange等。使用語法如下:

Color.?顏色列舉名稱

例如,將Button1控件背景設(shè)置成粉藍(lán)色。

Button1.BackColor=Color.Blue

Color列舉顏色不必背誦記憶,在編輯程序代碼時(shí),只要輸入“Color.”,系統(tǒng)會自動列出這些英文名稱,程序員選擇其中之一即可。

2.畫筆

畫筆(Pen)可在Graphics畫布對象上繪制圖形,只要指定畫筆對象的顏色與粗細(xì),配合相應(yīng)的繪圖方法,就可繪制圖形形狀、線條和輪廓。畫筆類中封裝了線條寬度、線條樣式和顏色等。

1)?Pen類的主要屬性

Alignment屬性:獲取或設(shè)置畫筆繪制對象的對齊方式。

Color屬性:獲取或設(shè)置畫筆的顏色。

DashStyle屬性:線條所使用的破折號樣式。

PenType屬性:線條使用的畫筆類型。

Width屬性:獲取或設(shè)置畫筆的寬度。

2)聲明畫筆對象

聲明畫筆對象有兩種方式,語法如下:

Dim畫筆對象AsNewPen(顏色[,粗細(xì)])

Dim畫筆對象AsPen

畫筆對象=AsNewPen(顏色[,粗細(xì)])

例如,

DimmpenAsNewPen(Color.Red)‘?創(chuàng)建顏色為紅色的畫筆

當(dāng)缺省畫筆粗細(xì)自變量時(shí),系統(tǒng)默認(rèn)為1Pixel(像素)。

3)重新設(shè)置畫筆對象的顏色與粗細(xì)

語法如下:

畫筆對象.Color=顏色

畫筆對象.Width=粗細(xì)

3.畫刷

畫筆對象用于描繪圖形的邊框和輪廓。若要填充圖形的內(nèi)部,則必須使用畫刷(Brush)對象。使用畫刷對象時(shí),也要配合FillRectangle、FillPolygon、FillEllipse、FillPie等繪圖方法。

GDI+?提供了幾種不同形式的畫刷,如SolidBrush、TextureBrush、HatchBrush等。這些畫刷都是從System.Drawing.Brush基類中派生出來的。

1)?SolidBrush畫刷

這種畫刷指定了填充區(qū)域的顏色,是最簡單的一種。其創(chuàng)建方法如下:

DimbrAsSolidBrush=NewSolidBrush(Color.Yellow)‘?定義黃色填充

2)TextureBrush畫刷

這種畫刷定義了用圖形填充圖像內(nèi)部區(qū)域的刷子,它可以用Image屬性或其構(gòu)造函數(shù)來定義畫刷填充的圖像。創(chuàng)建方法如下:

DimbmAsNewBitmap(“star.ico”)’指定填充的位圖

DimbrushAsNewTextureBrush(bm)

3)?HatchBrush畫刷

這是一種復(fù)雜的畫刷,它通過繪制一種樣式來填充區(qū)域,創(chuàng)建方法如下:

DimbrushAsNew

HatchBrush(HatchStype.Cross,

Color.White,Color.Black)

其中,第一個參數(shù)是畫刷的填充樣式;第二個參數(shù)定義了填充的前景色;第三個參數(shù)定義了填充的背景色。

使用HatchBrush對象前,需要先導(dǎo)入System.Drawing.Drawing2D命名空間,即在代碼開頭加上ImportSystem.Drawing.Drawing2D。知識點(diǎn)7-1-3

Graphics類、Graphics的常用繪圖方法

1.Graphics類

通常繪圖時(shí),畫布是必需的。在VB.NET中進(jìn)行計(jì)算機(jī)繪圖時(shí)同樣需要類似的畫布,然后再使用畫筆或畫刷配合相應(yīng)的繪圖方法作畫。Graphics類可用來建立一個畫布對象,還可清理和釋放畫布對象。

1)聲明和建立畫布對象

語法如下:

Dim畫布對象AsGraphics

畫布對象=對象.CreateGraphics()

上述語句的功能為:在指定的控件或?qū)ο笾薪⒁粋€可以用繪圖對象繪圖的畫布對象。

例如,在窗體內(nèi)建立一個名叫g(shù)的畫布對象。

DimgAsGraphics

g=Form1.CreateGraphics()

如果畫布對象放置在當(dāng)前窗體上,則當(dāng)前窗體名可省略,即使用g=CreateGraphics()。

2)清理畫布對象

若需將畫布對象的內(nèi)容清理,則只要設(shè)置畫布對象的底色即可,可使用下面的語法:

畫布對象?.Clear(顏色)

說明:顏色可以使用Color對象類或Color列舉。

例如,將畫布對象清理為粉色。

g.Clear(Color.Pink)

若將畫布清理為原控件的底色,則可用“對象.Refresh()”語句。

例如,清理目前在窗體上所繪制的圖形。

Refresh()清理目前在圖片控件PictureBox1上所繪制的圖形。

pictureBox1.Refresh()

3)釋放畫布對象

可以用Graphics類的Dispose函數(shù)釋放用CreateGraphics()創(chuàng)建的Graphics對象的資源。在調(diào)用Dispose函數(shù)后,畫布對象將從內(nèi)存中刪除,不能再被使用。

語法:

畫布對象?.Dispose()

例如,刪除畫布對象g。

g.Dispose()

2.Graphics的常用繪圖方法

在VB.NET中,Graphics類提供了很多繪圖方法,下面具體介紹。

以下舉例均在已定義畫布對象g的情況下。

1)畫線(DrawLine)方法

語法:

DrawLine(畫筆,起點(diǎn)Point,終點(diǎn)Point)

DrawLine(畫筆,起點(diǎn)X坐標(biāo),起點(diǎn)Y坐標(biāo),終點(diǎn)X坐標(biāo),終點(diǎn)Y坐標(biāo))例如,繪制一條起點(diǎn)坐標(biāo)為(0,0),終點(diǎn)坐標(biāo)為(150,150)的直線,代碼如下:

Dimpt1AsPoint(0,0)

Dimpt2AsPoint(150,150)

g.DrawLine(pen1,pt1,pt2)‘或g.DrawLine(pen1,0,0,150,150)

2)?DrawRectangle方法

語法:

DrawRectangle(畫筆,Rectangle對象)

例如,畫一個左上角坐標(biāo)為(10,10),寬度為100,高度為200的矩形,代碼如下:

Dimpen1AsNewPen(Color.Red)

DimsAsNewSize(100,200)

DimptAsNewPoint(10,10)

DimrecAsNewrectangle(pt,s)

g.DrawRectangle(pen1,rec)

3)?DrawEllipse方法

語法:

DrawEllipse(畫筆,橢圓的外接矩形)

DrawEllipse(畫筆,橢圓的外接矩形左上角X坐標(biāo),Y坐標(biāo),外接矩形寬度,高度)

功能:繪制空心橢圓/圓。

繪制橢圓時(shí)各參數(shù)如圖7-4所示。圖7.4繪制橢圓例如,繪制外接矩形左上角坐標(biāo)為(10,10),橢圓寬度為200,高度為300的橢圓,代碼如下:

DimsAsNewSize(200,300)

DimptAsNewPoint(10,10)

DimrecAaNewRectangle(pt,s)

g.DrawEllipse(pen1,rec)

下面是上例的等效代碼:

Dimx,y,width,heightasInteger

X=10

Y=10

Width=200

Height=300

g.DrawEllipse(pen1,x,y,width,height)

Graphics類中沒有專門用來繪制圓的函數(shù),可以用DrawEllipse來實(shí)現(xiàn)。若外接矩形是正方形,則繪制的是圓。

4)其他幾種常用方法

其他幾種常用方法的語法與功能如表7-3所示。

5)?DrawString方法

語法:

DrawString(文本,字體,畫刷,X坐標(biāo),Y坐標(biāo))

功能:繪制字符串文本。

例如,

DimbrushAsNewSolidBrush(Color.Black)‘定義畫刷

Dimfont1AsNewFont(’ArialBlack‘,36)’定義字體

g.DrawString(''WelcometoVB.NET!'',font1,brush,30,100)

6)填充方法

畫刷配合填充方法可以填滿圖形內(nèi)部顏色,Graphics類的填充方法有FillRectangle、FillEllipse、FillPolygon、FillClosedCurve、FillPie等。它們與Draw開頭的方法一一對應(yīng),輸入?yún)?shù)也與相應(yīng)的Draw方法一致,其語法定義如下:

FillRectangle(畫刷,矩形) ‘?填充矩形

FillEllipse(畫刷,橢圓的外接矩形) ’?填充橢圓

FillPolygon(畫刷,坐標(biāo)點(diǎn)數(shù)組) ‘?填充多邊形

FillClosedCurve(畫刷,坐標(biāo)點(diǎn)數(shù)組) ’?填充封閉曲線

FillPie(畫刷,橢圓外接矩形,開始角度,掃過角度) ‘?填充扇形

例如,以下是一個填充實(shí)例。

DimbrushAsNewSolidBrush(Color.Black)

DimrecAsNewRectangle(10,10,50,80)

g.FillRectangle(brush,rec)‘填充矩形

Dimpt(5)AsPoint

pt(1)=NewPoint(50,100)

pt(2)=NewPoint(100.200)

pt(3)=NewPoint(10,400)

pt(4)=NewPoint(50,200)

pt(5)=NewPoint(50,100)

g.FillPolygon(brush,pt)’填充多邊形

DimstattAngleAsSingle=0.0F

DimsweepAngleAsSingle=135.0F

DimrecaAsNewRectangle(200,10,100,100)

g.FillPie(brush,rec1,startAngle,sweepAngle)'填充扇形

3.坐標(biāo)變換

坐標(biāo)變換是GDI+提供的一項(xiàng)重要功能。在畫布上繪制圖形之前,若做畫布平移、縮放和旋轉(zhuǎn)變換,則之后在畫布上所繪制的圖形均隨畫布而變換,可以獲得很生動的效果。例如,畫布旋轉(zhuǎn)45°后,在畫布上的正方形在屏幕上呈現(xiàn)的是菱形。

1)平移(TranslateTransform方法)

語法:

?TranslateTransform(X軸方向偏移量,Y軸方向偏移量)

功能:用指定的X軸方向和Y軸方向的偏移量進(jìn)行偏移。若X、Y為正值,則畫布向右和向下平移;若X、Y為負(fù)值,則畫布向左和向上移動。例如,將原來的圖形按X軸向右平移100像素,按Y軸向下平移150像素。

g.TranslateTransform(100,150)

2)旋轉(zhuǎn)(RotateTransform方法)

語法:

?RotateTransform(旋轉(zhuǎn)角度)

功能:旋轉(zhuǎn)變換是指相對坐標(biāo)原點(diǎn)旋轉(zhuǎn)指定的角度,旋轉(zhuǎn)方向以順時(shí)針為正。

例如,使以后繪制的圖形皆旋轉(zhuǎn)15°。

g.RotateTransform(15)

3)比例(ScaleTransform)

語法:

ScaleTransform(X軸比例,Y軸比例)

功能:比例變換是指用指定的X軸和Y軸的比例對圖形進(jìn)行變換,即設(shè)置畫布的縮放比例。

例如,使以后繪制的圖形皆為寬度放大為原來的3倍,高度縮小為原來的一半。

g.ScaleTransform(3,0.5)

4.繪制圖形的一般步驟

在創(chuàng)建一個Graphics對象后,就可以用Graphics類的方法在窗體上繪制基本圖形了。通常,在VB.NET中繪制圖形包括以下幾點(diǎn):

(1)使用顏色。顏色是繪圖必要的因素,因此繪圖前需要先定義顏色,顏色可以使用Color結(jié)構(gòu)中自定義的顏色,也可以通過FromArgb()方法來創(chuàng)建RGB顏色。

(2)使用畫筆。根據(jù)需要可對畫筆的屬性進(jìn)行設(shè)置,例如Pen的Color屬性可以設(shè)置畫筆的顏色,DashStyle屬性可設(shè)置Pen的線條樣式。

(3)使用畫刷。創(chuàng)建畫刷有多種方式,可以創(chuàng)建SolidBrush、HatchBrush、TextureBrush等,前面已作過詳細(xì)說明。

(4)使用Graphics類提供的函數(shù)繪圖。Graphics類提供的繪圖方法包括以下幾大類:線條、矩形、多邊形、圓、橢圓、圓弧、貝濟(jì)埃曲線、字符串、圖標(biāo)和圖像。

(5)釋放資源。要釋放程序中創(chuàng)建的Graphics、Pen、Brush等資源,調(diào)用該對象的Dispose()方法即可。如果不調(diào)用Dispose方法,則系統(tǒng)自動回收這些資源,但釋放資源的時(shí)間會滯后。

【知識擴(kuò)展】

1.VB.NET的自定義數(shù)據(jù)類型——結(jié)構(gòu)

1)結(jié)構(gòu)的定義

在VB.NET中,用戶可自定義數(shù)據(jù)類型(User-DefinedTyepes,UDT),定義時(shí)使用關(guān)鍵字Structure,其語法如下:

Structure結(jié)構(gòu)名

Public|Dim|Private類型成員

EndStructure

在Structure內(nèi)部聲明類成員時(shí),可使用Public、Dim和Private。Structure內(nèi)部的Dim和Public同義,都可以通過變量訪問其成員數(shù)據(jù)。例如,前面介紹的point結(jié)構(gòu)定義如下:

2)結(jié)構(gòu)與類的比較

VB.NET統(tǒng)一了結(jié)構(gòu)和類的語法,它們都支持大多數(shù)的相同功能,但結(jié)構(gòu)和類之間也有重要的區(qū)別。

(1)結(jié)構(gòu)和類的主要相同之處。

●兩者都屬于“容器”類型,表示它們可以包含其他類型作為成員。兩者都具有成員,成員可以包括構(gòu)造函數(shù)、方法、屬性、字段、常數(shù)、枚舉、事件和事件處理程序。此外,兩者都可實(shí)現(xiàn)接口。

●都有共享的構(gòu)造函數(shù)。兩者都可以公開默認(rèn)屬性,只要該屬性至少帶有一個參數(shù);都可以聲明和引發(fā)事件,而且兩者都可以聲明委托。

(2)結(jié)構(gòu)與類的主要不同之處。

●結(jié)構(gòu)是值類型,而類是引用類型。結(jié)構(gòu)是不可繼承的,而類是可以繼承的。

●所有的結(jié)構(gòu)成員都默認(rèn)為Public,類變量和常量默認(rèn)為Private,而其他的類成員默認(rèn)為Public。類成員的這一行為與VB6.0默認(rèn)值系統(tǒng)兼容。

●結(jié)構(gòu)變量聲明不能指定初始值、New關(guān)鍵字或數(shù)組初始大小,類變量聲明可以。

●結(jié)構(gòu)從不終止,所以公共語言運(yùn)行庫(CLR)從不在任何結(jié)構(gòu)上調(diào)用Finalize方法;類可由垃圾回收器終止,當(dāng)檢測到?jīng)]有剩下的活動引用時(shí),垃圾回收器將在類上調(diào)用Finalize?!窠Y(jié)構(gòu)不需要構(gòu)造函數(shù),而類需要。結(jié)構(gòu)僅當(dāng)沒有參數(shù)時(shí)可以有非共享的構(gòu)造函數(shù);類無論有沒有參數(shù)都可以。

每一個結(jié)構(gòu)都有不帶參數(shù)的隱式公共構(gòu)造函數(shù)。此構(gòu)造函數(shù)將結(jié)構(gòu)的所有數(shù)據(jù)成員初始化為默認(rèn)值。不能重定義此行為。

2.GDI+?簡介

VB.NET具有相當(dāng)強(qiáng)大的圖形圖像功能,在對原有GDI(GraphicDeviceInterface)技術(shù)進(jìn)行改進(jìn)后,形成了現(xiàn)在集成在VB.NET中的GDI+?技術(shù)。Windows窗體可看做是一塊畫板,畫筆、畫刷等是繪畫的工具,用戶只有通過GDI+?這個接口才可使用這些工具。

GDI+?是圖形設(shè)備接口,它負(fù)責(zé)在屏幕和打印機(jī)上顯示信息,程序員可利用它來編寫與設(shè)備無關(guān)的應(yīng)用程序。GDI+?是GDI的后續(xù)版本,它使程序開發(fā)人員不必考慮不同顯卡之間的區(qū)別,可直接調(diào)用WindowsAPI函數(shù)繪制圖形。

WindowsAPI是Windows操作系統(tǒng)的應(yīng)用程序接口,它提供了能操作Windows操作系統(tǒng)的底層函數(shù),存放在系統(tǒng)的3個dll(動態(tài)鏈接庫)文件中。其中,GDI32.dll用于存放圖形函數(shù);Kernel.dll用于存放較底層的操作系統(tǒng)函數(shù);User32.dll用于提供窗口管理函數(shù)。

GDI+?由?.NET類庫中System.Drawing命名空間下的很多類組成,這些類包括在窗體上繪圖的必需功能,可以在屏幕上完成對文本和位圖的繪制,也可以控制字體、顏色、線條粗細(xì)、陰影、方向等因素,并把這些操作發(fā)送到顯示卡上,確保在顯示器上正確輸出。

GDI+?對GDI進(jìn)行了重新封裝,使之成為更直觀的面向?qū)ο竽P?,此外,GDI+比GDI提供了一些新的功能,在性能方面也作了改進(jìn),更加簡單易用。

GDI+?技術(shù)把打印機(jī)與屏幕看做是同樣的輸出設(shè)備,當(dāng)要進(jìn)行打印時(shí),只需通知系統(tǒng)此時(shí)的輸出設(shè)備是打印機(jī),再調(diào)用與屏幕繪圖時(shí)相同的函數(shù)即可。GDI+?提供的主要命名空間如下:

System.Draw.Desing命名空間:包括一些預(yù)定義的對話框、屬性框等界面對象。

System.Draw.Drawing2D命名空間:提供高級的二維和矢量圖形功能。

System.Draw.Image命名空間:提供圖像處理的各種類。

System.Draw.Printing命名空間:將圖像輸出到打印機(jī)或打印預(yù)覽時(shí)使用的類。

System.Draw.Text命名空間:該命名空間中的類允許用戶創(chuàng)建和使用多種字體。

7.2圖?形?的?瀏?覽

VB.NET不僅具有強(qiáng)大的圖形繪制功能,而且可以多種方式瀏覽圖形,有很強(qiáng)的圖像處理能力。

【案例7-2】

仿圖形瀏覽器。

此圖像瀏覽器在案例7-1的基礎(chǔ)上制作。其運(yùn)行界面如圖7-5所示。在左邊的樹型目錄結(jié)構(gòu)中選擇文件夾,在右邊的上方顯示所選文件夾中的圖像文件。雙擊某圖像文件,在右下方顯示該文件。圖7-5圖像瀏覽主界面

【技能目標(biāo)】

(1)熟悉圖形瀏覽器開發(fā)過程。

(2)進(jìn)一步掌握PictureBox、TreeView、ListView控件的應(yīng)用。

【操作要點(diǎn)與步驟】

(1)建立一個新的Windows應(yīng)用程序,命名為VBnet7-2。

(2)在窗體中添加控件:一個TreeView控件(用于顯示計(jì)算機(jī)系統(tǒng)的樹型目錄結(jié)構(gòu))、一個ListView控件(用于顯示所選擇文件夾中文件)、一個PictureBox控件(用于顯示所選圖像文件)、一個StatusBar控件(用于顯文件所在路徑及有關(guān)信息)。調(diào)整各控件的大小及位置。

此案例可在案例7-1的基礎(chǔ)上直接修改得到,即將其中的RichTextBox控件改換成PictureBox控件。

(3)設(shè)置各控件的相關(guān)屬性,如表7-4所示。

其他控件的屬性見案例7-1屬性設(shè)置。

(4)至此,各控件屬性設(shè)置完畢,可進(jìn)行代碼的編寫。

在此僅給出ListView1控件的DoubleClick事件代碼,其他代碼與案例7-1中相同。代碼編寫完畢,按F5鍵或工具欄上的運(yùn)行按扭可調(diào)試運(yùn)行程序。

【相關(guān)知識】

知識點(diǎn)7-2-1

PicturBox控件的使用

PictureBox控件主要用于加載圖片,所支持的圖形文件格式有位圖(.bmp)、GIF格式(包括GIF動畫及背景透空的靜態(tài)圖)、JPEG圖形格式、矢量圖形格式(.wmf)和圖標(biāo)格式(.ico)。PictureBox控件中顯示的圖片可以在設(shè)計(jì)階段加載,或在程序執(zhí)行時(shí)再加載。其常用屬性說明如表7-5所示。設(shè)置圖片源需要使用Image類的FromFile方法,也可利用屬性窗口直接設(shè)置圖片源文件。如果想要執(zhí)行圖片的“另存為”操作,則可以使用Image類的Save方法并指定存儲路徑、名稱以及格式。

PictureBox可以配合Dock或Anchor屬性使用,如將Dock屬性設(shè)置為“Fill”,PictureBox就會填充整個窗體,也會自動隨著窗體的變化而改變大小。

【案例7-3】

圖形變換顯示。

此案例要求在原圖形區(qū)顯示未經(jīng)變換的圖形,單擊界面中的傾斜、翻轉(zhuǎn)和鏡像按鈕,在變換后圖形區(qū)顯示相應(yīng)變換后的圖形。單擊“退出”按鈕,結(jié)束程序運(yùn)行。運(yùn)行界面如圖7-6所示。圖7-6圖像變換效果圖

【技能目標(biāo)】

(1)理解圖形變換的概念。

(2)掌握圖形變換程序的設(shè)計(jì)思路和技巧。

【操作要點(diǎn)與步驟】

(1)建立一個新的Windows應(yīng)用程序,命名為VBnet7-3。

(2)在窗體中添加控件:2個Label控件(用于顯示兩個圖形區(qū))、2個Panel控件(用于顯示原圖和變換后的圖形)和3個Button命令按鈕控件(用于控制圖形變換方式和結(jié)束程序運(yùn)行)。調(diào)整各控件的位置及大小。

(3)設(shè)置各控件的屬性,如表7-6所示。

(4)編寫代碼。首先在Form1類中定義變量,如下所示:

Dimpic1,pic2AsBitmap

DimflagAsInteger=0‘用于標(biāo)志選擇哪種圖形變換

●為Form1的Load事件編寫代碼,如下所示:

PrivateSubForm1_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.Load

Panel1.Height=Panel1.Width

Panel2.Width=Panel1.Width

Panel2.Height=Panel2.Width

DimpicAsImage=Image.FromFile(“strawberry.jpg”)

pic1=NewBitmap(pic,Panel1.Width,Panel1.Height)

pic2=NewBitmap(pic1)

EndSub

將圖形文件放置在bin文件夾內(nèi),直接指定圖形文件即可,當(dāng)然也可放置在其他文件夾中,但必須指明文件夾。

●為Panel1的Paint事件編寫代碼,如下所示:

PrivateSubPanel1_Paint1(ByValsenderAsObject,ByValeAs_

System.Windows.Forms.PaintEventArgs)HandlesPanel1.Paint

DimgAsGraphics=e.Graphics

g.DrawImage(pic1,0,0)

EndSub●為Panel2的Paint事件編寫代碼,如下所示:●為Button3的Click事件編寫代碼,如下所示:

PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton3.Click

End

EndSub

至此代碼編寫完成,按F5鍵或工具欄上的運(yùn)行按鈕即可運(yùn)行程序。

【相關(guān)知識】

知識點(diǎn)7-2-2

Bitmap類及方法與Panel控件及方法

1.Bitmap

Bitmap類封裝GDI+?位圖,此位圖由圖形圖像及其屬性的像素?cái)?shù)據(jù)組成。Bitmap對象是用于處理由像素?cái)?shù)據(jù)定義的圖像的對象。

方法GetPixl:獲取此Bitmap中指定像素的顏色。

方法SetPixel:設(shè)置Bitmap對象中指定像素的顏色。

2.Panel控件

Panel是一個包含其他控件的控件(也稱面板)。可以使用Panel來對窗體界面上的控件進(jìn)行適當(dāng)?shù)倪壿嫹纸M。例如,一組單選按鈕組成的性別組和一組復(fù)選框組成的愛好組就可以用兩個Panel來區(qū)分。與其他容器控件(如GroupBox控件)一樣,如果Panel控件的Enabled屬性設(shè)置為False,則也會禁用包含在Panel中的控件。

在默認(rèn)情況下,Panel控件在顯示時(shí)沒有任何邊框??梢杂肂orderStyle屬性提供標(biāo)準(zhǔn)或三維的邊框,將窗面板區(qū)與窗體上的其他區(qū)域分開。因?yàn)镻anel控件派生于ScrollableControl

類,所以可以用AutoScroll屬性來啟用Panel控件中的滾動條。當(dāng)AutoScroll屬性設(shè)置為True時(shí),使用提供的滾動條可以滾動顯示Panel中(但不在其可視區(qū)域內(nèi))的所有控件。

Invalidate方法:使控件的特定區(qū)域無效并向控件發(fā)送繪制消息。

PointToScreen方法:將指定工作區(qū)中點(diǎn)的位置計(jì)算成屏幕坐標(biāo)。

Panel控件類似于GroupBox控件,但只有Panel控件可以有滾動條,而且只有GroupBox控件顯示標(biāo)題。

7.3動畫制作

應(yīng)用基本的繪圖命令和適當(dāng)?shù)睦L圖模式可以制作各種動畫效果。另外,利用時(shí)間變化更換不同的圖像順序或移動圖形位置也可以產(chǎn)生動畫效果。

【案例7-4】

小向?qū)А?/p>

這個案例要求使用Graphics對象的FillPie命令繪制出缺口大小不同的扇形圖,再利用時(shí)間事件來控制扇形圖位置的變化,產(chǎn)生類似小向?qū)赢嫷囊曈X效果。運(yùn)行界面如圖7-7所示。圖7-7小向?qū)н\(yùn)行界面

【技能目標(biāo)】

(1)理解簡單動畫開發(fā)過程。

(2)熟悉利用時(shí)間變化和繪圖命令設(shè)計(jì)動畫程序的技巧。

【操作要點(diǎn)與步驟】

(1)建立一個新的Windows應(yīng)用程序,命名為VBnet7-4。

(2)在窗體中添加控件:添加一個Label標(biāo)簽控件,用于顯示小向?qū)У臉?biāo)題;添加一個Timer時(shí)間控件,用于控制扇形圖形位置的變化速度;添加一個Button命令按鈕,用于停止程序的運(yùn)行。調(diào)整窗體及控件的大小與位置。

(3)設(shè)置控件屬性,其值如表7-7所示。

Timer1的Enabled屬性值為True,表示啟用Elapsed事件;Interval屬性值為150,單位是毫秒,表示Elapsed事件的頻率,值越小,變化得越快,反之越慢。

(4)編寫代碼。

●首先在Form1類中定義變量,代碼如下:

Dimsw,statusAsInteger

Dimx,y,rAsInteger

Dimrx,ry,rswAsInteger

Dimra(2)AsInteger

Dimrb(2)AsInteger

Dimg2AsGraphics

●為Form1的Load事件編寫代碼,設(shè)置初始值,代碼如下:●為Timer控件的Tick事件編寫代碼,在不同的時(shí)間間隔內(nèi)于不同位置繪制不同缺口的扇形,并且一直從右往左循環(huán)運(yùn)動直到停止運(yùn)行。代碼如下:

PrivateSubTimer1_Tick(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesTimer1.Tick

g2.Clear(Color.White)

g2.FillPie(Brushes.Blue,x,y,r,r,ra(sw),rb(sw))

rx=x:ry=y:rsw=sw

sw=1-sw

x=x-10 ‘?變換坐標(biāo)位置

Ifx<10Thenx=300

EndSub●為Button1控件編寫代碼,當(dāng)單擊此按鈕時(shí),結(jié)束程序運(yùn)行。代碼如下:

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton1.Click

End

EndSub

EndClass

至此,程序編寫完成,按F5鍵或工具欄中的運(yùn)行按鈕即可執(zhí)行程序?!鞠嚓P(guān)知識】

知識點(diǎn)7-3-1利用Graphics類的基本繪圖命令與Timer控件制作小動畫

VB.NET不僅有強(qiáng)大的繪制圖形功能,能夠利用Graphics類的基本繪圖命令制作出豐富多彩的靜態(tài)圖形,而且能讓靜止的圖形隨著時(shí)間變化發(fā)生位置與形狀的改變,產(chǎn)生形象生動的動畫效果。

在動畫制作過程中,時(shí)間變化是由Timer控件來實(shí)現(xiàn)的,其中,Interval屬性值的大小與動畫運(yùn)行的速度相關(guān),間隔越小,速度越快。

【案例7-5】

移動動畫。

移動動畫是簡單的動畫技巧,利用Graphics對象的DrawImage方法可以顯示圖像文件,配合Timer時(shí)間的變化,就可以改變圖像坐標(biāo),產(chǎn)生移動動畫效果。

【案例說明】

本案例使用圖像文件的運(yùn)動產(chǎn)生動畫效果。程序運(yùn)行時(shí),花的圖案作為背景,小女孩圖案從右到左移動,反復(fù)運(yùn)動,直至停止。運(yùn)行界面如圖7-8所示。圖7-8移動動畫運(yùn)行界面

【技能目標(biāo)】

(1)熟悉簡單動畫開發(fā)過程。

(2)熟悉利用圖形文件設(shè)計(jì)動畫程序的技巧。

【操作要點(diǎn)與步驟】

(1)建立一個新的Windows應(yīng)用程序,命名為VBnet7-5。

(2)在窗體中添加控件:添加一個PictureBox控件,用于顯示圖形文件;添加一個Timer時(shí)間控件,用于設(shè)置動畫頻率。調(diào)整窗體及各控件的大小與位置。

(3)設(shè)置控件屬性,屬性值如表7-8所示?!駷門imer1控件的Tick事件編寫代碼。

PrivateSubTimer1_Tick(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesTimer1.Tick

g2.DrawImage(image1,0,0)

px=10

g2.DrawImage(image2,NewPoint(px,py))

Ifpx<5Thenpx=300

EndSub

至此代碼編寫完成,按F5鍵或工具欄上的運(yùn)行按鈕運(yùn)行程序。

【相關(guān)知識】

知識點(diǎn)7-3-2利用圖形文件與Timer控件制作小動畫

VB.NET中可使用Graphics類的DrawImage方法顯示圖形文件,在不同時(shí)間間隔里于不同的位置顯示同一圖形文件會產(chǎn)生視覺上的動畫效果。DrawImage方法既可指定目的繪圖區(qū),也可指定源圖片的顯示范圍,具備自動縮放功能,會自動將圖片放大或縮小以填滿指定的整個區(qū)域。該法主要有以下幾種使用方式:

●?DrawImage(Image對象,x,y);

●?DrawImage(Image對象,Point結(jié)構(gòu));

●?DrawImage(Image對象,目的Rectangle結(jié)構(gòu));

●?DrawImage(Image對象,x,y,源Rectangle結(jié)構(gòu),圖形單位);

●?DrawImage(Image對象,目的Rectangle結(jié)構(gòu),源Rectangle結(jié)構(gòu),圖形單位)。習(xí)題

一、單項(xiàng)選擇

1.HatchBrush畫刷類定義在_____命名空間。

A.?System.Drawing.Design

B.?System.Drawing.Image

C.?System.Drawing.Text

D.?System.Dr

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論