《多媒體軟件設(shè)計(jì)技術(shù)》課件第4章_第1頁(yè)
《多媒體軟件設(shè)計(jì)技術(shù)》課件第4章_第2頁(yè)
《多媒體軟件設(shè)計(jì)技術(shù)》課件第4章_第3頁(yè)
《多媒體軟件設(shè)計(jì)技術(shù)》課件第4章_第4頁(yè)
《多媒體軟件設(shè)計(jì)技術(shù)》課件第4章_第5頁(yè)
已閱讀5頁(yè),還剩140頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

4.1多媒體圖形用戶界面4.2利用VisualBasic開發(fā)圖形的應(yīng)用本章小結(jié)練習(xí)四4.1.1多媒體圖形用戶界面的特點(diǎn)

首先,我們介紹圖形用戶界面的基本內(nèi)容。

圖形用戶界面專門用來(lái)代表以圖形方式工作的窗口(Window)、圖標(biāo)(Icon)、菜單(Menu)、按鈕(Button)、滾動(dòng)條(ScrollBar)、對(duì)話框(DialogBox)等界面部件,也包括能夠移動(dòng)、定位、點(diǎn)取圖形目標(biāo)的定位設(shè)備的界面。4.1多媒體圖形用戶界面多媒體圖形用戶界面是在圖形用戶界面的基礎(chǔ)上,再加上一些其他媒體(如多媒體音頻、視頻、動(dòng)畫等)的特性。

多媒體圖形用戶界面的主要特點(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)。例如,用文件夾表示磁盤目錄,用戶可以對(duì)文件夾進(jìn)行打開、取某一文件(看其內(nèi)容)、處理文件(檢索、刪除、拷貝、搬移)等操作,所有這些操作目標(biāo)可用圖視比喻方式完成。例如,在WindowsXP中,把文件夾里的文件拖到表示回收站的廢紙框中,則隱喻完成對(duì)該文件的刪除操作;如移到表示打印機(jī)的目標(biāo)中,則隱喻完成對(duì)該文件的打印。

(3)有高度的交互性,每一輸入動(dòng)作被直接解析。動(dòng)作的結(jié)果可以是文字、聲音、圖像、視頻或動(dòng)畫等多媒體表現(xiàn)形式,并可以立即反饋給用戶。而對(duì)于其他交互方式,要等到全部輸入完成后才能被系統(tǒng)解析,并產(chǎn)生系統(tǒng)響應(yīng)。

(4)支持鼠標(biāo)類定位設(shè)備完成光標(biāo)的移動(dòng)和目標(biāo)的選取。因此,只要操縱鼠標(biāo)器或按下按鈕,即可代替文本界面方式中的復(fù)雜的語(yǔ)法和命令鍵入。顯然,在GUI方式下的識(shí)別和點(diǎn)取目標(biāo)比命令方式下的記住和鍵入命令要容易和快速得多。

(5)提供了快速的、增量式的、可逆轉(zhuǎn)的操縱,并且所有操縱過(guò)程及效果是可觀察到的。例如光標(biāo)移動(dòng),窗口的擴(kuò)大和縮小,菜單的查找和點(diǎn)取(如點(diǎn)取菜單項(xiàng)后顏色反相顯示)等都是立即發(fā)生和可見的。

(6)以一致方式完成對(duì)所有目標(biāo)的顯示和操縱。例如,只要將光標(biāo)移動(dòng)到所需目標(biāo)(圖標(biāo)或按鈕)上并單擊,即可完成目標(biāo)的選取。一致的顯示和操縱方式減少了用戶的記憶、學(xué)習(xí)負(fù)擔(dān)及出錯(cuò)率,也有利于標(biāo)準(zhǔn)化人機(jī)界面的構(gòu)成。

(7)提供系統(tǒng)預(yù)驗(yàn)證功能,使得只有有效的交互才能發(fā)生效果。如果用戶指向一個(gè)對(duì)象的動(dòng)作對(duì)當(dāng)前的任務(wù)是無(wú)意義的,則顯示屏上就無(wú)反應(yīng)。例如,對(duì)不是數(shù)據(jù)輸入域的目標(biāo)區(qū)輸入字符,則不會(huì)產(chǎn)生任何反應(yīng)與結(jié)果,除非該字符定義了某種命令。

(8)提供了對(duì)用戶出錯(cuò)的保護(hù)機(jī)制和強(qiáng)有力的幫助機(jī)制。GUI界面使用比喻來(lái)模擬日常操作方式,所以易學(xué)易用,本身不易出錯(cuò),并且一旦出錯(cuò),結(jié)果可立即顯示;而且用戶操作是可恢復(fù)的,即具備Undo功能。這些功能將減少用戶對(duì)可能錯(cuò)誤的擔(dān)心,使用戶把精力集中在任務(wù)上。此外,強(qiáng)有力的幫助機(jī)制可以幫助用戶正確操縱和使用系統(tǒng)。

GUI界面因具備以上特點(diǎn)而很受各類用戶所喜愛。對(duì)各類用戶而言,僅需經(jīng)過(guò)觀看系統(tǒng)運(yùn)行的演示,就能很快學(xué)會(huì)使用系統(tǒng)的基本功能。GUI界面的易理解、易學(xué)、易用性,操作及其結(jié)果的可視化,錯(cuò)誤操作的可恢復(fù)性等都可以減少用戶的焦慮和疑惑,使用戶更有信心、更有效地使用系統(tǒng)。因此,GUI界面出現(xiàn)后,立即廣泛應(yīng)用于多媒體可視化工具、屏幕編輯器、圖形瀏覽器、視頻游戲、CAD/CAM、數(shù)據(jù)庫(kù)系統(tǒng)等領(lǐng)域。4.1.2多媒體軟件中圖標(biāo)的應(yīng)用

鑒于圖標(biāo)表示實(shí)體具有直觀、形象、逼真等特點(diǎn),所以在日常生活及工程技術(shù)中早就被廣泛使用,如路標(biāo)圖、氣象圖、地圖等。應(yīng)該說(shuō),電子游戲機(jī)能讓兒童不必受訓(xùn)即可操作也得益于圖標(biāo)的使用。圖標(biāo)除了作為表示實(shí)體的符號(hào)外,還可以作為可視按鈕或菜單選擇項(xiàng),當(dāng)被選中激活時(shí),可以完成指定的功能。

1.圖標(biāo)的基本概念和工作原理

圖標(biāo)(icon)是可視的表示實(shí)體信息的簡(jiǎn)潔、抽象的符號(hào)。例如,用經(jīng)過(guò)良好設(shè)計(jì)的逼真形象來(lái)代表動(dòng)作或命令實(shí)體,可以給人提供迅速、直觀理解信息的有力工具。圖4-1給出了一些對(duì)象類的圖標(biāo)表示的例子。圖4-1圖標(biāo)實(shí)例

在圖4-1所示圖標(biāo)中,(a)表示唱歌,(b)表示合作,(c)表示郵件,(d)表示電話,(e)表示幫助,(f)表示三角形,(g)表示預(yù)算表,(h)表示不許復(fù)制的行為。其中(a)、(b)、(c)、(d)、(f)是具體的圖標(biāo),因?yàn)樗鼈兒茴愃朴趯?shí)際的圖像;而(e)、(g)、(h)是抽象地表示對(duì)象。

對(duì)于抽象對(duì)象類,較難于采用和目標(biāo)直接相似的符號(hào)來(lái)表示其實(shí)體與概念,這時(shí)可用比喻的方法來(lái)抽象地表示。當(dāng)使用圖標(biāo)表示目標(biāo)的含義不夠明確時(shí),可以在圖標(biāo)上加上必要的文字說(shuō)明,如圖4-1中的(g)、(h)。圖標(biāo)的基本工作原理是基于選取和啟動(dòng)操作。也就是說(shuō),可以把顯示在屏幕上的圖標(biāo)作為可由操作者識(shí)別的目標(biāo),通過(guò)移動(dòng)定位光標(biāo)點(diǎn)中相應(yīng)圖標(biāo),再按相應(yīng)按鍵進(jìn)行選取,便能觸發(fā)并執(zhí)行相應(yīng)的應(yīng)用功能。在這一過(guò)程中,有時(shí)為了避免給出錯(cuò)誤命令而產(chǎn)生不可復(fù)原的動(dòng)作(如文件刪除)的危險(xiǎn)性,可加入檢驗(yàn)和確認(rèn)的做法,只有經(jīng)確認(rèn)的操作才會(huì)被

執(zhí)行。

2.圖標(biāo)的設(shè)計(jì)

為使圖標(biāo)能表達(dá)確定對(duì)象的信息,必須對(duì)圖標(biāo)進(jìn)行設(shè)計(jì)。我們建議按以下原則進(jìn)行圖標(biāo)的設(shè)計(jì):

(1)圖標(biāo)中的圖形應(yīng)逼真于目標(biāo)形狀,只要可能,應(yīng)該盡量避免抽象,使人們可以快速、準(zhǔn)確地識(shí)別圖標(biāo)。

(2)不同的目標(biāo)必須使用不同的圖標(biāo)表示,以避免引起混淆。如果僅使用圖形表示目標(biāo)的含義不夠清楚、明確,則可以在圖標(biāo)中附加上簡(jiǎn)要的文本說(shuō)明,以明確圖標(biāo)的含義。

(3)設(shè)計(jì)圖標(biāo)應(yīng)盡可能簡(jiǎn)單,盡量符合常規(guī)的表達(dá)習(xí)慣,不同的圖標(biāo)之間應(yīng)該有一定程度的區(qū)別。

(4)適當(dāng)設(shè)置圖標(biāo)的尺寸,在能夠表示實(shí)體對(duì)象的情況下,圖標(biāo)宜小一些為好,以減少圖標(biāo)所占用的內(nèi)存空間及顯示空間。但是,如果要表示復(fù)雜對(duì)象,則可以使用較大尺寸的圖標(biāo),但是在同一系統(tǒng)中使用的圖標(biāo)應(yīng)有一致的圖像尺寸。

(5)鑒于用戶的學(xué)習(xí)和記憶能力所限,為了避免引起混淆,一個(gè)系統(tǒng)的圖標(biāo)類型不宜過(guò)多(一般不超過(guò)20種)。

3.圖標(biāo)的編輯工具

圖標(biāo)的編輯工具是用來(lái)創(chuàng)建、修改、存儲(chǔ)圖標(biāo)的。目前,可以使用的圖標(biāo)編輯工具很多,如HagenWieshofer的IconEdit2(見圖4-2)及AxialisSA的AxialisIconWorkshop5.0(見圖4-3)都是很好的圖標(biāo)編輯工具。圖4-2IconEdit2的界面圖4-3AxialisIconWorkshop5.0的界面

IconEdit2小巧實(shí)用,使用方便,功能豐富,除了基本的圖像編輯功能外,它可以在整個(gè)目錄里尋找含有圖標(biāo)資源的文件并提取出圖標(biāo)來(lái)進(jìn)行編輯,還可以抓取屏幕任意32×32或16×16區(qū)域的圖像來(lái)作為圖標(biāo)編輯。它支持ICO、ICL、EXE、DLL、BMP和JPEG文件格式,可以保存真彩或16色的ICO文件,也可以保存成BMP和JPEG格式。微軟WindowsXP叫人最賞心悅目的改進(jìn)之一就是其絢麗多彩的圖標(biāo),但這些圖標(biāo)采用了真彩、半透明等特有技術(shù),所以一般的圖標(biāo)、圖像編輯軟件都不能很方便的編輯它們。IconWorkshop的推出為我們解決了這一難題。這一全功能圖標(biāo)編輯軟件除了可以讓你自由編輯創(chuàng)作各種XP樣式圖標(biāo)外,還可以在各種圖標(biāo)文件間互相轉(zhuǎn)換。具體來(lái)說(shuō),它具備的功能包括:

●集成式單窗口操作界面;●支持所有格式Windows圖標(biāo)文件的全功能編輯;

●提供XPAlpha通道支持;

●支持Photoshop、PNG、BMP、ICL、Macintosh圖標(biāo)等常用格式文件的導(dǎo)入/導(dǎo)出/轉(zhuǎn)換;

●各種內(nèi)建圖標(biāo)特效;

●從單一文件一次性導(dǎo)出多種格式圖標(biāo);

●內(nèi)建強(qiáng)力搜索引擎;

●對(duì)程序或DLL文件中圖標(biāo)的編輯功能。4.1.3多媒體軟件中圖形的應(yīng)用

在多媒體應(yīng)用軟件的界面設(shè)計(jì)中,圖形運(yùn)用的合適與否,關(guān)系著應(yīng)用系統(tǒng)整體效果的好壞。圖形在多媒體軟件界面中的應(yīng)用范圍很廣,如應(yīng)用系統(tǒng)的背景圖、烘托效果的裝飾圖、命令按鈕的形狀圖形等。

1.圖形的設(shè)計(jì)與制作

多媒體軟件界面中圖形的設(shè)計(jì)并沒(méi)有千篇一律、一成不變的設(shè)計(jì)原則,要視具體的應(yīng)用系統(tǒng)而定。以下是一般性的設(shè)計(jì)原則:

(1)圖形的含義應(yīng)與應(yīng)用系統(tǒng)環(huán)境相關(guān)。

(2)圖形的大小比例應(yīng)合適,符合人的視覺習(xí)慣。

(3)背景的紋路、花紋不能太規(guī)則,變化要自然,色調(diào)要單純,不可太復(fù)雜。

(4)正確使用顏色及顏色搭配,以構(gòu)成一個(gè)良好的色彩環(huán)境(見表4-1、表4-2)。

(5)應(yīng)注意調(diào)整圖形的亮度、對(duì)比度、色彩的飽和度等。

圖形的制作工具一般采用Adobe公司的Photoshop8.0。

2.圖形中顏色的使用

人們生活在一個(gè)充滿色彩的世界里,從物理學(xué)的觀點(diǎn)出發(fā),人眼視覺所能感覺的光波在視覺上產(chǎn)生從紅到紫,即赤、橙、黃、綠、青、藍(lán)、紫七色。生理和心理學(xué)研究表明,人眼對(duì)于色彩比對(duì)亮度有更高的敏感性。色彩可以吸引人們的注意力,影響人們的情緒,向人們傳達(dá)特定的信息含義。色彩的合適配合可以給人以美感,使人振奮、愉快。

和日常生活中合理用色、配色一樣,在圖形中也要正確使用顏色及顏色搭配,例如正確使用前、背景色,以構(gòu)成一個(gè)良好的色彩顯示環(huán)境。下面介紹使用顏色的注意事項(xiàng):

(1)正確使用顏色,改善人的視覺信息獲取能力并減少疲勞效應(yīng)。據(jù)統(tǒng)計(jì),在人們獲取客觀世界的信息中有80%以上是通過(guò)視覺獲取的。計(jì)算機(jī)中的屏幕顯示也是用戶獲取計(jì)算機(jī)系統(tǒng)信息及運(yùn)行結(jié)果的主要窗口。心理學(xué)和生理學(xué)的知識(shí)告訴我們,顏色對(duì)人產(chǎn)生視覺感并引起疲勞等方面的心理影響。一方面,人們可以根據(jù)目標(biāo)的色調(diào)、明度、彩度等顏色因素來(lái)區(qū)分辨識(shí)不同的物體目標(biāo)。這里色調(diào)是最重要的,不同色調(diào)有不同的感染力和表現(xiàn)力,給人以不同的感受。例如,綠色使人感到新鮮、平靜,在計(jì)算機(jī)中用以顯示安全、運(yùn)行正常等含義;而紅色蘊(yùn)含喜慶、興奮、禁止(如交通紅燈),在計(jì)算機(jī)中用以顯示警告、錯(cuò)誤信息,提請(qǐng)人們注意等。另一方面,彩色會(huì)引起人的視覺疲勞效應(yīng),一般說(shuō)來(lái),對(duì)帶綠色成分的黃綠、藍(lán)綠、淡青色,人的視覺感到舒服,不易引起疲勞;紅色、橙色居中;而藍(lán)色和紫色最易引起視覺疲勞。

不同的民族、不同的人以及不同的性別會(huì)對(duì)顏色有不同的偏好。因此,要從眾多的顏色以及不同的人中選擇顏色是很困難與費(fèi)時(shí)的任務(wù),它可能需要一個(gè)很高級(jí)的彩色度量設(shè)備,及花費(fèi)很多的時(shí)間。表4-1列出了16種常用顏色在圖形中的應(yīng)用。

(2)正確配置圖形的前、背景色。顏色的組合、配置同樣會(huì)對(duì)人的視覺能力和疲勞方面產(chǎn)生影響。前、背景色的正確選擇將改善人的視覺印象,不易使人產(chǎn)生疲勞,并能有效地提取目標(biāo)信息(例如閱讀顯示文本);相反,不恰當(dāng)?shù)念伾M合、配置會(huì)擾亂人的情緒,加速視覺疲勞。

表4-2列出了前、背景色組合的效果。表4-116種常用顏色在圖形中的應(yīng)用表4-2前、背景色組合效果

(3)每次顯示使用的顏色不宜過(guò)多,使用過(guò)多顏色的屏幕反而不利于區(qū)分顏色及顏色的含義。在非必要情況下,顯示使用的顏色寧少勿多。

(4)在同一屏幕上使用多種顏色時(shí),選擇使用合適對(duì)比度的顏色組合。在使用多種顏色顯示時(shí),對(duì)比度大的顏色可以一起使用而不易引起混淆,而如果使用過(guò)于相近的顏色,則會(huì)影響辨別。因?yàn)楫?dāng)亮度發(fā)生變化時(shí)(變暗),原相近的顏色視覺效果上可能混淆起來(lái)。例如,在高亮度下易于分辨的黃色和橙色,當(dāng)亮度變暗時(shí),用戶看到這兩種顏色都和褐色相像。但是,在使用前、背景色中,也要避免對(duì)比度過(guò)大,否則反而使字符難以辨認(rèn)、閱讀。

(5)用低飽和度、低亮度來(lái)顯示不需強(qiáng)調(diào)的信息,例如使用柔和、平淡的顏色。

(6)使用一致性的顏色顯示。一致性是人機(jī)界面領(lǐng)域的普遍原則,在顯示顏色上的一致性,首先指屏幕使用顏色應(yīng)與客觀世界及用戶常規(guī)概念相一致。例如,用紅色表示危險(xiǎn)、停止、出錯(cuò);用綠色表示正常、安全、繼續(xù)運(yùn)行;黃色表示警告、當(dāng)心等。另外,一致性還指使用顏色的一致性,即自始至終地一致性使用。例如,所有出錯(cuò)信息都顯示在紅底白字的彈出式窗口中,那么就不要在彈出式菜單中或?qū)υ捒蛑惺褂眉t底白字,以避免用戶的誤解。

(7)不要使用紅/綠、紅/藍(lán)、綠/藍(lán)、藍(lán)/黃這樣組合的顏色對(duì),它們會(huì)使相鄰邊界產(chǎn)生振蕩和余像。在VB里,MDI(MultipleDocumentInterface,多文檔界面)窗體是這樣定義的:“MDI窗體作為一個(gè)程序的后臺(tái)窗口,包含著MDIChild屬性為True的窗體”。在一個(gè)VB程序中,至多只能存在一個(gè)MDI父窗體,可以有多個(gè)MDI子窗體;建立一個(gè)MDI父窗體的方法是在VB的File菜單里選擇“NewMDIForm”。4.2利用VisualBasic開發(fā)圖形用戶界面

在MDI程序運(yùn)行時(shí),如果子窗口具有菜單,那么當(dāng)子窗口被激活時(shí),子窗口的菜單就會(huì)自動(dòng)替換父窗口菜單;當(dāng)子窗口被最小化時(shí),在MDI父窗口里就會(huì)出現(xiàn)子窗口的圖標(biāo)。

Windows通用圖形界面的出現(xiàn),使計(jì)算機(jī)用戶不必通過(guò)專門的學(xué)習(xí)就可以得心應(yīng)手地使用各種Windows的軟件;不僅如此,它還是程序設(shè)計(jì)者在設(shè)計(jì)Windows程序的界面時(shí)所必須遵循的標(biāo)準(zhǔn)。這在很大程度上減輕了程序設(shè)計(jì)者的負(fù)擔(dān),使他們能夠把主要精力放在問(wèn)題的求解和實(shí)現(xiàn)上。

VB的出現(xiàn),更加簡(jiǎn)化了Windows程序界面的設(shè)計(jì)工作,只需要極少量的代碼,就能實(shí)現(xiàn)標(biāo)準(zhǔn)Windows應(yīng)用程序的界面。但是,如果不了解Windows程序界面設(shè)計(jì)的原則,或者不熟悉VB下界面編程的技巧,就難以設(shè)計(jì)和實(shí)現(xiàn)既符合一般標(biāo)準(zhǔn)又具有特色的界面。

界面設(shè)計(jì)中最具代表性的原則有:

(1)界面要具有一致性。一致性原則在界面設(shè)計(jì)中最容易被違反,同時(shí)也最容易修改和避免。

(2)常用操作要有捷徑。常用操作的使用頻度大,應(yīng)該減少操作序列的長(zhǎng)度。例如,為文件的常用操作如打開、存盤、另存等設(shè)置快捷鍵。使常用操作具有捷徑,不僅會(huì)提高用戶的工作效率,還使得界面在功能實(shí)現(xiàn)上簡(jiǎn)潔和高效。

(3)提供簡(jiǎn)單的錯(cuò)誤處理。在出現(xiàn)錯(cuò)誤時(shí),系統(tǒng)應(yīng)能檢測(cè)出錯(cuò)誤,并且提供簡(jiǎn)單和容易理解的錯(cuò)誤處理的功能。錯(cuò)誤出現(xiàn)后,系統(tǒng)的狀態(tài)不發(fā)生變化,或者系統(tǒng)要提供錯(cuò)誤恢復(fù)的指導(dǎo)。

(4)提供信息反饋。對(duì)常用操作和簡(jiǎn)單操作的反饋可以不作要求,但是對(duì)不常用操作和至關(guān)重要的操作,系統(tǒng)應(yīng)該提供信息的反饋。

(5)操作可逆。操作應(yīng)該可逆(Undo功能),這對(duì)于不具備專門的知識(shí)的操作人員相當(dāng)有用??赡娴膭?dòng)作可以是單個(gè)的操作,或者是一個(gè)相對(duì)獨(dú)立的操作序列。

(6)設(shè)計(jì)良好的聯(lián)機(jī)幫助。雖然對(duì)于熟練用戶來(lái)說(shuō),聯(lián)機(jī)幫助并非必不可少,但是對(duì)于大多數(shù)不熟練用戶來(lái)說(shuō),聯(lián)機(jī)幫助具有非常重要的作用。4.2.1菜單設(shè)計(jì)的原則和編程技術(shù)

菜單設(shè)計(jì)有如下的一般性原則:

(1)按照系統(tǒng)的功能來(lái)組織菜單。分配菜單界面的寬度和深度,使菜單層次結(jié)構(gòu)和系統(tǒng)功能層次結(jié)構(gòu)相一致。把那些邏輯上相似,有聯(lián)系的選擇項(xiàng)安排在一組。

(2)要選用廣而淺的菜單樹,而不是窄而深的菜單樹。一般菜單嵌套層次不宜超過(guò)四層,每級(jí)菜單項(xiàng)不宜超過(guò)7~9項(xiàng)。如果菜單項(xiàng)數(shù)超過(guò)8個(gè),而顯示菜單的屏幕區(qū)又小,則可以使用滾動(dòng)式菜單技術(shù)。

(3)根據(jù)菜單選項(xiàng)的含義進(jìn)行分組,并且按一定的規(guī)則排序。菜單選項(xiàng)的標(biāo)題要力求簡(jiǎn)短、含義明確,并且最好以關(guān)鍵詞開始。菜單標(biāo)題大致上解釋了該幅菜單的作用,例如,可以把第一級(jí)菜單命名為主菜單,主菜單中的各菜單項(xiàng)反映了系統(tǒng)的基本功能和程序框架。菜單項(xiàng)名應(yīng)能體現(xiàn)該選擇項(xiàng)所完成的功能,使用語(yǔ)氣親切、含義明確、易于理解、簡(jiǎn)短明了的單詞、語(yǔ)句或動(dòng)賓短語(yǔ)作菜單項(xiàng)名。例如,名詞:文件、字體、顏色、風(fēng)格;動(dòng)詞:保存、打開、關(guān)閉、拷貝、編輯;甚至副詞、數(shù)字都可以作為菜單項(xiàng)的名稱,但更好地是使用言簡(jiǎn)意賅的動(dòng)賓結(jié)構(gòu),如保存文件、刪除記錄等作為菜單項(xiàng)名。

(4)菜單項(xiàng)的安排應(yīng)有利于提高菜單選取速度??梢愿鶕?jù)使用頻度、數(shù)字順序、字母順序、功能邏輯順序等原則來(lái)組織安排菜單項(xiàng)順序。其中:

●根據(jù)使用頻度排列:按菜單項(xiàng)使用的頻度為序排列,常用的放在第一項(xiàng)。

●根據(jù)功能邏輯順序排列:例如對(duì)文件的操作包括打開、定位、讀、寫、存盤、關(guān)閉等菜單項(xiàng),可按上述功能序列排列。

●根據(jù)使用順序排列:先使用的排在前面。例如處理一個(gè)電子郵件,順序是閱讀,回退(到首頁(yè)),打印,保存,發(fā)送等。

●根據(jù)菜單項(xiàng)名(或其縮寫)的字母順序排列:按字母順序的菜單容易查找。

●根據(jù)數(shù)字編碼順序排列:有時(shí)用戶可以數(shù)字順序?qū)Σ藛雾?xiàng)進(jìn)行編碼,或者菜單項(xiàng)本身是選擇一系列數(shù)字,那么可以按數(shù)字從小到大來(lái)排列菜單項(xiàng)。

(5)常用選項(xiàng)要設(shè)置快捷鍵。菜單界面的多種選擇途徑增加了系統(tǒng)的靈活性,使之能適應(yīng)于不同水平的用戶,菜單選擇的快捷鍵則加速了系統(tǒng)的運(yùn)行。這樣既可以用多級(jí)菜單轉(zhuǎn)向,也可以用快捷鍵直接操作選取所需功能的菜單項(xiàng),并設(shè)計(jì)易記、有約定含義的關(guān)鍵字或單鍵(含功能鍵)來(lái)表示系統(tǒng)的捷徑選擇。例如,Windows菜單系統(tǒng)中,使用F1作為幫助功能的快捷鍵,Ctrl+O作為打開文件的快捷鍵,Ctrl+S作為保存文件的快捷鍵,Alt+X作為退出系統(tǒng)的快捷鍵等。

結(jié)合以上的原則,VB菜單編程有以下幾方面的技術(shù)和技巧:

1.菜單選項(xiàng)的分組

在VB中,菜單選項(xiàng)的分組是通過(guò)菜單欄分隔橫線實(shí)現(xiàn)的。在菜單的一定位置增加一個(gè)Caption屬性為“-”的菜單項(xiàng),它在菜單上就表現(xiàn)為一條橫線。在許多情況下,同一個(gè)功能菜單下又可以按照菜單選項(xiàng)的功能分為幾組,這時(shí)就可以用分隔橫線來(lái)實(shí)現(xiàn)菜單項(xiàng)的分組。

2.常用選項(xiàng)快捷鍵的設(shè)置

打開菜單設(shè)計(jì)窗口(MenuDesignWindow),對(duì)于每個(gè)菜單選項(xiàng)應(yīng)有相應(yīng)的快捷鍵(Shortcut)列表,在該表中選擇一個(gè)即可。需要注意的是,具有子菜單的菜單或者頂層菜單的快捷鍵不能這樣定義。按照Windows的界面設(shè)計(jì)原則,頂層菜單的快捷鍵的形式是Alt+字母鍵,其實(shí)現(xiàn)方法見4.2.4節(jié)。

對(duì)于一些常用的功能菜單項(xiàng),有約定俗成的快捷鍵。例如,文件打開用Crtl+O,文件存盤用Crtl+S,打印用Crtl+P,等等。

為菜單選項(xiàng)定義好快捷鍵之后,菜單上該選項(xiàng)的后面就出現(xiàn)了快捷鍵的文字表示。

3.菜單選項(xiàng)的允許與禁止、可見與隱藏

為了表示菜單選項(xiàng)的一些特殊功能,可能要用到菜單選項(xiàng)的允許與禁止、可見與隱藏屬性。當(dāng)因?yàn)槟撤N原因使得某個(gè)選項(xiàng)所代表的功能不能被實(shí)現(xiàn)時(shí),就應(yīng)該禁止該選項(xiàng)被選中。菜單選項(xiàng)的允許與禁止是通過(guò)改變?cè)撨x項(xiàng)的Enabled屬性實(shí)現(xiàn)的。

舉例來(lái)說(shuō),假設(shè)菜單選項(xiàng)名為nmuName,則禁止該選項(xiàng)可通過(guò)如下設(shè)置實(shí)現(xiàn):

mnuName.Enabled=False

同理,隱藏一個(gè)選項(xiàng)可以用mnuName.Visible=False來(lái)實(shí)現(xiàn),而使一個(gè)隱藏的選項(xiàng)恢復(fù)可見則用mnuName.Visible

=True來(lái)實(shí)現(xiàn)。

菜單項(xiàng)的隱藏與恢復(fù)可見常常用在動(dòng)態(tài)菜單的實(shí)現(xiàn)中。

4.菜單項(xiàng)的動(dòng)態(tài)裝入

菜單項(xiàng)的動(dòng)態(tài)裝入是指菜單項(xiàng)的個(gè)數(shù)不固定,并且能夠在需要時(shí)動(dòng)態(tài)地裝入。最簡(jiǎn)單的例子就是文件菜單中最近打開的文件的列表。在第一次打開文件之前,該列表是空的,并且不在文件菜單中出現(xiàn);打開一個(gè)文件后,該列表不再是空的,并且文件菜單中出現(xiàn)代表被打開文件的菜單項(xiàng)。

在上面的幾個(gè)技巧里,綜合運(yùn)用了菜單項(xiàng)的下標(biāo)屬性(Index)、標(biāo)題屬性(Caption)、可見屬性(Visible)以及菜單項(xiàng)的裝入方法(LoadMethod)。具體的實(shí)現(xiàn)過(guò)程如下:

在文件菜單里增加一個(gè)菜單項(xiàng),標(biāo)題任意,并假設(shè)菜單項(xiàng)的Name屬性是opened_files_list;更改菜單項(xiàng)opened_files

_list的可見屬性,使opened_files_list.Visible=False更改菜單項(xiàng)opened_files_list的下標(biāo)屬性,使opened_files_files_list.Index

=0在程序中控制菜單項(xiàng)opened_files_list的動(dòng)態(tài)裝入

假設(shè)要顯示打開過(guò)的第二文件的文件名,并且該文件名存放在一個(gè)文件名數(shù)組opened_file_name里。以下的代碼就實(shí)現(xiàn)了這一功能:Loadopened_files_list(1)opened_files_lise(1).Caption="&2"+opened_file_name(1)opened_files_list(1).Visible=True

需要注意的是,對(duì)于下標(biāo)為0的菜單項(xiàng),不能用Load方法。因?yàn)樵诔绦驁?zhí)行時(shí),該菜單項(xiàng)就已經(jīng)被裝入到內(nèi)存里了;另外,在菜單項(xiàng)的標(biāo)題屬性字符里的“&”字符具有特殊的含義,它的作用是在顯示該屬性字符串的同時(shí)并不顯示“&”本身,而緊跟“&”的字符在顯示時(shí)具有下劃線,并且該字符成為熱鍵。

如果下標(biāo)不為0的菜單項(xiàng)不再需要,為了減少對(duì)內(nèi)存資源的占用,可以用Unload方法把它從內(nèi)存卸出;同樣地,不能用Unload卸出下標(biāo)為0的菜單項(xiàng)。

5.彈出式菜單的實(shí)現(xiàn)(PopupMenuMethod)

VB中在菜單設(shè)計(jì)窗口(MenuDesignWindow)中設(shè)計(jì)的菜單是下拉式菜單。下拉式菜單是用戶在任何時(shí)候都可以在頂端菜單條上選擇后拉出的菜單,而彈出式菜單則是在程序界面的一定區(qū)域內(nèi)點(diǎn)按鼠標(biāo)鍵后出現(xiàn)的菜單。在某些情況下,彈出式菜單會(huì)使系統(tǒng)功能的實(shí)現(xiàn)更加簡(jiǎn)潔和高效,使用起來(lái)更加得心應(yīng)手。

Windows程序的彈出式菜單一般是當(dāng)用戶在程序的桌面上點(diǎn)按鼠標(biāo)鍵時(shí)出現(xiàn)的。彈出式菜單多用于實(shí)現(xiàn)系統(tǒng)的附加或增強(qiáng)功能。彈出式菜單的內(nèi)容可以隨點(diǎn)按鼠標(biāo)鍵的位置不同而變化。由于彈出的菜單要覆蓋屏幕的一部分,因而應(yīng)盡量縮短菜單里的文字。

在VB中,彈出式菜單的實(shí)現(xiàn)要用到下拉式菜單設(shè)計(jì)技術(shù)和PopupMenu方法。具體的做法是:

(1)在菜單設(shè)計(jì)窗口(MenuDesignWindow)里設(shè)計(jì)好相應(yīng)窗體的彈出式菜單。要注意的是,要彈出的菜單至少要有一個(gè)子菜單,且這個(gè)菜單不能有快捷鍵,Checked屬性必須是False。再把彈出式菜單的Visible屬性改為False。(2)在具有彈出式菜單的窗體的Form_Click中加入以下代碼(假設(shè)彈出式菜單的Name屬性是mnuExample):

SubForm_Click()

PopupMenumnuExample

EndSub

(3)如果要求只有按下鼠標(biāo)左鍵或者右鍵才能激活菜單,則必須在Form_MouseDown里加入如下代碼:SubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)IfButton=2then‘Button=2表示鼠標(biāo)右鍵PopupMenumnuExampleEndIf

PopupMenu的完整語(yǔ)法是:

[Form.]PopupMenumenuname[flags[,x[,y]]]

改變flags的值可以控制彈出式菜單的表現(xiàn)形式。flags有兩組值:第一組值用來(lái)控制菜單的顯示方式,包括POPUPMENU_LEFTALIGN,POPUPMENU_CENTERALIGN,POPUPMENU_RIGHTALIGN,分別表示以x為左邊界,以x為中心和以x為右邊界的顯示方式,并且以x為左邊界是缺省的方式;另外一組值用來(lái)控制菜單項(xiàng)的選中方式,包括POPUPMENU_LEFTBUTTON和POPUPMENU_

RIGHTBUTTON,分別表示左鍵選中和左/右鍵選中均可,并且左鍵選中是缺省的方式。

flags的值由上面的兩組值經(jīng)過(guò)OR運(yùn)算得出。例如,要求左對(duì)齊顯示并且左鍵選中為準(zhǔn),則應(yīng)有:

flags=POPUPMENU_LEFTALIGNOR

POPUPMENU_LEFTBUTTON

x和y用來(lái)定義菜單彈出的位置,缺省是鼠標(biāo)點(diǎn)中的位置。

6.菜單項(xiàng)的其他屬性

用Alt+字母鍵激活頂層菜單,或者在菜單激活后用字母鍵激活一個(gè)菜單項(xiàng)時(shí),必須學(xué)會(huì)使用&。&用在菜單項(xiàng)的標(biāo)題屬性(Caption)里,它的用法和作用與在用C語(yǔ)言編制的Windows程序中的用法和作用相同。有時(shí)希望頂層菜單之間的間隔大一些,或者某個(gè)頂層菜單出現(xiàn)在菜單條的最右端,這時(shí)就要用到標(biāo)題屬性是空格的菜單。如果一個(gè)菜單的標(biāo)題是由多個(gè)空格組成的,那么這個(gè)菜單在菜單條上就占用與空格的個(gè)數(shù)相應(yīng)的空間,并且它后面的菜單也順序地后移;如果這個(gè)菜單的Visible屬性是False,那么它就跟不存在一樣。

7.位圖菜單

在通常的程序中,菜單總是以文本的方式存在的,有時(shí)候顯得非常單調(diào)乏味。如果能夠在菜單中加入位圖圖形,將會(huì)極大地增加用戶的使用興趣。下面介紹如何使用位圖制作菜單選項(xiàng)。

位圖菜單的創(chuàng)建需要用到Windows應(yīng)用程序編程接口(API)函數(shù),我們需要將這些函數(shù)的聲明包含在應(yīng)用程序的標(biāo)準(zhǔn)模塊(Module1.Bas)中,具體的內(nèi)容請(qǐng)參見下面的程序。創(chuàng)建位圖菜單的基本思想如下:

(1)使用函數(shù)GetSubMenu提取子菜單項(xiàng)的句柄,并通過(guò)使用函數(shù)CreateCompatibleDC來(lái)創(chuàng)建一個(gè)兼容的設(shè)備環(huán)境描述表。

(2)在一個(gè)循環(huán)過(guò)程中通過(guò)使用CreateCompatibleBitmap函數(shù)、SelectObject函數(shù)以及BitBlt函數(shù)來(lái)分別將針對(duì)各個(gè)菜單項(xiàng)所載入的位圖選入到兼容設(shè)備環(huán)境中。載入位圖可以有多種方法,在下面的程序中,我們?cè)诖绑w上設(shè)置了四個(gè)圖片框控件(PictureBox),使用它們載入4個(gè)預(yù)設(shè)的圖標(biāo)來(lái)作為菜單選項(xiàng)位圖的源文件。當(dāng)然也可以使用其他的方法,例如,在程序中使用LoadPicture函數(shù)來(lái)從磁盤裝載位圖。

(3)通過(guò)ModifyMenu函數(shù)繪制真正的位圖菜單選項(xiàng)。

(4)使用DeleteDC函數(shù)來(lái)釋放設(shè)備環(huán)境,以便其他的程序可以使用它們。

下面是工程文件的建立步驟:

①在VisualBasic中建立一個(gè)新的工程,采用缺省的方法建立Form1。

②創(chuàng)建一個(gè)新的模塊,采用缺省的方法建立Module1.Bas。③在Form1上添加4個(gè)圖片框控件(使用控件數(shù)組),將它們的Name屬性設(shè)置為Picture1,將它們的Index屬性依次設(shè)置為0、1、2、3,將它們的AutoRedrew屬性、AutoResize屬性設(shè)置為Ture,將它們的Appearence屬性、BorderStyle屬性設(shè)置為0,將它們的Visable屬性設(shè)置為False。

④將Open.bmp、About.bmp、Help.bmp、Quit.bmp四個(gè)圖標(biāo)文件賦給上面的四個(gè)圖片框控件的Picture屬性。⑤在Form1上添加一個(gè)菜單項(xiàng),將它的標(biāo)題設(shè)置為“主菜單(&F)”,名稱設(shè)置為MnuMain。在其下添加4個(gè)子菜單項(xiàng),分別將這四個(gè)子菜單項(xiàng)的名稱設(shè)置為“打開(&O)”,“關(guān)于(&A)”,“幫助(&H)”及“退出(&E)”。將它們的名稱設(shè)置為“MnuMain_Select”,并對(duì)應(yīng)地將這四個(gè)子菜單項(xiàng)的索引設(shè)置為0、1、2、3。

畫好的窗體如圖4-4所示。圖4-4位圖子菜單控件設(shè)計(jì)Module1.Bas模塊代碼如下:OptionExplicitDeclareFunctionGetMenuLib"user32"(ByValhwndAsLong)AsLongDeclareFunctionGetSubMenuLib"user32"(ByValhMenuAsLong,ByValnPosAsLong)AsLongDeclareFunctionGetMenuItemIDLib"user32"(ByValhMenuAsLong,ByValnPosAsLong)AsLongDeclareFunctionModifyMenuLib"user32"Alias"ModifyMenuA"(ByValhMenuAsLong,ByValnPositionAsLong,ByValwFlagsAsLong,ByValwIDNewItemAsLong,ByVallpStringAsAny)AsLongDeclareFunctionCreateCompatibleDCLib"gdi32"(ByValhdcAsLong)AsLongDeclareFunctionDeleteDCLib"gdi32"(ByValhdcAsLong)AsLongDeclareFunctionCreateCompatibleBitmapLib"gdi32"(ByValhdcAsLong,ByValnWidthAsLong,ByValnHeightAsLong)AsLong’

創(chuàng)建一幅與設(shè)備有關(guān)位圖,它與指定的設(shè)備場(chǎng)景兼容

DeclareFunctionSelectObjectLib"gdi32"(ByValhdcAsLong,ByValhObjectAsLong)AsLong’

得到以前選入設(shè)備場(chǎng)景的句柄

DeclareFunctionBitBltLib"gdi32"(ByValhDestDCAsLong,ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong

PublicConstSRCCOPY=&HCC0020

PublicConstMF_BYPOSITION=&H400&

PublicConstMF_BITMAP=&H4&Form1程序代碼如下:

PrivateSubForm_Load()

DimnLoopCtrAsInteger

DimlResultAsLong

DimhTempDCAsLong

DimnWidthAsInteger

DimnHeightAsInteger

DimlTempIDAsLong

DimhMenuIDAsLong

DimlItemCountAsLong

DimhBitmapAsLong

nLoopCtr=0nWidth=Picture1(nLoopCtr).Width\Screen.TwipsPerPixelX

nHeight=Picture1(nLoopCtr).Height\Screen.TwipsPerPixelY

hMenuID=GetSubMenu(GetMenu((Me.hwnd)),0)'獲取菜單的位置

hTempDC=CreateCompatibleDC(Picture1(nLoopCtr).hdc)

FornLoopCtr=0To3'這個(gè)循環(huán)把圖片放入菜單里hBitmap=CreateCompatibleBitmap(Picture1(nLoopCtr).hdc,nWidth,nHeight)

lTempID=SelectObject(hTempDC,hBitmap)

lResult=BitBlt(hTempDC,0,0,nWidth,nHeight,(Picture1(nLoopCtr).hdc),0,0,SRCCOPY)

lTempID=SelectObject(hTempDC,lTempID)

MnuMain_Select(nLoopCtr).Caption=""

lResult=ModifyMenu(hMenuID,nLoopCtr,MF_BYPOSITIONOrMF_BITMAP,

GetMenuItemID(hMenuID,nLoopCtr),hBitmap)NextnLoopCtr

lResult=DeleteDC(hTempDC)

EndSub

PrivateSubMnuMain_Select_Click(IndexAsInteger)'處理菜單選擇事件

SelectCaseIndex

Case0

Label1.Caption="選中---打開"Case1

Label1.Caption="選中---關(guān)于"

Case2

Label1.Caption="選中---幫助"

Case3

Label1.Caption="選中---退出"

DoEvents

End

EndSelect

EndSub

運(yùn)行該樣例程序,單擊“主菜單”菜單,則會(huì)看到由4個(gè)圖標(biāo)所形成的位圖子菜單項(xiàng),如圖4-5所示。

8.實(shí)現(xiàn)主菜單中的彈出式菜單

在VB中,我們可以很容易地利用PopupMenu函數(shù)制作彈出式菜單,但是它只能彈出主菜單中的某一個(gè)子菜單。要制作包含主菜單的彈出式菜單,可以用下面所述的方法實(shí)現(xiàn):

(1)建立FORM1、FORM2。

(2)在FORM1中放置一個(gè)PictureBox控件Picture1,并在FORM1上建立含有“文件”、“幫助”二個(gè)菜單項(xiàng)的主菜單,如圖4-6所示。圖4-5位圖子菜單圖4-6FORM1上的菜單界面設(shè)計(jì)

(3)如圖4-7所示,在FORM2上建立四項(xiàng)主菜單及相應(yīng)子菜單,其設(shè)置為:

FORM2上的主菜單中,前三項(xiàng)為正常使用的菜單,第四項(xiàng)隱含。FORM2第四項(xiàng)mnu2(3)下的子菜單就是FORM2主菜單前三項(xiàng)“內(nèi)容”、“索引”、“關(guān)于”的全部?jī)?nèi)容的重復(fù),用來(lái)在FORM1中右擊picture1時(shí)顯示FORM2的主菜單,如圖4-8所示。圖4-6FORM1上的菜單界面設(shè)計(jì)圖4-7FORM2上的菜單設(shè)計(jì)圖4-8右擊picture1時(shí)顯示FORM2的主菜單下面是完整的程序代碼:4.2.2窗口設(shè)計(jì)技術(shù)

1.浮動(dòng)窗口的設(shè)計(jì)

在軟件設(shè)計(jì)時(shí),為了保證含有重要信息的窗口不被其他窗口覆蓋,就要用到浮動(dòng)窗口技術(shù),建立一個(gè)“總在最前面”(TopMost)的窗口。下面我們用一個(gè)實(shí)例介紹這類窗口的制作。

(1)建立FORM1、FORM2。

(2)在FORM1中放置一個(gè)PictureBox控件Picture1及二個(gè)命令按鈕Command1、Command2,效果如圖4-9所示。

(3)在FORM2中放置三個(gè)Shape,形狀自定,效果如圖4-10所示,僅供參考。圖4-9浮動(dòng)窗口

圖4-10參照物窗口程序代碼如下:

程序運(yùn)行后,我們可以看到如圖4-11所示的窗口。在圖4-11中,“參照物窗口”蓋住了“浮動(dòng)窗口示例”。單擊“設(shè)置”按鈕后,我們可看到“浮動(dòng)窗口示例”被調(diào)到最前面。單擊“取消”按鈕后,我們又可看到圖4-11所示的窗口畫面。圖4-11“參照物窗口”蓋住了“浮動(dòng)窗口”示例

2.制作顏色漸變的窗口背景

在許多Windows軟件的安裝程序中,常常可以看到窗口的背景顏色由淺至深的漸變效果。下面我們用一個(gè)例子程序,說(shuō)明如何通過(guò)調(diào)用API函數(shù)FillRect,來(lái)繪制漸變的窗口背景色。

首先,以缺省的方式新建一工程。然后在缺省的窗體Form1中加入如下代碼:運(yùn)行上面的程序后,就會(huì)出現(xiàn)一個(gè)從上到下、由白至黑的窗口背景漸變效果(見圖4-12)。對(duì)上述代碼稍加修改,便可制作出各種顏色和方向的漸變背景。圖4-12窗口背景漸變效果

3.窗口背景拼圖技術(shù)

在多媒體軟件開發(fā)過(guò)程中,為提高軟件的商品化程度,常常需要對(duì)窗口背景進(jìn)行美化處理。但用VisualBasic進(jìn)行窗體設(shè)計(jì)時(shí),若只按照系統(tǒng)提供的功能,則窗口背景只能設(shè)置為單一的顏色。當(dāng)然,我們可以通過(guò)設(shè)置窗體的PICTURE屬性,調(diào)用位圖文件來(lái)顯示窗口背景的紋理圖案。但使用這種方法有許多缺點(diǎn):其一是窗體大小受位圖大小的限制,調(diào)整起來(lái)相當(dāng)麻煩,不具有通用性和靈活性;其二是浪費(fèi)資源,因?yàn)榛y圖案基本上是重復(fù)圖案,采用與窗體同樣大小的位圖是一種浪費(fèi)。下面介紹的背景拼圖技術(shù),可以容易地顯示出窗口背景的紋理圖案。

首先,在窗體上建立一個(gè)網(wǎng)格控件,設(shè)定網(wǎng)格行不可見,去掉固定行和固定列,用程序?qū)崿F(xiàn)網(wǎng)格控件與窗體同樣大小,并隨窗體大小的改變而改變。然后設(shè)計(jì)一個(gè)花紋圖案,形成BMP位圖文件,將其調(diào)入PictureBox控件。設(shè)定網(wǎng)格的每個(gè)單元與該圖案大小相同,使單元的數(shù)量正好覆蓋整個(gè)窗體背景,再將該圖案賦予所有單元去顯示。

在下面的例子中,我們通過(guò)子程序unitepic()實(shí)現(xiàn)以上過(guò)程。不論圖案大小、窗體大小,該程序都能自動(dòng)調(diào)整網(wǎng)格控件大小和網(wǎng)格單元大小及單元數(shù)量。圖4-13顯示了程序的運(yùn)行結(jié)果。圖4-13窗體對(duì)象設(shè)計(jì)按圖4-13畫出Form1,其中左邊的矩形框?yàn)镚rid控件,右邊的為Picture控件。下面是十個(gè)Button控件,而且這十個(gè)控件的Name屬性都設(shè)為“Command1”,這樣就形成一個(gè)由十個(gè)按鈕組成的按鈕數(shù)組。(注意:若背景花紋無(wú)法正常顯示,請(qǐng)重新注冊(cè)GRID32.ocx控件。)

各對(duì)象的主要屬性定義如表4-3所示。表4-3控件主要屬性程序代碼如下:程序運(yùn)行后,效果如圖4-14所示。圖4-14程序運(yùn)行后生成的紋理圖案4.2.3鼠標(biāo)編程技術(shù)

1.鼠標(biāo)指針的自動(dòng)移動(dòng)

在開發(fā)多媒體應(yīng)用軟件的過(guò)程中,當(dāng)一個(gè)窗口中出現(xiàn)較多的控件時(shí),如果能向?qū)降膶⑹髽?biāo)指針自動(dòng)地移動(dòng)到指定控件上(即建議用戶下一步該做什么),則會(huì)使用戶覺得軟件具有智能性并減少了用戶出錯(cuò)的機(jī)會(huì)。

我們知道,在VisualBasic中,可以用SetFocus方法使控件得到輸入焦點(diǎn),也可以用Sendkeys“{TAB}”語(yǔ)句使下一個(gè)控件獲得焦點(diǎn)??墒?,當(dāng)焦點(diǎn)切換的兩個(gè)控件相隔一定距離時(shí),上述的方法有時(shí)不足以引起用戶的注意,然而,一種好的解決方法是將鼠標(biāo)箭頭也移到控件上。

由于VB本身并沒(méi)有支持鼠標(biāo)移動(dòng)的方法,下面我們以實(shí)例介紹一種方法(使用API函數(shù)SetCursorPos)來(lái)將鼠標(biāo)指針自動(dòng)地移動(dòng)到指定控件上??丶O(shè)計(jì)效果如圖4-15所示。

在下面的程序中,當(dāng)讀者在文本框中輸入文本并按回車鍵后,可以看見鼠標(biāo)指針自動(dòng)地移動(dòng)到“確定”按鈕上了(見圖4-16)。圖4-15控件設(shè)計(jì)效果圖4-16鼠標(biāo)指針自動(dòng)移動(dòng)到“確定”按鈕上程序代碼如下:

2.對(duì)象的拖動(dòng)

為使程序界面漂亮生動(dòng),更具吸引力,在許多Windows應(yīng)用程序中都采用了圖形化的界面(例如WINAMP等)。但是,在這樣的界面下就不能使用Windows原來(lái)的標(biāo)題條了,否則會(huì)影響界面的一致性及美觀性。那么,在沒(méi)有標(biāo)題條的情況下如何用鼠標(biāo)拖動(dòng)窗體或其他的控件呢?

下面我們以一實(shí)例介紹如何使用API函數(shù)來(lái)實(shí)現(xiàn)窗體或其他控件的拖動(dòng)。

在下面的程序中,當(dāng)讀者在窗體(或圖片框)中按下鼠標(biāo)左鍵并拖動(dòng)后,可以看見窗體(或圖片框)會(huì)隨著鼠標(biāo)的拖動(dòng)而移動(dòng)(見圖4-17)。圖4-17窗體隨鼠標(biāo)的拖動(dòng)而移動(dòng)按圖4-17畫出窗體Form1。各對(duì)象的主要屬性如表4-4所示。表4-4控件主要屬性程序代碼如下:

3.鼠標(biāo)移出(MouseLeave)事件的實(shí)現(xiàn)

我們知道,在VB中關(guān)于鼠標(biāo)操作的事件有MouseDown、MouseUp和MouseMove事件。利用這三個(gè)事件,我們可以方便地操縱大多數(shù)的鼠標(biāo)行為。但要精確地控制所有的鼠標(biāo)操作,僅使用這三個(gè)事件有時(shí)無(wú)法很好地完成鼠標(biāo)控制的功能。例如,在下面的程序段中,當(dāng)鼠標(biāo)移動(dòng)到Command1按鈕上時(shí),在標(biāo)簽label1中會(huì)顯示“鼠標(biāo)已移動(dòng)到Command1”;當(dāng)鼠標(biāo)離開Command1按鈕時(shí),則在標(biāo)簽label1中會(huì)顯示“鼠標(biāo)不在Command1上”。運(yùn)行上面的程序后我們可以發(fā)現(xiàn),在大部分情況下,程序的運(yùn)行結(jié)果符合我們的要求。但是,當(dāng)將鼠標(biāo)從Command1下面迅速移動(dòng)到窗體外面時(shí),我們發(fā)現(xiàn)標(biāo)簽label1中顯示的信息“鼠標(biāo)已移動(dòng)到Command1”仍然沒(méi)有發(fā)生變化(見圖4-18),這是我們不愿看到的結(jié)果。為什么會(huì)出現(xiàn)這種情況呢?這是因?yàn)槭髽?biāo)移動(dòng)的速度太快,F(xiàn)orm1中的MouseMove事件來(lái)不及觸發(fā),而當(dāng)前鼠標(biāo)的位置又不在Form1上,這樣,label1中顯示的信息自然不會(huì)發(fā)生變化。圖4-18控件設(shè)計(jì)要解決這個(gè)問(wèn)題,必須捕捉MouseLeave事件。下面我們利用API函數(shù)SetCapture和ReleaseCapture來(lái)完成MouseLeave事件。下面是完整的對(duì)象屬性值及程序代碼。

程序代碼如下:設(shè)計(jì)效果如圖4-19所示。圖4-19鼠標(biāo)移動(dòng)到“Command1”上

4.其他鼠標(biāo)操作技術(shù)

1)顯示和隱藏鼠標(biāo)

聲明:

DeclareFunctionShowCursorLib“user32”(ByValbShowAsLong)AsLong

說(shuō)明:bShow為1時(shí),顯示鼠標(biāo);bShow為0時(shí),隱藏鼠標(biāo)。

2)取得雙擊間隔時(shí)間

聲明:

DeclareFunctionGetDoubleClickTimeLib“user32”Alias“GetDoubleClickTime”()AsLong

說(shuō)明:返回千分之一秒的時(shí)間間隔數(shù)。

3)設(shè)置雙擊間隔時(shí)間

聲明:

DeclareFunctionSetDoubleClickTimeLib“user32”Alias“SetDoubleClickTime”

(ByValwCountAsLong)AsLong

說(shuō)明:wCount為千分之一秒的時(shí)間間隔數(shù)。

4)交換鼠標(biāo)按鈕

聲明:

DeclareFunctionSwapMouseButtonLib“user32”Alias“SwapMouseButton”

(ByValbSwapAsLong)AsLong

說(shuō)明:bSwsp值為True,為

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論