![第11章-多媒體程序設(shè)計(jì)-多媒體技術(shù)基礎(chǔ)及應(yīng)用-教學(xué)課件_第1頁(yè)](http://file4.renrendoc.com/view/af799bf770404a58828ef7d1398e7169/af799bf770404a58828ef7d1398e71691.gif)
![第11章-多媒體程序設(shè)計(jì)-多媒體技術(shù)基礎(chǔ)及應(yīng)用-教學(xué)課件_第2頁(yè)](http://file4.renrendoc.com/view/af799bf770404a58828ef7d1398e7169/af799bf770404a58828ef7d1398e71692.gif)
![第11章-多媒體程序設(shè)計(jì)-多媒體技術(shù)基礎(chǔ)及應(yīng)用-教學(xué)課件_第3頁(yè)](http://file4.renrendoc.com/view/af799bf770404a58828ef7d1398e7169/af799bf770404a58828ef7d1398e71693.gif)
![第11章-多媒體程序設(shè)計(jì)-多媒體技術(shù)基礎(chǔ)及應(yīng)用-教學(xué)課件_第4頁(yè)](http://file4.renrendoc.com/view/af799bf770404a58828ef7d1398e7169/af799bf770404a58828ef7d1398e71694.gif)
![第11章-多媒體程序設(shè)計(jì)-多媒體技術(shù)基礎(chǔ)及應(yīng)用-教學(xué)課件_第5頁(yè)](http://file4.renrendoc.com/view/af799bf770404a58828ef7d1398e7169/af799bf770404a58828ef7d1398e71695.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章多媒體程序設(shè)計(jì)
11.1多媒體程序設(shè)計(jì)概要11.2人機(jī)界面設(shè)計(jì)11.3圖形、圖像程序設(shè)計(jì)技術(shù)11.4數(shù)字音頻軟件開發(fā)技術(shù)第11章多媒體程序設(shè)計(jì) 11.1多媒體程序設(shè)計(jì)概要11.1多媒體程序設(shè)計(jì)概要 11.1.1VB編程的基本概念 1.三個(gè)重要概念 (1)窗口。窗口是一種有邊界的矩形區(qū)域,例如,VB窗口、Word的文檔窗口、對(duì)話框窗口等。 (2)事件。事件是通過鼠標(biāo)、按鍵的操作、程序的控制或其他窗口所產(chǎn)生的操作或行為。 (3)消息。發(fā)生事件時(shí)就引發(fā)一條消息發(fā)送到操作系統(tǒng)。11.1多媒體程序設(shè)計(jì)概要 11.1.1VB編程的基 2.事件驅(qū)動(dòng)模型 事件驅(qū)動(dòng)模型具有非過程化的特點(diǎn),在事件驅(qū)動(dòng)模型中,程序代碼不是按照預(yù)定的順序執(zhí)行,而是在響應(yīng)不同的事件時(shí)執(zhí)行不同的代碼片段。 3.Windows的工作方式 Windows操作系統(tǒng)通過給每一個(gè)窗口提供一個(gè)惟一的標(biāo)識(shí)符來(lái)管理所有窗口。操作系統(tǒng)連續(xù)地監(jiān)視每一個(gè)窗口的活動(dòng)或事件信號(hào)。當(dāng)事件發(fā)生時(shí),就引發(fā)一條消息,操作系統(tǒng)處理該消息并廣播給其他窗口。最后,每一個(gè)窗口根據(jù)自身處理該條消息的指令而采取適當(dāng)?shù)牟僮鳌? 2.事件驅(qū)動(dòng)模型 11.1.2VB中的對(duì)象 對(duì)象是代碼和數(shù)據(jù)的組合,可以作為一個(gè)單位來(lái)處理。對(duì)象簡(jiǎn)單地說(shuō)就是我們經(jīng)??吹降母鞣N窗口、按鈕、文本框等。對(duì)象可以是應(yīng)用程序的一部分,比如可以是控件或窗體。整個(gè)應(yīng)用程序也是一個(gè)對(duì)象。具體地說(shuō),在VB中對(duì)象可分為全局對(duì)象和程序界面對(duì)象。 1.全局對(duì)象 所謂全局對(duì)象,是指應(yīng)用程序在程序的任何層次都可以訪問的對(duì)象,共有以下幾種: (1)APP:設(shè)計(jì)的應(yīng)用程序,它的屬性決定應(yīng)用程序的標(biāo)題、路徑、可執(zhí)行文件名以及幫助文件名等。
11.1.2VB中的對(duì)象 (2)Clipboard:它就是Windows中的剪貼板,在VB應(yīng)用程序中可用關(guān)鍵字Clipboard來(lái)訪問它,從而操作其上的數(shù)據(jù)或圖形,即將數(shù)據(jù)送到剪貼板上或從剪貼板上取回?cái)?shù)據(jù)。 (3)Screen:計(jì)算機(jī)屏幕,也是應(yīng)用程序窗口的“容器”,通過它可以設(shè)置應(yīng)用程序的窗口在屏幕上的位置以及鼠標(biāo)指針的形狀。 (4)Debug:調(diào)試窗口,當(dāng)應(yīng)用程序在VB集成環(huán)境中運(yùn)行時(shí)它才顯示出來(lái),用于調(diào)試程序。 (5)Printer:打印機(jī),聯(lián)機(jī)的打印機(jī)也是一個(gè)對(duì)象,應(yīng)用程序可操作它在紙上輸出結(jié)果。 (2)Clipboard:它就是Windows中的剪 2.程序界面對(duì)象 程序界面對(duì)象共有以下幾種: (1)Form:窗體。VB工程中的每一個(gè)窗體都是獨(dú)立的對(duì)象,類似控件對(duì)象,它們提供一些事件過程,可作為程序界面或?qū)υ捒?。絕大多數(shù)情況下,我們把窗體當(dāng)作在其中能放置控件的框架,它是應(yīng)用程序界面中的部件或?qū)υ捒蛑械牟考摹叭萜鳌薄? (2)Control:控制部件(控件)。這是和用戶交互的標(biāo)準(zhǔn)部件,命令按鈕、文本框、列表框、滾動(dòng)條、菜單等都屬此類。除菜單控件外,所有控件都可用工具箱中的工具“畫”出來(lái)。菜單控件是用菜單設(shè)計(jì)窗口作為工具設(shè)計(jì)出來(lái)的。界面設(shè)計(jì)就是在窗體上放置控件并指定其屬性。
2.程序界面對(duì)象 (3)數(shù)據(jù)庫(kù)訪問對(duì)象:數(shù)據(jù)庫(kù)是對(duì)象,并且還包含其他對(duì)象,如字段、索引等。VB的專業(yè)版可以操作數(shù)據(jù)庫(kù),數(shù)據(jù)訪問對(duì)象是為訪問數(shù)據(jù)庫(kù)而設(shè)的。 11.1.3VB程序設(shè)計(jì)要素 通常,一個(gè)VB程序至少含有一個(gè)窗體,在這個(gè)窗體中可以包含一個(gè)或多個(gè)對(duì)象,并以控件的形式存在??丶粌H擁有屬性,還擁有事件過程,它決定當(dāng)控件有一個(gè)或幾個(gè)操作行為激活時(shí)所發(fā)生的事情。
(3)數(shù)據(jù)庫(kù)訪問對(duì)象:數(shù)據(jù)庫(kù)是對(duì)象,并且還包含其他對(duì)象 1.屬性(Properties)的設(shè)置 屬性是一個(gè)對(duì)象的性質(zhì),它決定對(duì)象的外觀和一般行為。對(duì)象的屬性中,有的屬性在設(shè)計(jì)時(shí)可更改,可通過屬性窗口加以設(shè)置;有的屬性是系統(tǒng)賦予對(duì)象的,只能在運(yùn)行時(shí)訪問這種屬性,但不可更改;有的屬性僅在運(yùn)行時(shí)才可訪問和更改。后兩種屬性出現(xiàn)在屬性窗口的列表中。 在程序中,訪問對(duì)象的屬性的格式如下: [對(duì)象名.]屬性 其中,對(duì)象名和屬性間用“.”連接,若省略對(duì)象名,則指當(dāng)前具有焦點(diǎn)的對(duì)象。上述組合可看作是一個(gè)變量。即可對(duì)其賦值(除非只讀屬性),也可將其值賦予別的變量。 1.屬性(Properties)的設(shè)置 2.事件(Event)的產(chǎn)生 事件就是系統(tǒng)可以感知的用戶操作信息,可以看作是系統(tǒng)對(duì)對(duì)象的響應(yīng)。事件通常觸發(fā)VB程序中的一段代碼。事件可分為鼠標(biāo)事件、鍵盤事件和其他事件。每個(gè)對(duì)象都可引發(fā)事件,在VB中都已經(jīng)準(zhǔn)備好對(duì)應(yīng)的事件過程,程序員只需編寫響應(yīng)事件的代碼。 3.函數(shù)(Function)、過程(Procedure)和方法(Method)的作用 (1)函數(shù)。函數(shù)是包含操作數(shù)據(jù)的程序語(yǔ)句集。當(dāng)我們需要完成某種任務(wù)時(shí),就要調(diào)用過程;當(dāng)我們需要返回值時(shí),就調(diào)用函數(shù)。VB包括幾十種函數(shù),這些函數(shù)執(zhí)行通用的操作,如修改字符串的前導(dǎo)空格或去掉其尾部空格或計(jì)算一個(gè)角度的正弦。 2.事件(Event)的產(chǎn)生 (2)過程。在VB中,每個(gè)對(duì)象可引發(fā)的事件過程的模板已經(jīng)準(zhǔn)備好,在設(shè)計(jì)時(shí),雙擊控件,可打開與此控件有關(guān)的代碼窗口,在過程下拉列表框中,列出了這個(gè)控件可能引發(fā)的事件對(duì)應(yīng)的過程。選擇某一過程可打開該過程的代碼模板。另一種過程就是函數(shù),和對(duì)象相聯(lián)系的函數(shù)用于改變或設(shè)置對(duì)象的某種屬性。例如,LoadPicture函數(shù)可設(shè)置窗體的Picture屬性。 (3)方法。VB中的窗體和控件對(duì)象給我們提供了一種特殊的過程,它在程序控制下工作,可以看作是對(duì)象的動(dòng)作。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,這樣的過程叫做方法。方法是一種特殊的過程,它和過程的差別是它從屬于特定的對(duì)象,因此調(diào)用時(shí)必須指明對(duì)象。方法的調(diào)用語(yǔ)法為 (2)過程。在VB中,每個(gè)對(duì)象可引發(fā)的事件過程的模板已 [對(duì)象名.]方法[參數(shù)] 對(duì)象名和方法之間用“.”連接。若省略對(duì)象名,則對(duì)象指的是當(dāng)前的活動(dòng)對(duì)象。例如,調(diào)用Debug對(duì)象的Print方法,可用語(yǔ)句 Debug.Print 4.模塊(Module)組織
VB應(yīng)用程序的代碼是以分層方式組織并存儲(chǔ)在模塊中的。典型的應(yīng)用程序應(yīng)包括若干模塊:應(yīng)用程序中每個(gè)窗體的窗體模塊、共享代碼的可選標(biāo)準(zhǔn)模塊以及可選的類模塊。每個(gè)模塊包含若干含有代碼的過程:Event事件過程、Sub子過程或Function函數(shù)以及Property屬性過程。 [對(duì)象名.]方法[參數(shù)]
圖11-1VB的常用控件和窗體(a)控件;(b)窗體
圖11-1VB的常用控件和窗體(a)控件;(b)窗 對(duì)于每個(gè)標(biāo)準(zhǔn)模塊、類模塊和窗體模塊都可包含聲明及過程。 (1)聲明:可以將常數(shù)、類型、變量和動(dòng)態(tài)鏈接庫(kù)(DLL)過程的聲明放在窗體、類或標(biāo)準(zhǔn)模塊的模塊級(jí)。 (2)過程:可以是Sub、Function或Property過程。它包含可以作為單元來(lái)執(zhí)行的代碼片段。 11.1.4VB中的常用控件和窗體 VB的常用控件如圖11-1(a)所示,其他要添加的控件可在菜單項(xiàng)“工程/部件”中選擇添加。VB的常用窗體(Form)如圖11-1(b)所示。 對(duì)于每個(gè)標(biāo)準(zhǔn)模塊、類模塊和窗體模塊都可包含聲明及過程。11.2人機(jī)界面設(shè)計(jì) 11.2.1多媒體圖形用戶界面的特點(diǎn) 圖形用戶界面(GraphicsUserInterface,GUI)專門用來(lái)代表以圖形方式工作的窗口,如圖標(biāo)、菜單、按鈕、滾動(dòng)條、對(duì)話框等界面部件,也包括能夠移動(dòng)、定位、點(diǎn)取圖形目標(biāo)的定位設(shè)備的界面。 多媒體圖形用戶界面是在圖形用戶界面的基礎(chǔ)上,再加上一些其他媒體(如多媒體音頻、視頻、動(dòng)畫等)的特性。11.2人機(jī)界面設(shè)計(jì) 11.2.1多媒體圖形用戶界面 多媒體圖形用戶界面的主要特點(diǎn)如下: (1)廣泛使用窗口、圖標(biāo)、菜單、按鈕、對(duì)話框等基本界面部件來(lái)表示應(yīng)用目標(biāo),這些圖形目標(biāo)的表示都具有直觀、形象、可視等特點(diǎn)。其中圖標(biāo)是表示把一個(gè)應(yīng)用程序縮到最小時(shí)所代表的程序內(nèi)部功能、動(dòng)作的可視圖形符號(hào)。 (2)可使用圖形部件形象地表示感興趣的目標(biāo),使系統(tǒng)完成的操作或命令能用逼真的模擬、比喻來(lái)表示,而且所有感興趣的目標(biāo)在GUI界面上被連續(xù)顯示出來(lái)。 (3)有高度的交互性。每一輸入動(dòng)作都直接被系統(tǒng)解析,動(dòng)作的結(jié)果可以是文字、聲音、圖像、視頻或動(dòng)畫等多媒體表現(xiàn)形式,并可以立即反饋給用戶。而對(duì)于其他交互方式,要等到全部輸入完成后才能被系統(tǒng)解析,并產(chǎn)生系統(tǒng)響應(yīng)。 多媒體圖形用戶界面的主要特點(diǎn)如下: (4)支持鼠標(biāo)類定位設(shè)備完成光標(biāo)的移動(dòng)和目標(biāo)的選取。因此,只要操縱鼠標(biāo)器或按下按鈕即可代替文本界面方式中的復(fù)雜語(yǔ)法和命令鍵入,在GUI方式下的識(shí)別和點(diǎn)取目標(biāo)比命令方式下記住并鍵入命令要容易和快速得多。 (5)提供了快速的、增量式的可逆轉(zhuǎn)的操作,并且所有操作過程效果都可觀察到。 (6)以一致的方式完成對(duì)所有目標(biāo)的顯示和操縱。一致的顯示和操縱方式減少了用戶的記憶、學(xué)習(xí)負(fù)擔(dān)和出錯(cuò)率,也有利于標(biāo)準(zhǔn)化的人機(jī)界面的構(gòu)成。 (4)支持鼠標(biāo)類定位設(shè)備完成光標(biāo)的移動(dòng)和目標(biāo)的選取。因 (7)提供系統(tǒng)預(yù)驗(yàn)證功能,使得只有有效的交互才能發(fā)生效果。如果用戶指向一個(gè)對(duì)象的動(dòng)作對(duì)當(dāng)前的任務(wù)是無(wú)意義的,則顯示屏上就無(wú)反應(yīng)。 (8)提供了對(duì)用戶出錯(cuò)的保護(hù)機(jī)制和強(qiáng)有力的幫助機(jī)制。GUI界面使用比喻、模擬日常操作方式,因此易學(xué)易用,本身不易出錯(cuò),并且一旦出錯(cuò),結(jié)果可立即顯示。而且用戶操作是可恢復(fù)的,即具備UNDO功能。這些功能減少了用戶對(duì)可能錯(cuò)誤的擔(dān)心,使用戶能把精力集中在任務(wù)上。另外,強(qiáng)有力的幫助機(jī)制還可以幫助用戶正確操縱和使用系統(tǒng)。 (7)提供系統(tǒng)預(yù)驗(yàn)證功能,使得只有有效的交互才能發(fā)生效 11.2.2利用VB開發(fā)圖形用戶界面 首先要了解界面設(shè)計(jì)的一般性原則,最為重要的有: (1)界面要具有一致性。一致性原則在界面設(shè)計(jì)中最容易被違反,同時(shí)也最容易修改和避免。例如,在菜單和聯(lián)機(jī)幫助中必須使用相同的術(shù)語(yǔ);對(duì)話框必須具有相同的風(fēng)格。 (2)常用操作要有捷徑。常用操作的使用頻度大,應(yīng)該減少操作序列的長(zhǎng)度,使常用操作具有捷徑,使界面在功能實(shí)現(xiàn)上簡(jiǎn)捷和高效。例如,為文件的常用操作(如打開、關(guān)閉、保存等)設(shè)置快捷鍵。 11.2.2利用VB開發(fā)圖形用戶界面 (3)提供簡(jiǎn)單的錯(cuò)誤處理。系統(tǒng)要有錯(cuò)誤處理的功能,在出錯(cuò)時(shí),系統(tǒng)應(yīng)能檢測(cè)出錯(cuò)誤,并且提供簡(jiǎn)單的容易理解的錯(cuò)誤處理功能。 (4)提供信息反饋。對(duì)常用的操作和簡(jiǎn)單的操作可以不要反饋,但對(duì)不常用操作和至關(guān)重要的操作,系統(tǒng)應(yīng)該提供信息的反饋。 (5)操作可逆。操作可逆對(duì)于不具備專門知識(shí)的操作人員相當(dāng)有用。可逆的動(dòng)作可以是單個(gè)操作,或者是一個(gè)相對(duì)獨(dú)立的操作序列。 (6)設(shè)計(jì)良好的聯(lián)機(jī)幫助。對(duì)大多數(shù)不熟練用戶來(lái)說(shuō),聯(lián)機(jī)幫助具有非常重要的作用。 (3)提供簡(jiǎn)單的錯(cuò)誤處理。系統(tǒng)要有錯(cuò)誤處理的功能,在出 11.2.3菜單設(shè)計(jì)的原則和編程技術(shù) 菜單設(shè)計(jì)有如下的一般性原則: (1)按照系統(tǒng)的功能來(lái)組織菜單,分配菜單界面的寬度和深度,使菜單層次結(jié)構(gòu)和系統(tǒng)功能層次結(jié)構(gòu)相一致; (2)選用廣而淺的菜單樹,一般菜單嵌套層次不宜超過四層,每級(jí)菜單項(xiàng)不宜超過7~9項(xiàng); (3)根據(jù)菜單選項(xiàng)的含義進(jìn)行分組,并且按一定的規(guī)則排序; (4)菜單項(xiàng)的安排應(yīng)有利于提高菜單選取速度; (5)常用選項(xiàng)要設(shè)置快捷鍵。 11.2.3菜單設(shè)計(jì)的原則和編程技術(shù) 結(jié)合以上原則,VB菜單編程有以下6方面的技術(shù)和技巧。 1.菜單選項(xiàng)的分組 在VB中,菜單選項(xiàng)的分組是通過菜單欄分隔橫線實(shí)現(xiàn)的。在菜單的一定位置增加一個(gè)Caption屬性為“_”的菜單項(xiàng),則菜單相應(yīng)位置上就表現(xiàn)為一條橫線。 2.常用選項(xiàng)快捷鍵的設(shè)置 打開菜單設(shè)計(jì)窗口(MenuDesignWindow),對(duì)應(yīng)于每個(gè)菜單選項(xiàng)有相應(yīng)的快捷鍵列表。但具有子菜單的菜單或者頂層菜單的快捷鍵要按Windows的界面設(shè)計(jì)原則設(shè)置,頂層菜單的快捷鍵形式是“Alt+字母鍵”。 結(jié)合以上原則,VB菜單編程有以下6方面的技術(shù)和技巧。 3.菜單選項(xiàng)的允許與禁止、可見與隱藏 菜單選項(xiàng)的允許與禁止是通過改變選項(xiàng)的Enabled屬性實(shí)現(xiàn)的。 舉例來(lái)說(shuō),假設(shè)菜單選項(xiàng)名為Mainmen,則禁止該選項(xiàng)可以用Mainmen.Enabled=False。 同樣,隱藏一個(gè)選項(xiàng)可用Mainmen.Vsible=False來(lái)實(shí)現(xiàn),恢復(fù)時(shí)用Mainmnue.Visible=True實(shí)現(xiàn)。
3.菜單選項(xiàng)的允許與禁止、可見與隱藏 4.彈出式菜單的實(shí)現(xiàn)(PopupMenuMethod) 彈出式菜單是在程序界面的一定區(qū)域內(nèi)按鼠標(biāo)鍵后出現(xiàn)的菜單,多用于實(shí)現(xiàn)系統(tǒng)的附加或增強(qiáng)功能。彈出式菜單的實(shí)現(xiàn)要用到下拉式菜單設(shè)計(jì)的技術(shù)和PopupMenu方法。具體做法是:在菜單設(shè)計(jì)框里設(shè)計(jì)好相應(yīng)窗體的彈出式菜單(注意,要彈出的菜單必須至少有一個(gè)子菜單,因而這個(gè)菜單不能有快捷鍵,并且Checked屬性必須是False),再把彈出式菜單的Visible屬性改為False。 4.彈出式菜單的實(shí)現(xiàn)(PopupMenuMethod 在具有彈出式菜單的窗體的Form_Click中加入以下代碼(假設(shè)彈出式菜單的Name屬性是Mnuexample): SubForm_Click() PopupMenuMnuExample EndSub 如果要求只有按下鼠標(biāo)左鍵或右鍵才能激活菜單,就必須在form_mousedown里加入以下代碼: SubForm_MouseDown(ButtonAsInteger,shiftAsInteger,xAsSingle,yAsSingle)
在具有彈出式菜單的窗體的Form_Click中加入以下代IfButton=2ThenButton=2'表示鼠標(biāo)右鍵 PopupMenuMenuExample EndIf PopupMenu的完整語(yǔ)法是 [form.]PopupMenuMenuName[flags[,x[,y]]] 改變flags的值可以控制彈出式菜單的表現(xiàn)形式。flags有兩組值:一組值用來(lái)控制菜單的顯示方式,包括PopupMenu_Leftalign、PopupMenu_CenterAlign和PopupMenu_RightAlign,分別表示以x為左邊界、以x為中心和以x為右邊界的顯示方式,缺省為以x為左邊界。IfButton=2ThenButton=2 一組值用來(lái)控制菜單項(xiàng)的選中方式,包括PopupMenu_LeftButton和PopupMenu_RightButton,分別表示左鍵選中和右鍵選中,兩個(gè)值可同時(shí)使用,左鍵選中為缺省方式。flags的值由上面的兩組值經(jīng)過or運(yùn)算得出。例如,要左對(duì)齊顯示并且以左鍵選中為準(zhǔn),則應(yīng)有。 flags=PopupMenu_LeftAlignorPopupMenu_LeftButton x和y用來(lái)定義菜單彈出的位置,缺省是鼠標(biāo)點(diǎn)中的位置。 一組值用來(lái)控制菜單項(xiàng)的選中方式,包括PopupMenu_ 5.菜單項(xiàng)的其他屬性 用Alt+字母鍵激活頂層菜單,或者在菜單激活后用字母鍵激活一個(gè)菜單項(xiàng),必須使用&。&用在菜單項(xiàng)的標(biāo)題屬性(Caption)里。它的用法和作用與在用C語(yǔ)言編制Windows程序中的用法和作用相同。 如果希望頂層菜單之間的間隔大一些,或者某個(gè)頂層菜單出現(xiàn)在菜單條的最右端,就要用到標(biāo)題屬性是空格的菜單。如一個(gè)菜單的標(biāo)題是由多個(gè)空格組成的,那么這個(gè)菜單在菜單條上就占用跟空格的個(gè)數(shù)相應(yīng)的空間,并且它后面的菜單也順序地后移。 5.菜單項(xiàng)的其他屬性 6.位圖菜單 在通常的程序中菜單總是以文本的方式存在,有時(shí)候顯得單調(diào)乏味,如果能在菜單中加入位圖圖形,將會(huì)極大地增加用戶的使用興趣。下面介紹如何使用位圖制作菜單選項(xiàng)。 位圖菜單的創(chuàng)建,要用到Windows應(yīng)用程序接口(API)函數(shù),需要將這些函數(shù)的聲明包含在應(yīng)用程序的標(biāo)準(zhǔn)模塊(Module1.Bas)中,具體的內(nèi)容見下面的程序。 創(chuàng)建位圖菜單的基本思想如下: (1)使用函數(shù)GetsubMenu來(lái)提取子菜單項(xiàng)的句柄,并通過使用函數(shù)CreateCompatibleDC來(lái)創(chuàng)建一個(gè)兼容的設(shè)備環(huán)境描述表。 6.位圖菜單 (2)在一個(gè)循環(huán)過程中通過使用CreateCompatibleBitmap函數(shù)、SelectObject函數(shù)以及BitBlt函數(shù)來(lái)分別將針對(duì)各個(gè)菜單項(xiàng)所載入的位圖選入到兼容設(shè)備環(huán)境中。載入位圖的方法很多,在下面的程序中,我們?cè)诖绑w上設(shè)置了4個(gè)圖片框控件(PictureBox),使用它門載入4個(gè)預(yù)設(shè)的圖標(biāo)來(lái)作為菜單選項(xiàng)位圖的源文件。當(dāng)然也可以使用其他的方法,例如,在程序中使用LoadPicture函數(shù)來(lái)從磁盤裝載位圖。 (3)通過ModifyMenu函數(shù)繪制真正的位圖菜單選項(xiàng)。 (4)使用Deletedc函數(shù)來(lái)釋放設(shè)備環(huán)境,以便其他的程序可以使用這些設(shè)備。 (2)在一個(gè)循環(huán)過程中通過使用CreateCompat 工程文件的建立步驟如下: (1)在VisualBasic中建立一個(gè)新的工程,采用缺省的方法建立Form1。 (2)創(chuàng)建一個(gè)新的模塊,采用缺省的方法建立Module1.Bas。 (3)在Form1上添加4個(gè)圖片框控件(使用控件數(shù)組),將它們的Name屬性設(shè)置為Picture1,將它們的Index屬性依次設(shè)置為0、1、2、3,將它們的AutoRedrew屬性、AutoreSize屬性設(shè)置為Ture,將它們的Appearance屬性、BorderStyle屬性設(shè)置為0,Visble屬性設(shè)置為False。 工程文件的建立步驟如下: (4)將Open.Bmp、About.Bmp、Help.Bmp、Quit.Bmp4個(gè)圖標(biāo)文件賦給上面的4個(gè)圖片框控件的Picture屬性。 (5)在Form1上添加一個(gè)菜單項(xiàng),將其標(biāo)題設(shè)置為“主菜單(&F)”,名稱設(shè)置為Mnumain。在其下添加4個(gè)子菜單項(xiàng),分別將這4個(gè)子菜單項(xiàng)的名稱設(shè)置為“打開(&O)”。將“關(guān)于(&A)",“幫助(&H)”及“退出(&E)”的名稱設(shè)置為“Mnumain_Select”,并將這4個(gè)子菜單項(xiàng)的索引相應(yīng)設(shè)置為0、1、2、3。 (4)將Open.Bmp、About.Bmp、Help11.3圖形、圖像程序設(shè)計(jì)技術(shù) 11.3.1VB坐標(biāo)系統(tǒng)及圖形格式 1.坐標(biāo)系統(tǒng)概述 在進(jìn)行圖形操作時(shí),要使用繪圖區(qū)或容器的坐標(biāo)系統(tǒng)。如何用坐標(biāo)系統(tǒng)定義窗體和控件在應(yīng)用程序中的位置,是很重要的。 在VB中,坐標(biāo)系統(tǒng)是一個(gè)二維網(wǎng)格,可定義屏幕上、窗體中或其他容器中的位置。使用窗體中的坐標(biāo)(x,y),可定義網(wǎng)格上的位置。其中x值是沿x軸的位置,最左端的值是0;y值是沿y軸的位置,最上端的值是0。11.3圖形、圖像程序設(shè)計(jì)技術(shù) 11.3.1VB坐標(biāo) 對(duì)于VB坐標(biāo)系統(tǒng),應(yīng)注意以下幾點(diǎn): (1)當(dāng)移動(dòng)或調(diào)整控件的大小時(shí),要使用控件容器的坐標(biāo)系統(tǒng)。直接在窗體上繪制對(duì)象時(shí),窗體就是容器;在框架或圖片框里繪制控件時(shí),框架或控件是容器。 (2)所有的圖形和Print方法都要使用容器的坐標(biāo)系統(tǒng)。 (3)一些用來(lái)調(diào)整窗體大小或移動(dòng)窗體的語(yǔ)句,可設(shè)置窗體的位置和大小。
對(duì)于VB坐標(biāo)系統(tǒng),應(yīng)注意以下幾點(diǎn): (4)當(dāng)創(chuàng)建用來(lái)調(diào)整窗體大小或移動(dòng)窗體的代碼時(shí),應(yīng)先檢查Screen對(duì)象的Height屬性和Width屬性,以確保窗體在屏幕上大小合適。 (5)屏幕的左上角總是(0,0)。任何容器的缺省坐標(biāo)系統(tǒng)都是由容器的左上角(0,0)坐標(biāo)開始的。 (6)沿坐標(biāo)軸定義位置的測(cè)量單位,統(tǒng)稱為刻度。在VB中,坐標(biāo)系統(tǒng)的每個(gè)軸都有自己的刻度。坐標(biāo)軸的方向、起點(diǎn)和坐標(biāo)系統(tǒng)的刻度都是可以改變的。 (7)所有VB的移動(dòng)、調(diào)整大小和圖形繪制語(yǔ)句都根據(jù)缺省規(guī)定使用“緹”為單位。 (4)當(dāng)創(chuàng)建用來(lái)調(diào)整窗體大小或移動(dòng)窗體的代碼時(shí),應(yīng) 2.VB的圖形格式 VB可以支持的圖形格式有位圖(.bmp)、設(shè)備獨(dú)立位圖文件(.dib)、圖標(biāo)(.ico)文件、光標(biāo)(.cur)文件、元(.wmf)文件、增強(qiáng)的元文件(.emf)、GIF(.gif)文件以及JPEG(.jpg)文件。 11.3.2PaintPicture方法和BitBltApi函數(shù) PaintPicture的基本功能是傳輸圖像塊。它能快速地將兩幅位圖進(jìn)行合并;能將位圖的全部或某一部分快速剪切并粘貼到其他地方;能將位圖自動(dòng)延伸或壓縮以適應(yīng)新的環(huán)境;能在屏幕上不同位置之間、屏幕與內(nèi)存之間傳遞位圖;它采用32位三元光柵操作代碼(Rasterop)在源位圖、選定的刷子位圖和目標(biāo)位圖之間進(jìn)行顏色組合,生成目標(biāo)位圖中的最終顏色;它將13個(gè)常用的Rasterop操作以內(nèi)部常量形式給出,不需任何聲明。 2.VB的圖形格式 1.PaintPicture方法 (1)作用:在Form,PictureBox或Printer上繪制圖形文件的內(nèi)容。 (2)語(yǔ)法:Object.PaintPicturePicture,x1,y1,Width1,Height1,x2,y2,Width2,Height2,Opcode (3)參數(shù)說(shuō)明: ˙Object是可選的。一個(gè)對(duì)象表達(dá)式的值可以為窗體、PictureBox控件或Printer。如果省略O(shè)bject,則為當(dāng)前具有焦點(diǎn)的對(duì)象。 ˙Picture是必選的。要繪制到Object上的圖形源、Form或PictureBox必須是Picture屬性。 1.PaintPicture方法 ˙Width1是可選的(目標(biāo)位圖參數(shù))。它用于指示Picture的目標(biāo)寬度。 ˙Height1是可選的(目標(biāo)位圖參數(shù))。它用于指示Picture的目標(biāo)高度。 ˙x2,y2是可選的(源位圖參數(shù))。它用于指示Picture內(nèi)剪貼區(qū)的坐標(biāo)(x軸和y軸)。 ˙Width2是可選的(源位圖參數(shù))。它用于指示Picture內(nèi)剪貼區(qū)的源寬度。 ˙Height2是可選的(源位圖參數(shù))。它用于指示Picture內(nèi)剪貼區(qū)的源高度。
˙Width1是可選的(目標(biāo)位圖參數(shù))。它用于指示Pic ˙Opcode是可選的。它是長(zhǎng)型值或僅有位圖使用的代碼,表示源圖與目標(biāo)位圖(或刷子位圖)的組合關(guān)系,用來(lái)定義在將Picture繪制到Object上時(shí)對(duì)Picture執(zhí)行的位操作。 2.BitBltApi函數(shù) (1)作用:與PaintPictur方法相同。 (2)函數(shù)聲明: DeclareFuntionBitBltLib"Gdi32"Alias"Bitblt(ByValhDestDCAsLong,ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong ˙Opcode是可選的。它是長(zhǎng)型值或僅有位圖使用的 (3)參數(shù)說(shuō)明: ˙hDestDC:目標(biāo)設(shè)備環(huán)境。 ˙x:目標(biāo)左上角坐標(biāo)。 ˙y:目標(biāo)頂端坐標(biāo)。 ˙nWidth:目標(biāo)寬。 ˙nHeight:目標(biāo)高。 ˙hSrcDC:源設(shè)備環(huán)境。 ˙xSrc:源左上角坐標(biāo)。 ˙ySrc:源頂端坐標(biāo)。 ˙dwRop:位處理操作。 (3)參數(shù)說(shuō)明: 注意:將一個(gè).BMP加載入PictureBox控件和使用WindowsAPI函數(shù)BitBlt()添加圖片之間有一點(diǎn)不同。當(dāng)對(duì)一個(gè)圖像使用BitBlt()時(shí),PictureBox控件不能像使用LoadPicture方法那樣去調(diào)整大小。 假設(shè)有四個(gè)圖像文件(pic1.jpg~pic4.jpg),如圖11-2所示,想讓這四幅畫自動(dòng)地循環(huán)顯示,每幅畫以某種切換方式出現(xiàn),單擊“結(jié)束”按鈕時(shí)退出。 注意:將一個(gè).BMP加載入PictureBox控件和使用圖11-2四幅畫面切換的圖像技巧圖11-2四幅畫面切換的圖像技巧 設(shè)計(jì)步驟如下: 1)創(chuàng)建項(xiàng)目文件 加入一個(gè)新的模塊文件Module1及一個(gè)新的窗體Form1。在Form1中加入一個(gè)圖片框Picture1,一個(gè)命令按鈕Command1,一個(gè)標(biāo)簽Label1和一個(gè)定時(shí)器控件Timer1。 2)各對(duì)象的屬性如下: BeginVB.FormForm1 AutoRedraw =-1'True Caption ="四種圖像特技演示" ClientHeight =1920 ClientLeft =6915 設(shè)計(jì)步驟如下:ClientTop =4620ClientWidth =3540LinkTopic ="Form1"ScaleHeight =128ScaleMode =3'PixelScaleWidth =236EndBeginVB.CommandCommand1Caption ="結(jié)束"Height =375ClientTop =4620Left =2280TabIndex =2Top =1440Width =1215EndBeginVB.TimerTimer1Left =0Top =0EndLeft =2280BeginVB.PictureboxPicturelAppearance =0'FlatAutoRedraw =-1'TrueBackColor =&H80000005&ForeColor =&H80000008&Height =1260Left =2280ScaleHeight =82ScaleMode =3'PixelBeginVB.PictureboxPicturelScaleWidth =82TabIndex =0Top =0Width =1260EndBeginVB.labelLabel1AutoSize =-1'TrueCaption ="請(qǐng)稍侯..."BeginPropertyFontScaleWidth =82Name ="宋體"Size =12Charset =134Weight =400Underline =0'FalseItalic =0'FalseStrikethrough =0'FalseEndPropertyName ="宋體"Height =240Left =0TabIndex =1Top =1440Width =1080End程序代碼:Module1.bas中的內(nèi)容(聲明BitBlt函數(shù)):DeclareFunctionBitBltLib"gdi32"(ByValhDestDCAsLong,ByValxAsLong,ByvalyAsLong,ByValnWidthAsLong,ByValnHeightAslong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLongPublicConstSRCCOPY=&HCC0020Height =240 (2)Form1中的代碼: '在"通用"段中定義全局變量 Constjpgfilemax=4'總共四個(gè)jpg文件 Dimjpgfile(jpgfilemax)AsString'jpg文件的文件名數(shù)組 Dimdrawjpgmode(jpgfilemax)AsInteger'各畫顯示時(shí)的切換方式 Dimjpgnum,movestep,xmax,ymax,ymaxAsInteger DimkxyAsSingle'x,y兩個(gè)方向的比例,程序運(yùn)行時(shí)先作初始化工作 PrivateSubCommand1_Click()'響應(yīng)鼠標(biāo)單擊事件
PrivateSubForm_Load() (2)Form1中的代碼:jpgnum=0'當(dāng)前文件號(hào)為0,第一個(gè)文件jpgfile(0)=App.Path+"\Picl.jpg"'四幅圖片保存在當(dāng)前工程文件所在的目錄下jpgfile(1)=App.Path+"\Pic2.jpg"jpgfile(2)=App.path+"\Pic3.jpg"jpgfile(3)=App.path+"\Pic4.jpg"drawjpgmode(0)=1drawjpgmode(1)=2drawjpgmode(2)=3jpgnum=0'當(dāng)前文件號(hào)為0,第一個(gè)文件drawjpgmode(3)=4movestep=0'步進(jìn)參數(shù)xmax=Form1.ScaleWidth/2ymax=Form1.ScaleHeight/2kxy=ymax/xmaxPicture1.Picture=LoadPicture(jpgfile(jpgnum))'裝入圖像Timer1.Interval=50'定時(shí)器啟動(dòng)EndSubdrawjpgmode(3)=4'切換畫面工作在定時(shí)器中完成PrivateSubTimer1_Timer()hDestDC=Form1.hDC'目標(biāo)DChSrcDC=Picture1.hDC'源DC,畫是從不可見的Picture1中拷貝到窗體的drawflag=drawjpgmode(jpgnum)'當(dāng)前畫出現(xiàn)的方式SelectCasedrawflagCase1'從中間逐步放大Labell.Caption="從中間逐步放大"endmax=xmax'用于結(jié)束判斷'切換畫面工作在定時(shí)器中完成 x1=xmax-movestepw=movestep*2y1=CInt(ymax-movestep*kxy)h=Cint(2*movestep*kxy)i=BitBlt(hDestDC,x1,y1,w,h,hSrcDC,x1,y1,SrcCopy)Case2'從左到右Label1.Caption=“從左到右”endmax=xmaxw=movestep*2h=Form1.ScaleHeighti=BitBlt(hDextDC,0,0,w,h,hSrcDC,x1,y1,SrcCopy) x1=xmax-movestepCase3'左右向中間Label1.Caption="從右到左"endmax=xmaxw=movesteph=Form1.ScaleHeighti=BitBlt(hDestDC,0,0,w,h,hSrcDC,0,0,SrcCopy)'左面部分x1=Form1.ScaleWidth-movestepi=BitBlt(hDestDC,x1,0,(-1)*w,h,hSrcDC,x1,0,SrcCopy)'右面部分Case3'左右向中間Case4'柵條狀Label1.Caption="柵條狀"endmax=CInt(2*xmax/10)'共分為10條柵條tempi=CInt(2*xmax/10)w=movesteph=Form1.ScaleHeightForij=0To9i=BitBlt(hDestDC,tempi*ij,0,w,h,hSrcDC,tempi*ij,0,SrcCopy)NextijEndSelectCase4'柵條狀Form1.Refreshmovestep=movestep+2'步進(jìn)增加Ifmovestep>endmaxThen'若步進(jìn)夠大,畫面都已顯示,本張畫結(jié)束切換jpgnum=jpgnum+1'進(jìn)到下一張畫Ifjpgnum>=jpgfilemaxThen'若5張畫已顯示完則再?gòu)牡谝粡堥_始
Form1.Refreshjpgnum=0EndIfmovestep=0Picture1.Picture=LoadPicture(jpgfile(jpgnum))'裝入圖像EndIfEndSubjpgnum=0 11.3.3LoadPicture函數(shù)和SavePicture語(yǔ)句 1.LoadPicture函數(shù) (1)作用:將圖形載入到窗體的Picture屬性、PictureBox控件或Image控件。 (2)語(yǔ)法:LoadPicture([Filename],[Size],[ColorDepth],[x,y]) (3)參數(shù)說(shuō)明: ˙FileName是可選的。選中此參數(shù)后,字符串表達(dá)式指定一個(gè)文件名,可以包括文件夾和驅(qū)動(dòng)器。如果未指定文件名,LoadPicture清除圖像或PictureBox控件。 11.3.3LoadPicture函數(shù)和SavePic ˙Size可選變體。如果FileName是光標(biāo)或圖標(biāo)文件,該參數(shù)用于指定想要的圖像大小。 ˙ColorDepth可選變體。如果FileName是一個(gè)光標(biāo)或圖標(biāo)文件,該參數(shù)用于指定想要的顏色深度,見表11-1。 ˙Size可選變體。如果FileName是光標(biāo)或圖標(biāo)文表11.1指定顏色深度表11.1指定顏色深度 ˙x可選變體,如果使用y,則必須使用。只有當(dāng)ColorDepth設(shè)為vbLPCustom時(shí),才使用x和y值。 ˙y可選變體。使用同x 注:賦值不帶參數(shù)的LoadPicture將清除窗體、圖片框及圖像控件中的圖形。為了加載PictureBox控件和Image控件中顯示的圖形或加載作為窗體背景的圖形,必須將LoadPicture的返回值賦給要顯示該圖片的對(duì)象的Picture屬性。例如: SetPicture=LoadPicture("Party.Bmp") SetPicture1.Picture=LoadPicture("Party.Bmp") ˙x可選變體,如果使用y,則必須使用。只有當(dāng)Colo 如果要將圖標(biāo)賦予窗體,則要把LoadPicture函數(shù)的返回值賦給Form1對(duì)象Icon屬性,即 SetForm1.Icon=LoadPicture("Myicon.Ico") 圖標(biāo)也可以被賦予除Timer控件和Menu控件以外的其他控件的DragIcon屬性,例如: SetCommand1.DragIcon=LoadPicture("Myicon.Ico") 使用LoadPicture可以將圖形文件載入到系統(tǒng)剪貼板,程序代碼如下: Clipboard.SetDataLoadPicture("Party.Bmp")
如果要將圖標(biāo)賦予窗體,則要把LoadPicture函數(shù)的 2.LoadPicture函數(shù)實(shí)例 本例使用LoadPicture函數(shù)將圖片加載到窗體的PictureBox控件并從控件上清除掉該圖片。程序運(yùn)行后,單擊窗體,即可看到所加載的圖片。 對(duì)象屬性設(shè)置如下:BeginVB.FormForm1Caption = "Form1"ClientHeight = 3540ClientLeft = 1650
2.LoadPicture函數(shù)實(shí)例 Clienttop = 1590ClientWidth = 5010LinkTopic = "Form1"ScaleHeight = 3540ScaleWidth = 5010 BeginVB.PictureBoxPicture1Height = 615Left = 2160
Clienttop = ScaleHeight = 555ScaleWidth = 675TabIndex = 0Top = 1200Width = 735 BeginVB.PictureBoxPicture1Height = 615Left = 2160ScaleHeight = 555ScaleWidth = 675
ScaleHeight = 555BeginVB.PictureBoxPicture1Height = 615Left = 2160ScaleHeight = 555ScaleWidth = 675TabIndex = 0Top = 1200Width = 735EndEndBeginVB.PictureBoxPicture1 程序代碼如下:PrivateSubForm_Click()DimMsgAsString'聲明變量OnErrorResumeNext'設(shè)置錯(cuò)誤句柄Height=3990Width=4890'設(shè)置高度和寬度Picture1.Picture=LoadPicture(App.Path+"\arrow.CUR",vbLPCustom,vbLPColor,32,32)加載光標(biāo)IfErrThenMsg="Couldn'tfindthe.curfile." 程序代碼如下:MsgBoxMsg'顯示錯(cuò)誤消息ExitSub'如果發(fā)生錯(cuò)誤則退出EndIfMsg="ChooseOKtoclearthebitmapfromtheform."MsgBoxMsgPicture1.Picture=LoadPicture()'清除PictureBoxEndSubMsgBoxMsg'顯示錯(cuò)誤消息 11.3.4Pset、Circle、Line繪圖方法 除了圖形控件(Line控件、Shape控件)之外,VB還提供了創(chuàng)建圖形的一些方法,見表11-2。表11-2創(chuàng)建圖形方法 11.3.4Pset、Circle、Line繪圖方法表 在任意位置畫出圖形 用圖形方法創(chuàng)建圖形是在代碼中進(jìn)行的,這就意味著,必須運(yùn)行應(yīng)用程序才能看到圖形方法的結(jié)果。因而,對(duì)于創(chuàng)建界面的簡(jiǎn)單設(shè)計(jì)元素來(lái)說(shuō),圖形方法不能代替圖形控件的作用。設(shè)計(jì)時(shí)改變圖形控件的外觀,比修改并測(cè)試圖形方法的代碼容易。 以下簡(jiǎn)單介紹Pset、Circle和Line方法。 在任意位置畫出圖形 1.Pset方法 (1)作用:將屏幕上的點(diǎn)設(shè)置為指定顏色。 (2)語(yǔ)法:Object.Pset[Step](x,y),[Color]。 (3)參數(shù)說(shuō)明: ˙Object是可選的。即對(duì)象表達(dá)式,其值為“應(yīng)用于”列表中的對(duì)象。 ˙Step是可選的。該關(guān)鍵字用于指定相對(duì)于由CurrentX和CurrentY屬性停工的當(dāng)前圖形位置的坐標(biāo)。 ˙(x,y)是必選的。它是被設(shè)置點(diǎn)的坐標(biāo)。 ˙Color是可選的。用于為點(diǎn)指定RGB顏色。
1.Pset方法(4)Pset方法實(shí)例:用Pset方法在窗體上畫五色碎紙。SubForm_Click()DimCX,CY,Msg,xPos,yPos'DeclareVariables.ScaleMode=3 '設(shè)置ScaleMode為像素DrawWidth=5 '設(shè)置DrawWidthForeColor=QBColor(4) '設(shè)置前景為紅色FongtSize=24 '設(shè)置點(diǎn)的大小CX=ScaleWidth/2 '得到水平中點(diǎn)CY=ScalseHeight/2 '得到垂直中點(diǎn)Cls '清窗體(4)Pset方法實(shí)例:用Pset方法在窗體上畫五色碎紙Msg="HappyNewYear!"CurrentX=CX-TextWidth(Msg)/2 '水平位置CurrentY=CY-TextHeight(Msg) '垂直位置PrintMsg '打印消息DoxPos=Rnd*ScaleWidth '得到水平位置yPos=Rnd*ScaleHeight '得到垂直位置Pset(xPos,yPos),QBColor(Rnd*15) ‘畫五彩碎紙DoEvents '進(jìn)行Loop '其他處理EndSubMsg="HappyNewYear!" 2.Circle方法 (1)作用:在對(duì)象上畫圓、橢圓或圓弧。 (2)語(yǔ)法:Object.Circle[Step](x,y), Radius,[Color,Start,End,Aspect] (3)參數(shù)說(shuō)明: ˙Object是可選的。對(duì)象表達(dá)式。 ˙Step是可選的。該關(guān)鍵字用于指定圓、橢圓或圓弧的中心。 ˙(x,y)是必選的。它是被設(shè)置為圓、橢圓或圓弧的中心點(diǎn)的坐標(biāo)。 ˙Radius是必選的。它是半徑 2.Circle方法 ˙Color是可選的。它用于指定圓輪廓的RGB顏色。 ˙Start,End是可選的。當(dāng)圓弧或部分圓或橢圓畫完以后,Start和End指定弧的起點(diǎn)和終點(diǎn)位置。 ˙Aspect是可選的。用于指定圓的縱橫尺寸比例。 (4)Circle方法實(shí)例:用Circle方法在窗體中央畫許多同心圓。 SubForm_Click() DimCX,CY,Radius,Limit '聲明為變量 ScaleMode=3 '以像素為單位 ˙Color是可選的。它用于指定圓輪廓的RGB顏色。 CX=ScaleWidth/2 'X位置 CY=Scaleheight/2 'Y位置 IfCX>CYThenLimit=CYElseLimit=CX ForRadius=0ToLimit Circle(CX,CY),Radius,RGB(Rnd*255,Rnd*255,Rnd*255) NextRadius EndSub CX=ScaleWidth/2 'X位置 3.Line方法 (1)作用:在對(duì)象上畫直線和矩形。 (2)語(yǔ)法: Object.Line[Step](x1,y1)[Step](x2,y2),[Color],[B][F] (3)參數(shù)說(shuō)明: ˙Object是可選的。對(duì)象表達(dá)式。 ˙Step是可選的。該關(guān)鍵字用于指定起點(diǎn)坐標(biāo)。 ˙(x1,y1)是必選的。是直線或矩形的起點(diǎn)坐標(biāo)。 ˙Step是可選的。該關(guān)鍵字用于指定相對(duì)于起點(diǎn)的終點(diǎn)坐標(biāo)。 3.Line方法 ˙(x2,y2)是必需的。是終點(diǎn)坐標(biāo)。 ˙Color是可選的。它用于指定畫線時(shí)用的RGB顏色。 ˙B是可選的。如果選上該參數(shù),則可利用對(duì)角坐標(biāo)畫出矩形。 ˙F是可選的。如果使用了B選項(xiàng),則F選項(xiàng)規(guī)定矩形以矩形邊框的顏色填充。不能不用B而用F。如果不用F而只用B,則矩形用當(dāng)前的FillColor和FillStyle填充。 注:畫連接線時(shí),前一條線的終點(diǎn)就是后一條線的起點(diǎn)。線的寬度取決于DrawWidth屬性值。 ˙(x2,y2)是必需的。是終點(diǎn)坐標(biāo)。 11.3.5利用VB進(jìn)行圖像處理 1.在圖片上平滑移動(dòng)文字 要想使文字在圖片上平滑移動(dòng),可用以下方法實(shí)現(xiàn): (1)新建一工程文件,并創(chuàng)建Form1。在Form1上放置PictureBox控件Picture1,選定背景圖片。另外,放置一Timer控件Timer1,設(shè)置Enabled屬性為True,設(shè)置Interval為100。 (2)單擊選擇Picture1,在PictureBox的底部放置Label控件Label1,并設(shè)置Lable1的BackStyle屬性為0(透明),設(shè)置Caption為待移動(dòng)的字符串。 各對(duì)象屬性如下所示: BeginVB.FormForm1 Caption="在圖片上平滑移動(dòng)文字" 11.3.5利用VB進(jìn)行圖像處理ClientHeight=5400ClientLeft=1650ClientTop=1590ClientWidth=8265LinkTopic="Form1"ScaleHeight=5400ScaleWidth=8265BeginVB.PictureBoxPicture1Height=4995Left=135ClientHeight=5400Picture="Form1.frx":0000ScaleHeight=4935ScaleWidth=7920TabIndex=0Top=180Width=7980BeginVB.TimerTimer1Interval=100Left=180Top=3960EndPicture="Form1.frx":0000BeginVb.LabelLabel1Alignment=2BackStyle=0Caption="VB圖像處理技術(shù)"BeginPropertyFontName="宋體"Size=42Charset=134Weight=700BeginVb.LabelLabel1 Underline=0 Italic=0 Strikethrough=0 EndProperty ForeColor=&H000000FF& Height=1725 Left=945 TabIndex=1 Top=2925 Width=5775
Underline=0 End Eed Eed 程序代碼如下: PrivateSubForm_Load() label1.Top=Picture1.ScaleHeight EndSub PrivateSubTimer1_Timer() istep=20 Label1.Top=Label1.Top-istep End IfLabel1.Top<=-Label1.HeightThen'當(dāng)文字移動(dòng)到頂部時(shí),重新從底部開始移動(dòng) Label1.Top=Picture1.ScaleHeight EndIf EndSub程序代碼如下:PrivateDeclareFunctionReleaseDCLib"User32"(ByValHawndAsLong,ByValHdcAsLong)AsLongPrivateDeclareFunctionOpenClipboardLib"User32"(ByValHAwndAsLong)AsLongPrivateDeclareFunctionEmptyClipboardLib"User32"()AsLong IfLabel1.Top<=-Label1.HeighPrivateDeclareFunctionSetClipboardDataLib"User32"(ByValWFormatAsLong,ByValhMemAsLong)AsLongPrivateDeclareFunctionSelectObjectLib"Gdi32"(ByValHdcAsLong,ByValhObjectAsLong)AsLongPrivateDeclareFunctionDeleteDCLib"Gdi32"(ByValHdcAsLong)AsLongPrivateDeclareFunctionBitBltLib"Gdi32"(ByValhDestDCAsLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopasLong)AsLongPrivateDeclareFunctionSetCl PrivateDeclareFunctionCreateDCLib"Gdi32"Alias"CreateDCA"(ByVallpDriverNameAsString,ByVallpDeviceNameAsString,ByVallpOutputAsString,LpinitDataAsLong)AsLong PrivateDeclareFunctionCreateCompatibleDCLib"Gdi32"(ByValHdcAsLong)AsLong PrivateDeclareFunctionCreateCompatiBlebitmapLib"Gdi32"(ByValHdcAsString,ByValnWidthAsString,ByValNheightAsLong)AsLong
PrivateDeclareFunctionCre PrivateDeclareFunctionCloseClipboardLib"User32"()AsLong ‘函數(shù)Screencap()將以(Lt,Top)為左上角坐標(biāo),寬度為rWidth、高度為rHeight區(qū)域的位圖拷貝到剪貼板SubScreencap(Lt,Top,Rt,Bot) rWidth=Rt-Lt rHeight=Bot-Top sourceDC=CreateDC("display",0,0,0) '獲得系統(tǒng)顯示設(shè)備的句柄 PrivateDeclareFunctionClo DestDC=CreateCompatibleDC(SourceDC,rWidth,rHeight) '在內(nèi)存中建立系統(tǒng)顯示器的句柄 bHandle=CreateCompatibleBitmap(Sourcedc,rWidth,rHeight) SelectObjectDestDC,bHandle ‘選定位圖與內(nèi)存相關(guān)聯(lián)BitbleDestDC,0,0,rWidth,rHeight,SourceDC,LT,Top,&hccoo20Wnd=Screen.activeform.hwndOpenClipboardWnd '指定由當(dāng)前活動(dòng)窗體獨(dú)占使用剪貼板 DestDC=CreateCompatibleDC(So EemptyClipboard '將剪貼板清空 SetClipboardData2,bHandle '將內(nèi)存中的位圖拷貝到剪貼板 CloseClipboard '關(guān)閉獨(dú)占方式 DeleeDCDestDC '刪除DESTDC ReleaseDCbHandle,Sourcedc ‘釋放 bHandle,SourceDCEndSub EemptyClipboard '將剪貼板清空 SubCommand1_Click() Form1.visible=False Screencap0,0,320,240 Form1.visible=True Picture1=Clipboard.getdata() EndSub 程序運(yùn)行后,單擊“捕捉”按鈕后,將捕捉以(0,0)為中心的320×240大小的屏幕圖像,并放到Picture1中。 SubCommand1_Click() 2.圖像的滾動(dòng)顯示和縮放 下面我們介紹如何利用VB的PictureBox和滾動(dòng)條控件,實(shí)現(xiàn)圖像的滾動(dòng)和縮放。程序中使用了兩個(gè)圖片Picture1和Picture2,其中,Picture1作為包容器,Picture2作為子圖片框顯示圖形,配合滾動(dòng)條控件在包容器內(nèi)移動(dòng)子圖片框就可實(shí)現(xiàn)畫面的滾動(dòng)。Picture2中圖形的顯示采用了前面介紹過的PaintPicture方法(見6.1.2節(jié)),它可以在窗體、圖片框上的任何地方繪制圖形。 下面先介紹窗體的設(shè)計(jì)。 2.圖像的滾動(dòng)顯示和縮放 如圖11-3所示,首先在窗體中放置Picture1作為包容器,然后在其中放置Picture2,最后在窗體中再放置兩個(gè)滾動(dòng)條(一個(gè)為水平滾動(dòng)條HScroll1,另一個(gè)為滾動(dòng)條VScroll1)。Picture2的AutoSize屬性為True,BorderStyle屬性為0,AutoRedRaw屬性為True,滾動(dòng)條的LargeChang和SmallChange屬性設(shè)為合適大小。 如圖11-3所示,首先在窗體中放置Picture1作為包圖11-3圖像的滾動(dòng)顯示圖11-3圖像的滾動(dòng)顯示 以下為完整的程序。 各對(duì)象的屬性定義如下: BeginVB.FormForm1 Caption ="圖像滾動(dòng)顯示" ClientHeight =4995 ClientLeft =3165 ClientTop =2445 ClientWidth =6720 LinkTopic ="Form1" ScaleHeight =4995 ScaleWidth =6720 以下為完整的程序。BeginVB.VScrollBarVScroll1Height =4650LargeChange =300Left =6210SmallChange =10TabIndex =3Top =45Width =330EndBeginVB.VScrollBarVScroll1BeginVB.HScrollBarHScroll1Height =330LargeChange =300Left =45SmallChange =10TabIndex =2Top =4365Width =6090EndBeginVB.HScrollBarHScroll1BeginVB.PictureBoxPicture1Height =4155Left =90ScaleHeight =4095ScaleWidth =5940TabIndex =0Top =90Width =6000BeginVB.PictureBoxPicture2BeginVB.PictureBoxPicture1AutoRedraw =-1'TrueAutoSize =-1'TrueBorderStyle =0'NoneHeight =2760Left =630ScaleHeight =2760ScaleHeight =4605TabIndex =1
AutoRedraw =-1'True Top =675 Width =4605 End End End 程序代碼如下: Publicc1,c2,c3,c4AsInteger Publictf,d1,d2,d3,d4,blfAsInteger Publicyk,yqAsLong PrivateSubForm_Load() c1=Form1.Width Top =675 c2=Form1.Height blf=100 picture2.Picture=LoadPicture("G:\MyDocuments\實(shí)例\corel.jpg") yk=Picture2.Width yg=Picture2.Height EndSub PrivateSubForm_Resize()
c2=Form1.HeightIfWidth>1500AndHeight>1770Then c3=Form1.Width-c1 c4=Form1.Height-c2 Picture1.MovePicture1.Left,Picture1.Top,Picture1.Width+c3,Picture1.Height+c4c1=Form1.Widthc2=Form1.HeightCallpIfWidth>1500AndHeight>1 EndIf Picture2.SetFocus EndSub '以拖放方式滾動(dòng)畫面 PrivateSubPicture2_DragDrop(SourceAsConctrol,xAsSingle,yAsSingle) IfPicture2.Height>Picture.HeightThen'通過計(jì)算機(jī)鼠標(biāo)移動(dòng)位置,調(diào)用VScroll_change事件 ccc=VScroll1.Value+(d2-y) Ifccc<=0 EndIf EndIfIfccc>=VScroll1.MaxThenccc=VScroll.MaxEndIfVScroll1.Value=cccEndIfIfPicture2.Width>Picture1.WidthThenccc1=HScroll1.Value+(d1-x)Ifccc1<=0Thenccc1=0EndIfIfc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級(jí)英語(yǔ)下冊(cè) Unit 9 單元綜合測(cè)試卷(人教版 2025年春)
- 2024-2025學(xué)年河南省周口市商水縣化河鄉(xiāng)等小學(xué)四年級(jí)(上)期末數(shù)學(xué)試卷
- 2024年全國(guó)職業(yè)學(xué)校技能大賽(養(yǎng)老照護(hù)賽項(xiàng))備考試題庫(kù)大全(附答案)
- 2025年個(gè)人果園承包合同簡(jiǎn)單版(三篇)
- 2025年五金家電買賣合同范文(2篇)
- 2025年個(gè)人樓房出租合同標(biāo)準(zhǔn)版本(三篇)
- 2025年中年人自愿離婚協(xié)議范文(2篇)
- 2025年產(chǎn)品加工項(xiàng)目合作協(xié)議(三篇)
- 2025年個(gè)人果園承包合同參考模板(三篇)
- 2025年九年級(jí)下學(xué)期班級(jí)教師工作總結(jié)模版(2篇)
- 塑料成型模具設(shè)計(jì)(第2版)江昌勇課件1-塑料概述
- 產(chǎn)業(yè)園EPC總承包工程項(xiàng)目施工組織設(shè)計(jì)
- 高中生物 人教版 選修二《生態(tài)系統(tǒng)及其穩(wěn)定性》 《生態(tài)系統(tǒng)及其穩(wěn)定性》單元教學(xué)設(shè)計(jì)
- 方形補(bǔ)償器計(jì)算
- 為加入燒火佬協(xié)會(huì)致辭(7篇)
- 兒科重癥監(jiān)護(hù)病房管理演示文稿
- 甲基異丁基甲酮化學(xué)品安全技術(shù)說(shuō)明書
- 條形基礎(chǔ)的平法識(shí)圖課件
- 秘書實(shí)務(wù)完整版課件全套ppt教程
- 新版神經(jīng)系統(tǒng)疾病的病史采集和體格檢查ppt
- 義務(wù)教育《歷史》課程標(biāo)準(zhǔn)(2022年版)
評(píng)論
0/150
提交評(píng)論