版權(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
提交評論