Visual Basic程序設(shè)計導(dǎo)學(xué)06參考模板_第1頁
Visual Basic程序設(shè)計導(dǎo)學(xué)06參考模板_第2頁
Visual Basic程序設(shè)計導(dǎo)學(xué)06參考模板_第3頁
Visual Basic程序設(shè)計導(dǎo)學(xué)06參考模板_第4頁
Visual Basic程序設(shè)計導(dǎo)學(xué)06參考模板_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章 圖形程序設(shè)計Windows本身就具有良好的圖形用戶界面(GUI),Windows下的應(yīng)用程序的一個重要特色就是圖形處理。VB提供了非常靈活的圖形功能。不僅可以通過圖形控件進行圖形和繪圖操作,還可以通過圖形方法在窗體或圖片框上輸出文字和圖形。本章將主要介紹有關(guān)圖形程序設(shè)計的基本知識與方法。6.1 圖形顯示與繪圖控件在VB中,進行圖形處理主要有三種方式:· 顯示已經(jīng)存在的圖形· 使用繪圖控件繪制圖形· 用繪圖方法繪制圖形6.1.1 顯示圖形文件圖形文件可在窗體、圖片框控件和圖像控件這三種對象上顯示。圖形文件可來自各種繪圖程序,VB支持.bmp,.dib,.ic

2、o,.cur,.wmf,.emf,.jpg和.gif等格式的圖形文件。· Bitmap(位圖) 將圖像定義為點(像素)的圖案。位圖的文件擴展名是.bmp或.dib,可用多種顏色深度(包括2,4,8,16,24和32位),視當前的顯示設(shè)備而定。例如,每像素8位(256色)的位圖在每像素4位(16色)的設(shè)備上只能顯示出16種顏色。· Icon(圖標) 是特殊類型的位圖。圖標的最大尺寸為32像素×32像素,但在 Windows 95下,圖標也可為16×16像素大小。圖標的文件擴展名為.ico。· Metafile(圖元文件) 將圖形定義為編碼的線段和

3、圖形。普通圖元文件擴展名為.wmf。增強型圖元文件擴展名為.emf。· JPEG 是一種支持8位和24位顏色的壓縮位圖格式。它是Internet上一種流行的文件格式。· GIF 最初是由CompuServe開發(fā)的一種壓縮位圖格式。它可支持多達256種的顏色,是Internet上一種流行的文件格式。1. 圖形顯示控件VB中的圖形顯示控件有Image控件和PictureBox控件。· Image控件135 / 33Image(圖像)控件只能用于顯示已有的圖形。顯示圖形時,可通過設(shè)置其Picture屬性來實現(xiàn),既可在設(shè)計時設(shè)置Picture屬性,也可在程序中通過Load

4、Picture()函數(shù)設(shè)置Picture屬性,還可使用剪切板對象的GetData方法設(shè)置Picture屬性。· PictureBox控件與Image不同,它不但可使用各種繪圖方法畫圖和顯示已存在的圖形,也可用Print方法輸出文本,還可以放置其他的控件對象,故又有小窗體之稱。此外,在MDI(多文檔界面)窗體上,它是惟一可以直接放置在MDI主窗體上的控件,其他的控件只能放置在它上面(一般用來設(shè)計工具欄,用于放置工具按鈕圖標)。2. 圖形顯示方法在應(yīng)用程序中,可根據(jù)需要采用不同方式把圖形添加到窗體、圖片框或圖像控件中。(1)設(shè)計時添加圖形設(shè)計時添加圖形有兩種方法:· 使用對象的

5、Picture屬性。在“屬性”窗口的屬性列表中選擇Picture,VB將彈出一個對話框,從中可選擇圖形文件并把它加載到窗體上、圖片框中或圖像控件中。· 使用剪貼板。把圖形從另一個應(yīng)用程序(如Windows95的畫筆)復(fù)制到剪貼板上,然后返回VB環(huán)境,把它粘貼到窗體或圖片框或圖像控件中。(2)運行時添加圖形運行時添加圖片有三種方法:·使用LoadPicture函數(shù)加載圖形文件。使用LoadPicure函數(shù)可以加載指定的圖形文件,并將該圖形賦給對象的Picture屬性。在不指定文件名時它還可用來清除窗體、圖像或圖片框中的圖形。其使用格式如下:objectname.Picture

6、=LoadPicture("filename")其中,objectname為控件或窗體的Name屬性值。Filename為要加載的圖形文件名全稱,包括驅(qū)動器和路徑。在任何需要的時候,都可加載一新圖形到窗體上、圖片框中或圖像控件里,以更新已有的圖形。當沒有指定filename即括號中的參數(shù)為空串("")時,將清除該對象所顯示的圖形。· 使用Picture屬性在對象間相互復(fù)制。圖形一旦被加載或粘貼到窗體、圖片框或圖像控件以后,運行時就可把它賦值給另一窗體、圖片框或圖像控件。例如,下列語句將把名為picDisplay圖片框中的圖形復(fù)制到名為imgDi

7、splay的圖像控件內(nèi):imgDisplay.Picture=picDisplay.Picture· 從剪貼板對象復(fù)制圖形。如果剪貼板中存儲有圖形數(shù)據(jù),則可使用下面的語句將剪貼板中的圖形賦給窗體、圖片框或圖形控件對象的Picture屬性:F objectname.Picture=ClipBoard.GetData(format%)提示:如果是在設(shè)計時從文件中加載或粘貼圖形,則圖形就和窗體一起被保存和加載,在創(chuàng)建.exe文件時,就不必把源圖形文件提供給用戶,因為.exe文件本身包含有它的圖像。如果要在運行時用LoadPicture函數(shù)加載圖形,則必須把源圖形文件和應(yīng)用程序一起提供給用戶

8、?!纠?.1】 設(shè)計一個圖形瀏覽器窗體,瀏覽并顯示指定目錄下的所有圖形文件。首先創(chuàng)建一個工程文件,添加一個窗體Form1,在其上放置一個圖片框Picture1、圖像框Image1和一個文件列表框File1。在設(shè)計階段將Picture1對象的AutoSize屬性設(shè)置為True,Appearance屬性設(shè)置為“0-Flat”,而Image1的Stretch屬性設(shè)置為True,并將File1對象的Path屬性設(shè)置為“e:media”,Pattern屬性設(shè)置為“*.bmp;*.ico;*.cur;*.jpg”并在該窗體上設(shè)計如下事件過程:Dim filepath As StringPrivate Su

9、b File1_Click() Picture1.Picture = LoadPicture(filepath + "" + File1.FileName) Image1.Picture = Picture1.Picture Form1.Picture = Picture1.PictureEnd SubPrivate Sub Form_Load() filepath = "e:media" File1.Path = filepathEnd Sub啟動本工程,出現(xiàn)Form1窗體,在文件列表框中單擊一個圖形文件,在窗體上、右邊圖片框和圖像框中立即顯示對應(yīng)的圖

10、形,窗體左上方和右上方的圖片框顯示是實際大小的圖形,而右下方的圖像框是拉伸后的圖形。圖6.1顯示的是HAPPY.BMP文件的圖形。 圖6.1 Form1窗體的執(zhí)行界面在File1_Click()事件過程中使用了LoadPicture()函數(shù)和Picture屬性加載用戶選擇的圖形。從加載同一幅圖形到圖片框和圖像控件的結(jié)果可以看出,被加載的圖形均是從對象的左上角開始放置,窗體中和圖片框(由于其AutoSize屬性設(shè)置為True)的圖形是原始圖形文件的大小,圖像中的圖形被放大了。這是由于三種不同對象顯示圖形的過程有差異,各有自己的特點。(1)窗體中顯示的圖形是原始的圖形,圖形大于窗體時,多余的部分被

11、剪切掉,圖形小于窗體時,窗體的其余部分無圖形可顯示。(2)圖片框的AutoSize屬性。在加載圖形的單擊事件過程中,圖片框的AutoSize屬性(邏輯數(shù)據(jù)類型)可控制圖片框是否適應(yīng)圖形的大小,以便調(diào)整。如果想讓圖片框能自動擴展到可容納新圖片的大小,可將該圖片框的AutoSize屬性設(shè)置為True。這樣,在運行時加載或復(fù)制圖形到圖片框時,系統(tǒng)會自動調(diào)整其大小,使其恰好能夠顯示整個圖片,不留多余的空白區(qū)域。本例中由于將AutoSize屬性設(shè)置為True,故圖片框大小根據(jù)加載后的圖形自動進行了調(diào)整,與設(shè)計時的大小不一樣。(3)圖像的Stretch屬性用來控制圖形與控件誰適應(yīng)誰的問題。若將該屬性設(shè)置為

12、True,則圖像控件大小一定,圖形大小隨圖像控件而調(diào)整。當Stretch屬性為False時,圖像控件自動調(diào)整其大小以適應(yīng)加載圖形的要求。6.1.2 使用繪圖控件在控件對象中,線條和形狀可用于在設(shè)計時直接繪制界面所需的直線或有形狀的(矩形、圓、橢圓、圓角矩形)圖形。1. 線條控件線條控件用于在設(shè)計階段往窗體上繪制直線。該控件與后面要講的Line方法不同,前者在設(shè)計階段就可看到效果,而后者只能待程序運行后才能將繪制的直線顯示出來。線條控件的基本屬性如下:· BorderCo1or屬性,設(shè)置直線的顏色,可在程序中使用顏色函數(shù)QColor()或RGB()。· BorderStyle

13、屬性,設(shè)置直線的樣式。· BorderWidth屬性,設(shè)置直線的寬度,單位為像素?!纠?.2】 設(shè)計一個窗體用線條控件在窗體上繪制一個長方體圖形,并根據(jù)用戶輸入的邊長計算該立方體的體積。2. 形狀控件形狀控件提供了一種在窗體上繪制圖形的方法,它可繪制的圖形包括矩形、圓、橢圓、圓角矩形。盡管說窗體或圖片框的Line方法、Circle方法也可用來繪制矩形和圓形,但它們都是用在程序代碼中,而用形狀控件繪制的圖形是在程序設(shè)計階段都可看到的,因此,在某些情況下,用此控件可方便地改善用戶程序的應(yīng)用界面。此外,該控件還可給其他控件加上邊框等。形狀控件的一個重要的屬性是Shape,用來設(shè)置形狀控件的

14、形狀。除與線條形狀控件相同的屬性外,下面的常用屬性用來控制繪制圖形的外觀:· FillColor屬性,設(shè)置繪制圖形的填充色。· FillStyle屬性,設(shè)置繪制圖形的填充模式。在上述工程中添加窗體Form2,如圖6.2所示。窗體左邊是一個圖片框,在其中用線條控件繪制一個立方體,窗體右邊是一個框架,在其中放置4個標簽、4個文本框和一個命令按鈕command1,并在該命令按鈕上設(shè)計如下事件過程:Private Sub Command1_Click() Text4.Text = Text1.Text * Text2.Text * Text3.TextEnd Sub 圖6.2 Fo

15、rm2窗體設(shè)計界面將本窗體設(shè)置成啟動對象,執(zhí)行本工程,出現(xiàn)Form2窗體的屏幕,在三條邊長文本框中分別輸入5、6和4,單擊“計算體積”命令按鈕,在體積文本框中顯示120,如圖6.3所示。圖6.3 計算體積6.2 繪 圖 方 法前面我們介紹了使用直線、形狀等控件直接繪圖,但有時我們需要在程序運行時使用繪圖方法繪圖,這是我們本節(jié)所要討論的主要內(nèi)容。使用控件繪圖的優(yōu)點如下:· 使用較少的系統(tǒng)資源,運行速度快。· 設(shè)計階段可預(yù)覽圖形效果。· 較短的代碼。· 適合于窗體內(nèi)需要較少的直線與圓等情況。使用方法繪圖的優(yōu)點如下:· 適合于窗體內(nèi)需要較多的直線或圓

16、的情況。· 各直線或圓可重疊交叉使用,用控件繪圖無法重疊。在VB中提供的繪圖方法見表6.1。表6.1 繪圖方法方法說明Cls清除所有圖形和Print輸出Pset設(shè)置各個像素的顏色Point返回指定點的顏色值Line畫線、矩形或填充框Circle畫圓、橢圓或圓弧PaintPicture在任意位置畫出圖形M注意:Print方法也可認為是一種繪制圖形方法,因為它的輸出也是寫在對象上,并像Set,Line和Circle方法一樣,也要以內(nèi)存圖像的方式進行保存(如果AutoRedraw是打開的)。在介紹繪圖方法之前,首先看一下繪圖使用的坐標系統(tǒng)。6.2.1 坐標系統(tǒng)對象的坐標系統(tǒng)是繪制各種圖形的

17、基礎(chǔ),坐標系統(tǒng)選擇的恰當與否直接影響著繪圖的質(zhì)量,也就是說同樣的繪圖命令,可能僅僅由于用戶定義或選擇的坐標系統(tǒng)的不同,而不能正確地在屏幕上顯示或在打印機上打印出結(jié)果來,或者即使能顯示或打印出來,由于比例不協(xié)調(diào),也達不到預(yù)期效果。因此,在繪制圖形前,必須首先確定坐標系。1. 默認坐標系及度量單位我們知道,顯示器是以像素(分辨率)為度量單位的。常見顯示器的分辨率為640×480、800×600、1024×768,同樣一幅圖形,由于使用的顯示器分辨率不同,所顯示的效果就不同。因此在傳統(tǒng)的圖形設(shè)計中,常根據(jù)顯示器分辨率來確定繪制圖形的大小。在VB中,系統(tǒng)提供了7種標準規(guī)格

18、的坐標度量單位和一個由用戶自定義的度量單位。· 默認坐標系 系統(tǒng)默認的對象坐標系是以對象左上角為坐標原點(0,0),以twips(緹)為度量單位。需要說明的是,只能在窗體或圖片框上繪制圖形,窗體的容器是系統(tǒng)對象Screen(屏幕),而窗體對象坐標系是用來度量其中的控件或繪制圖形時用的。· 度量單位 VB中共有8種度量單位,如表6.2所列。除系統(tǒng)默認的度量單位twips外,用戶還可根據(jù)需要,選擇系統(tǒng)提供的其他標準度量單位。度量單位設(shè)置是由對象(窗體或圖片框)的ScaleMode屬性定義的??稍趯傩源翱谠O(shè)置或在程序代碼中讀取或修改。表6.2 VB的度量單位ScaleMode說明

19、0用戶自定義類型。如果用戶使用ScaleWidth,ScaleHeight,ScaleTop,ScaleLeft設(shè)置坐標系統(tǒng),VB會自動設(shè)置ScaleMode為01twips,此為默認值(每英寸為144twips)2磅,1英寸72個磅3像素4字符,字符的寬度=120twips,字符的高度=240twips5英寸6毫米7厘米2. 用戶定義對象坐標系統(tǒng)在窗體和圖片框中,與繪圖有關(guān)的屬性見表6.3。表6.3 與繪圖有關(guān)的屬性屬性功能CurrentX,CurrentY設(shè)置或返回當前光標位置(窗體、圖片框當前光標不可見)相對于窗體或圖片框左上角為原點(0,0)的坐標Height,Width設(shè)置或返回窗體

20、或圖片框的高度和寬度,單位由容器而定ScaleHeight,ScaleWidth設(shè)置或返回窗體、圖片框內(nèi)部寬度和高度等分份數(shù),這里的寬度和高度是指除去邊界或標題行后的凈寬度和凈高度。即用戶定義坐標的單位Left,Top設(shè)置或返回窗體或圖片框左上角在容器中的坐標值ScaleLeft,ScaleTop用于設(shè)置或返回窗體、圖片框左上角的坐標值M注意:不論窗體或圖片框?qū)嶋H的尺寸有多大,都可以等分成若干份,等分的份數(shù)越多,說明寬度(高度)單位越小,反之越大。因此用戶可根據(jù)繪制圖形數(shù)據(jù)的大小、范圍來等分窗體或圖片框成若干份,使繪圖數(shù)據(jù)位于由用戶定義的坐標范圍內(nèi)。(1)用ScaleLeft,ScaleTop

21、,ScaleHeight,ScaleWidth設(shè)置坐標系統(tǒng)ScaleLeft和ScaleTop屬性用于設(shè)置對象左上角坐標;ScaleHeight屬性和ScaleWidth屬性用于設(shè)置窗體或圖片框的凈高度和凈寬度。例如,在窗體Form1上繪制圖形時,需要設(shè)置窗體左上角坐標為(10,20),右下角坐標為(60,50),則可使用下面的代碼:Form1.ScaleWidth=50Form1.ScaleHeight=30Form1.ScaleTop=20Form1.ScaleLeft=10坐標原點在(0,0)處,該窗體的位置如圖6.4所示。(0,0)30502010圖6.4 窗體位置一旦設(shè)置了上述四個屬

22、性,則對象四個角的坐標為:左上角:(ScaleLeft,ScaleTop)右下角:(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)左下角:(ScaleLeft,ScaleTop+ScaleHeight)右上角:(ScaleLeft+ScaleWidth,ScaleTop)需說明的是,這四個屬性的值也可以為負數(shù)。例如,下面的代碼可將窗體坐標原點定在左下角,向上和向右時坐標值增加,與平時所用坐標相似,右上角的坐標為(50,100),更符合于繪制各種曲線圖的習(xí)慣。ScaleLeft=20ScaleTop=100ScaleWidth=50ScaleHeight=-

23、100例如,下面的代碼可將坐標原點定在圖片框Picture1的中心,其坐標位置如圖6.5所示。Private Sub Form_Load() Picture1.ScaleLeft=-15 Picture1.ScaleTop=-25 Picture1.ScaleWidth=30 Picture1.ScaleHeight=50End Sub(15,25)X(-15,-25)(-15,25)(15,-25)Y(0,0)圖6.5 圖片框位置(2)用Scale方法定義坐標系統(tǒng)Scale方法是用戶定義對象坐標系統(tǒng)的實用方法,用它完全可以代替上面介紹的用ScaleTop,ScaleLeft,ScaleWid

24、th,ScaleHeight屬性定義坐標系統(tǒng),且更方便。使用此方法可直接定義對象的左上角坐標和右下角坐標值,一旦這兩個角的坐標值確定,則另兩個角坐標值也就定下來了。Scale方法定義坐標系統(tǒng)格式如下:formname|pictureboxname.Scale(x1,y1)-(x2,y2)其中(x1,y1)為左上角坐標,(x2,y2)為右下角坐標。與上述四個屬性對應(yīng)關(guān)系為:x1=ScaleLeft;y1=ScaleTop;x2=ScaleWidth+x1;y2=ScaleHeight+y1當Scale后面不帶參數(shù)時,使用默認的坐標系統(tǒng),對象的左上角為原點(0,0)。如繪制一曲線圖,橫坐標范圍為2

25、15,縱坐標范圍為0.51.5,則使用Scale方法,可定義窗體對象坐標系統(tǒng):Scale(0,2)-(20,0)。6.2.2 繪圖方法除了圖形控件之外,VB還提供了一套繪圖方法,它們適合于窗體和圖片框。1. PSet方法PSet方法可以在窗體或圖片框指定的位置用給定的色彩畫一個“點”。點的大小由對象的DrawWidth屬性指定。PSet方法的使用格式如下:formname|pictureboxname.PSetStep(x,y),color其中,(x,y)是畫點的坐標。color用來指定繪制點的顏色,數(shù)據(jù)類型為Long。默認時,系統(tǒng)用對象的ForeColor屬性值作為繪制點的顏色。color參

26、數(shù)還可用QBColor(),RGB()函數(shù)指定。Step關(guān)鍵字是下一個畫點位置相對于當前位置的偏移量的標記,即步長(水平、垂直兩個方向,可正可負)。(x,y)坐標值是相對于當前位置的偏移量?!纠?.3】 設(shè)計一個窗體使用鼠標在其上任意繪制圖形。在本章工程中添加窗體Form3,其中不放置任何控件。在該窗體上設(shè)計如下事件過程:Dim mouse As Boolean '用于標識是否按下鼠標鍵Private Sub Form_Load() mouse = False Me.DrawWidth = 2 '設(shè)置繪制點的大小(寬度) Me.ForeColor = vbRed '設(shè)置

27、繪制點的顏色End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) mouse = True Me.PSet (X, Y)End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If mouse Then Me.PSet (X, Y)End SubPrivate Sub Form_MouseUp(Button As Int

28、eger, Shift As Integer, X As Single, Y As Single) mouse = FalseEnd Sub將Form3窗體設(shè)置為啟動對象,運行本工程,出現(xiàn)Form3窗體的空白屏幕,按下鼠標鍵拖動時,出現(xiàn)連續(xù)拖過的軌跡線,當釋放鼠標時,軌跡線終止。圖6.6是用鼠標繪制的“PSet”字樣。圖6.6 Form3窗體執(zhí)行界面2. Line方法Line方法用于在窗體或圖片框?qū)ο笊袭嬛本€(斜線也是直線)和矩形。(1)直線繪制直線時,應(yīng)給出起點和終點坐標。Line方法使用格式如下:objectname.Line Step(x1,y1)-Step(x2,y2),color其中

29、,Step表示其后的坐標值使用的是相對偏移。(x1,y1)是直線的起點坐標,若前面有Step,則表示(x1,y1)是相對于當前位置的偏移量;否則(x1,y1)是相對于原點(0,0)的偏移量。若省略(x1,y1),則起點為當前坐標位置(CurrentX,CurrentY)。(x2,y2)是直線的終點坐標,若前面有Step,則表示(x2,y2)是相對于(x1,y1)的偏移量,否則(x2,y2)是相對于原點的絕對坐標值。color指定要畫直線的顏色??梢允褂妙伾a或顏色函數(shù)。省略時用對象的ForeColor屬性指定的顏色繪制直線。畫直線時,也是使用DrawWidth屬性指定直線的寬度,使用Draw

30、Style屬性指定邊線的樣式,其取值如表6.4所列。表6.4 DrawStyle屬性設(shè)置常量設(shè)置值說明vbSolid0實線,默認設(shè)置vbDash1虛線vbDot2點線vbDashDot3點劃線vbDashDotDot4雙點劃線vbInvisible5無線vbInsideSolid6內(nèi)實線 【例6.4】 設(shè)計一個窗體,用戶使用鼠標在窗體點擊時繪制隨機大小和顏色的五角星。在本章工程中添加窗體Form4,其中不放置任何控件。在該窗體上設(shè)計如下事件過程:Const pi = 3.14159Private Sub star(x As Single) Randomize n = Int(Rnd * 16)

31、 colr = QBColor(n) Line -Step(x * Sin(pi / 10), -x * Cos(pi / 10), colr Line -Step(x * Sin(pi / 10), x * Cos(pi / 10), colr Line -Step(-x * Cos(2 * pi / 10), -x * Sin(2 * pi / 10), colr Line -Step(x, 0), colr Line -Step(-x * Cos(2 * pi / 10), x * Sin(2 * pi / 10), colrEnd SubPrivate Sub Form_MouseUp

32、(Button As Integer, Shift As Integer, x As Single, y As Single) PSet (x, y) star (Rnd * 2000)End Sub其中使用star子過程繪制一顆五角星,以五角星的左下角為起點,依次向上、右下、左上、右上,最后回到左下角,每個角的角度為2/10,利用三角函數(shù)可以得到頂點的相對坐標。Rnd()是隨機函數(shù),Randomize語句與隨機函數(shù)一起使用,使產(chǎn)生的數(shù)更趨于隨機。將Form4窗體設(shè)置為啟動對象,運行本工程,出現(xiàn)Form4窗體的空白屏幕,多次按下鼠標鍵時,在窗體上出現(xiàn)多個隨機大小和顏色的五角星。圖6.7是操作的

33、結(jié)果。 圖6.7 Form4窗體執(zhí)行界面【例6.5】 設(shè)計一個窗體,該窗體上有一個下拉菜單,包括“Sin(x)”、“Cos(x)”和“清除”三個選項,根據(jù)用戶的操作分別在屏幕上顯示一條Sin(x)曲線、一條Cos(x)曲線和清除屏幕圖形。在本章工程中添加窗體Form5,在其中放置一個圖片框Picture1和一個菜單。圖片框的Appearance屬性設(shè)置為0,BackColor設(shè)置為淺灰色;菜單項的設(shè)置如表6.5所示,標題為“menu”的菜單項設(shè)置為不可見的。表6.5 菜單項設(shè)置標題名 稱索引menupopmenu.Sin(x)hs0.Cos(x)hs1.清除hs2在該窗體上設(shè)計如下事件過程:C

34、onst pi = 3.14159Private Sub Form_paint() With Picture1 .Height = Me.ScaleHeight .ScaleMode = 6 oldx = .ScaleWidth / 2 oldy = .ScaleHeight / 2 .Cls '畫坐標軸 Picture1.Line (oldx, .Top)-(oldx, .ScaleHeight), RGB(255, 0, 0) Picture1.Line (0, oldy)-(.ScaleWidth, oldy), RGB(255, 0, 0) End With Picture1.

35、CurrentX = oldx - 4 Picture1.CurrentY = oldy + 0.5 '畫坐標原點 Picture1.Print 0 For xt = -Int(oldx) To Int(oldx) Step 0.5 If xt <> 0 Then st = xt * 10 * pi Picture1.CurrentX = oldx + st - 3 Picture1.CurrentY = oldy + 0.5 '畫x軸的刻度 Picture1.Print xt & "" Picture1.Line (oldx + st,

36、 oldy - 1)-(oldx + st, oldy), RGB(255, 0, 0) End If Next xt For yt = -5 To 7 If yt <> 0 Then st = yt * 10 Picture1.CurrentX = oldx - 4 Picture1.CurrentY = oldy + st - 1 '畫y軸的刻度 Picture1.Print yt Picture1.Line (oldx, oldy + st)-(oldx + 1, oldy + st), RGB(255, 0, 0) End If Next yt Label1.Cap

37、tion = ""End SubPrivate Sub Form_Resize() Form_paintEnd SubPrivate Sub hs_Click(Index As Integer) oldx = Picture1.ScaleWidth / 2 oldy = Picture1.ScaleHeight / 2 Select Case Index Case 0 Label1.Caption = "Sin(x)曲線" For t = -oldx To oldx Step 0.01 xt = 10 * t yt = 10 * Sin(t) Pictu

38、re1.PSet (xt + oldx, oldy - yt), RGB(0, 127, 127) Next Case 1 Label1.Caption = "Cos(x)曲線" For t = -oldx To oldx Step 0.01 xt = 10 * t yt = 10 * Cos(t) Picture1.PSet (xt + oldx, oldy - yt), RGB(0, 127, 127) Next Case 2 Picture1.Cls Form_paint Exit Sub End SelectEnd SubPrivate Sub Picture1_M

39、ouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu popmenu, 6 End IfEnd Sub將Form5窗體設(shè)置為啟動對象,運行本工程,出現(xiàn)Form5窗體的空白屏幕,按下鼠標右鍵時,在窗體上出現(xiàn)一個下拉菜單,如圖6.8所示,選擇“Sin(x)”項,出現(xiàn)如圖6.9所示的Sin(x)曲線。 圖6.8 Form5窗體執(zhí)行界面(1)圖6.9 Form5窗體執(zhí)行界面(2)(2)矩形繪制矩形時仍使用Line方法,它有兩種操作方法:一是用繪制直線的辦法

40、依次畫出矩形的四條邊。二是通過指定矩形的左上角和右下角坐標完成繪制過程。前者使用起來較繁瑣,一般很少使用,特別是在畫矩形的同時使用不同的圖案填充時,更不方便。后者除可以繪制矩形外,還可用指定的圖案、顏色填充矩形,使用起來靈活方便。用Line方法繪制矩形時與使用Line方法繪制直線時相比,多了兩個參數(shù)B和F。Line方法繪制矩形時使用格式如下:objectname.LineStep(x1,y1)-Step(x2,y2),color,B,F· Step關(guān)鍵字 其含義與畫直線時完全相同。(x1,y1)為矩形左上角坐標,前面無Step關(guān)鍵字時,是相對于原點的坐標值;有Step時,是相對于當前

41、位置(CurrentX,CurrentY)的坐標值,即偏移量。· (x2,y2) 為矩形右下角坐標,前面無Step關(guān)鍵字時,是相對于原點的坐標值:有Step時,是相對于左上角(x1,y1)的偏移量。· (x1,y1) 可省略,這時矩形的左上角在當前位置(CurrentX,CurrentY)處。· color參數(shù) 用來指定要繪制矩形邊線的顏色,與畫直線時相同。省略時(逗號保留),用ForeColor屬性設(shè)置的顏色畫邊線。· B參數(shù) 用于說明使用Line方法繪制矩形(如果省略,只能畫直線)。· F參數(shù) 用于說明使用繪矩形的顏色來填充矩形。省略時繪制

42、空心矩形。該參數(shù)必須與B參數(shù)一同使用(無B時,僅畫直線,談不上填充圖案)。FillStyle屬性還可用于返回或設(shè)置填充形狀控件,以及由Circle圖形方法生成的圓的樣式,其取值如表6.6所列。表6.6 FillStyle及常數(shù)常數(shù)設(shè)置值說明vbFSSolid0實心vbFSTransparent1(默認值)透明vbHorizontalLine2水平直線vbVerticalLine 3垂直直線vbUpwardDiagonal4上斜對角線vbDownwardDiagonal5下斜對角線vbCross6十字線vbDiagonalCross7交叉對角線如果FillStyle設(shè)置為1(透明),則忽略Fil

43、lColor屬性,但是Form對象除外。FillColor屬性指定填充矩形的顏色。邊線的寬度由DrawWidth屬性指定,邊線的樣式由DrawStyle屬性指定,與繪制直線時相同。F提示:當對所繪制的矩形用FillStyle指定的圖案填充時,不要F參數(shù)。使用F參數(shù)時是用ForeColor屬性或color參數(shù)設(shè)置的顏色進行填充,顯示不出圖案來。3. 圓、橢圓、扇形和弧的Circle方法Circle方法可用于在窗體、圖片框或打印機上繪制圓、橢圓、弧等圖形。上節(jié)介紹的有關(guān)屬性DrawWidth,DrawStyle,F(xiàn)illColor,F(xiàn)illStyle等在Circle方法中也同樣適用。(1)圓使用C

44、ircle方法繪制圓是它的最簡單用法。其使用格式如下:objectname.Circle Step(x,y),radius,color· (x,y) 指定圓心的位置。Step關(guān)鍵字指定它后面圓心的坐標值(x,y)是相對于當前位置(CurrentX,CurrentY)。省略Step關(guān)鍵字,(x,y)為相對與坐標原點的絕對坐標值。radius參數(shù)用于指定圓的半徑。· color參數(shù) 用于指定繪制圓的顏色,省略時用對象的ForeColor屬性設(shè)置的顏色畫圓。繪制的圓是實心圓、空心圓或者用指定的圖案填充,與對象的FillColor屬性(指定的顏色填充)、FillStyle屬性(指定

45、的圖案填充)設(shè)置有關(guān),可參考矩形的繪制。【例6.6】 設(shè)計一個窗體,在其上繪制一系列同心圓,顏色由隨機函數(shù)產(chǎn)生。在本章工程中添加窗體Form6,其中不放置任何控件。在該窗體上設(shè)計如下事件過程:Private Sub Form_Load() Show Dim X, Y, r, r1, i Randomize ScaleMode = 6'坐標度量單位為mm DrawWidth = 2'邊線的寬度為2像素 X = ScaleWidth / 2'繪制的圓不超出窗體,求最外圈圓的半徑r Y = ScaleHeight / 2 If ScaleWidth > ScaleHei

46、ght Then r = Y Else r = X End If For r1 = 0 To r '繪制同心圓,半徑r1逐漸增加。 Circle (X, Y), r1, RGB(255 * Rnd, 255 * Rnd, 255 * Rnd)NextEnd Sub將Form6窗體設(shè)置為啟動對象,運行本工程,出現(xiàn)如圖6.10所示的執(zhí)行結(jié)果。圖6.10 Form6窗體的執(zhí)行界面(2)橢圓繪制橢圓仍使用Circle方法,與畫圓相比多一個縱橫比參數(shù),當縱橫比為1:1時,即是圓。格式如下:objectname.CircleStep(x,y),radius,color,aspect其中,aspec

47、t參數(shù)決定所畫橢圓縱軸與橫軸的比值。比值大于1時,繪制扁形橢圓(垂直方向大于水平方向);小于1時繪制橢圓:等于1時繪制圓。在aspect前有三個逗號“,”不能省略,實際上還有兩個參數(shù)未寫出,在畫圓弧時要用到這兩個參數(shù),待畫弧時再作介紹。其他幾個參數(shù)與畫圓時一樣?!纠?.7】 設(shè)計一個窗體,在其上繪制如圖6.11所示的圖形。在本章工程中添加窗體Form7,其中不放置任何控件。在該窗體上設(shè)計如下事件過程:Private Sub Form_Load() Show Scale (-15, 14)-(15, -14) '設(shè)置坐標 Circle (0, 0), 7 '繪制最外層的圓 Cir

48、cle (0, 0), 7, , , , 2.5 '繪制里層的未填充的橢圓 FillStyle = 7 Circle (0, 0), 7, RGB(255, 0, 0), , , 0.4 '繪制里層的填充的橢圓End Sub圖6.11 Form7窗體的執(zhí)行界面(3)弧和扇形繪制弧和扇形時仍使用Circle方法。我們知道,弧與扇形既有相同點,也有不同點。弧可以視為由圓或橢圓的邊線中截取的一部分,而扇形還要在弧的基礎(chǔ)上,從弧的兩端再分別畫一條到圓心的直線,它是封閉的圖形。繪制弧和扇形時使用的格式如下:objectname.Circle Step(x,y),radius,colors

49、tart,end,aspect其中,start指定弧的起始角,end指定弧終止角。它們的單位均是弧度,范圍從02。畫弧時,start,end都用正值。從start開始,逆時針畫到end處結(jié)束。如果畫扇形,則start,end都取負值,也是從start開始,逆時針繪制,到end結(jié)束。需注意的是,負值僅表示畫扇形,不表示數(shù)學(xué)上不同的象限。如0/2畫一段弧,而0/2僅表示畫0/2的扇形,不表示數(shù)學(xué)上的0-/2即3/20?!纠?.8】 設(shè)計一個窗體,在上面繪制如圖6.12所示的弧和扇形。在本章工程中添加窗體Form8,其中不放置任何控件。在該窗體上設(shè)計如下事件過程:Const pi = 3.14159

50、Private Sub Form_Load() Show ForeColor = vbRed DrawWidth = 2 Circle (1800, 500), 1000, , -pi, -1.5 * pi '畫扇形 Circle (3500, 500), 1000, , pi, 1.5 * pi '畫弧End Sub圖6.12 Form8窗體的執(zhí)行界面【例6.9】 設(shè)計一個窗體,根據(jù)用戶輸入的三個班的學(xué)生人數(shù),顯示各班人數(shù)所占比例的餅圖。在本章工程中添加窗體Form9,在其中放置一個圖片框Picture1和一個框架Frame1。Picture1的Appearance屬性設(shè)置為

51、0。在框架中放置三個標簽(分別為Label1、Label2和Label3)、三個文本框(分別為Text1、Text2和Text3)和一個命令按鈕Command1。在該窗體上設(shè)計如下事件過程:Const pi = 3.14159Private Sub Command1_Click() Dim a As Single Dim b As Single Dim c As Single Dim s As Single a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) s = a + b + c If s = 0 ThenMsgBox

52、"人數(shù)總計不能為零", vbOKOnly, "信息提示"Exit Sub End If a = a / s b = b / s Call hb(a, b)End SubPrivate Sub hb(a As Single, b As Single) Picture1.FillStyle = 0 For i = 0 To 200Picture1.FillColor = vbRed '用紅色填充Picture1.Circle (1500, 1500 - i), 1000, vbRed, -2 * pi, -2 * pi * a, 2 / 3Pictu

53、re1.FillColor = vbGreen '用綠色填充Picture1.Circle (1500, 1500 - i), 1000, vbGreen, -2 * pi * a,-2 * pi * (a + b), 2 / 3Picture1.FillColor = vbBlue'用藍色填充Picture1.Circle (1500, 1500 - i), 1000, vbBlue, -2 * pi * (a + b),-2 * pi,2 / 3 Next Picture1.FillColor = vbRed '用紅色填充 Picture1.Circle (1500

54、, 1500 - i), 1000, vbWhite, -2 * pi, -2 * pi * a, 2 / 3 Picture1.FillColor = vbGreen'用綠色填充 Picture1.Circle (1500, 1500 - i), 1000, vbWhite, -2 * pi * a,-2 * pi * (a + b), 2 / 3 Picture1.FillColor = vbBlue '用藍色填充 Picture1.Circle (1500, 1500 - i), 1000, vbWhite, -2 * pi * (a + b),-2 * pi, 2 /

55、3End Sub其中Command1_Click事件過程用于計算各班人數(shù)在總?cè)藬?shù)中所占的比例,然后調(diào)用hb子過程繪制餅圖。hb子過程繪制餅圖的高度為200,使用For.Next循環(huán)每次畫一層,每層中有三個扇形,顏色分別為紅、綠、藍,在200層畫完后,用白色重畫一次頂層,這樣便有了立體感。將Form9窗體設(shè)置為啟動對象,運行本工程,出現(xiàn)Form9窗體的屏幕,在三個班的文本框中分別輸入32,40和35,單擊命令按鈕,出現(xiàn)如圖6.13所示的餅圖。圖6.13 Form9窗體的執(zhí)行界面6.3 圖 形 處 理圖形處理包括的內(nèi)容很多,涉及面很廣,如圖形大小的變換、旋轉(zhuǎn)、鈍化、柔化等操作,本節(jié)僅介紹圖形的重新繪制,保存與變換等一些最基本的操作。6.3.1 圖形的重繪所謂重繪圖形是指使用繪圖方法在窗體或圖片框上繪制的圖形,部分或全部地被另外的窗體或?qū)ο蟾采w了,而一旦這些覆蓋物被移走,被覆蓋的圖形如何重新顯示。重繪圖形有兩種方法,一是在繪圖前將窗體或圖片框的AutoRedraw屬性設(shè)置為True;二是將繪圖方法程序代碼放到窗體或圖片框的Paint事件過程中。下面分別介紹與圖形重繪有關(guān)的AutoRedraw屬性和Paint事件。1. AutoRedraw屬性該屬性用于確定圖片框或窗體中(用繪圖方法繪制)的圖形在覆蓋它的對象

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論