徐 璇,姜明新,黃 靜,徐 晶,李 敏
(大連民族學(xué)院 信息與通信工程學(xué)院,遼寧 大連116600)
Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0 的下一代開發(fā)工具,代號“Orcas”,是對 Visual Studio 2005一次及時、全面的升級。VS2008引入了250多個新特性,整合了對象、關(guān)系型數(shù)據(jù)、XML的訪問方式,語言更加簡潔。使用Visual Studio 2008可以高效開發(fā)Windows應(yīng)用程序[1]。
VS2008是一種集成開發(fā)環(huán)境,提供了MFC類庫。MFC(Microsoft Foundation Class Library)是微軟公司對大部分標(biāo)準(zhǔn)的Win32 API函數(shù)的封裝,提供了圖形環(huán)境應(yīng)用程序的框架及創(chuàng)建應(yīng)用程序的組件。
MFC類庫是C++語言與Windows的接口,利用MFC編寫程序的本質(zhì)是選擇該類庫中合適的類,并調(diào)用其下相應(yīng)成員函數(shù)來完成某個功能。整體上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。
VS提供了相應(yīng)的工具來完成該工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助用戶直觀地設(shè)計用戶接口;ClassWizard用來協(xié)助添加代碼到框架文件;編譯,則通過類庫實現(xiàn)了應(yīng)用程序特定的邏輯[2]。
對話框主要由兩部分組成:對話框資源和對話框類。對話框資源:可以使用對話框編輯器來配置對話框的界面,如對話框的大小、位置、樣式,對話框中控件的類型和位置等;對話框類:在MFC程序中,可以使用向?qū)椭脩艚⒁粋€與對話框資源相關(guān)聯(lián)的類,通常這個類由CDialog類派生。
Windows應(yīng)用程序工作的基本流程是從用戶那里得到數(shù)據(jù),經(jīng)過相應(yīng)的處理之后,再把處理結(jié)果輸出到屏幕,這就需要用到一個很重要的用戶接口——對話框,即一個可以接收消息、被移動或關(guān)閉的窗口。
對話框有兩種類型,模態(tài)對話框和非模態(tài)對話框。模態(tài)對話框是指當(dāng)其顯示時,程序會暫停執(zhí)行,直到關(guān)閉這個對話框才能繼續(xù)執(zhí)行任務(wù);而非模態(tài)對話框顯示時,允許轉(zhuǎn)而執(zhí)行程序中的其他任務(wù)?;诖颂攸c,選擇建立一個非模態(tài)對話框。
首先新建一個基于對話框類型的MFC AppWizard工程,命名為 “心電工作站”。然后使用build命令生成命令程序并執(zhí)行。創(chuàng)建一個非模態(tài)對話框,則需要利用CDialog類的Creat成員函數(shù)[2]。該函數(shù)具有以下兩種形式的聲明:
在MFC程序當(dāng)中是一系列派生類的聲明和定義以及一個由CWinApp類派生而來的類全局對象。調(diào)用完CWinApp的構(gòu)造函數(shù)后由連接器向程序內(nèi)自動鏈接的AfxWinMain函數(shù)調(diào)用,可以當(dāng)做MFC的程序入口函數(shù)。之后AfxWinMain函數(shù)調(diào)用成員函數(shù)。在程序的運(yùn)行過程當(dāng)中,由操作系統(tǒng)源源不斷地發(fā)送消息給應(yīng)用程序,由消息循環(huán)處理并且分發(fā)給相關(guān)的窗口對象的DefWindowProc成員函數(shù)。消息運(yùn)行結(jié)束后,用戶按下關(guān)閉按鈕后,操作系統(tǒng)向程序發(fā)送WM_CLOSE消息,應(yīng)用程序接收到這個消息以后的默認(rèn)操作是調(diào)用PostQuitMessage函數(shù),由這個函數(shù)發(fā)送WM_QUIT消息。當(dāng)程序?qū)ο蠼邮盏絎M_QUIT消息后消息循環(huán)結(jié)束,由AfxWinMain函數(shù)調(diào)用AfxTerm函數(shù)清理程序使用過的資源并且結(jié)束整個程序[3]。
首先將選擇為背景的.bmp圖片導(dǎo)入工程,資源視圖里面右鍵點擊工程文件夾→選擇 “添加資源”→位圖→選擇需要導(dǎo)入的位圖圖片。用下面的代碼將位圖加載為對話框的背景[4]。
完成主對話框的創(chuàng)建和顯示后,需要對子對話框進(jìn)行制作,使其實現(xiàn)對應(yīng)按鈕的功能。這些功能可以由MFC工具箱提供的控件來完成。
控件是獨立的小部件,是現(xiàn)成的程序組件,可獨立運(yùn)行并完成一定的功能??丶耐庥^和功能由其屬性規(guī)定。所有的控件都是由CWnd類派生的類對象,每個控件均有一個標(biāo)識符 (ID),程序中可通過對這個標(biāo)識符對應(yīng)的控件進(jìn)行操作??丶姆N類很多,如圖顯示了一些基本控件以及應(yīng)用控件制作的子對話框[5]。
圖1 基本控件說明Fig.1 Description of the basic space
圖2 子對話框顯示Fig.2 Display of sub-dialog box
在MFC中,對資源的操作通常都是通過一個與資源相關(guān)的類來完成的。對話框資源也有一個相應(yīng)的基類。因此首先需要創(chuàng)建一個類與要調(diào)用的子對話框相關(guān)聯(lián)(或者也可以選擇程序中已有的一個類與之相關(guān)聯(lián))[5]。實現(xiàn)代碼如下:
用與添加對話框背景圖片的形式將按鈕的背景位圖導(dǎo)入資源視圖里,然后通過下面的代碼給按鈕添加背景圖片:
以上各節(jié)所述的是實現(xiàn)界面可視化的核心與基礎(chǔ),搭建了界面的可視化模塊平臺。通過繪圖工具、PS圖像整合、界面模板修正定位等系列軟件,制作出界面的應(yīng)用圖片,依照程序及MFC界面實現(xiàn)的不同功能進(jìn)行圖片的反復(fù)定位[6]。
各軟件中的顏色定位都是以RGB為模板,以適應(yīng)電子設(shè)備的圖像輸出。通過對RGB色差的調(diào)整,達(dá)到理想的界面顏色設(shè)置。開始對圖像進(jìn)行二值顯示,只有黑白色調(diào),來對界面的整體布局進(jìn)行把握和評定。接著對部分的圖片進(jìn)行灰度處理,最后呈現(xiàn)出RGB的真彩色圖像。界面圖像的細(xì)節(jié)部分進(jìn)行放大后將出現(xiàn)明顯的失真現(xiàn)象,對于緩變圖像進(jìn)行細(xì)量化粗采樣以避免虛假輪廓,對于細(xì)節(jié)豐富圖像進(jìn)行細(xì)采樣粗量化以避免模糊。通過以上的基礎(chǔ)工作,整合實現(xiàn)了心電工作站界面樣板設(shè)計。
圖3 心電工作站界面Fig.3 Interface of ECG workstation
圖4 車輛違停檢測界面Fig.4 Interface of vehicle violations stop testing
為了讓程序能在沒有安裝VS軟件的電腦上運(yùn)行,要對程序進(jìn)行封裝,生成可執(zhí)行文件。 首先,新建安裝部署項目。將界面應(yīng)用程序的可執(zhí)行文件和相應(yīng)的類庫和組件添加進(jìn)來。然后為對應(yīng)的文件創(chuàng)建快捷方式,并把快捷方式分別復(fù)制或剪切到左邊的“用戶的‘程序’菜單”和“用戶桌面”中。這樣安裝程序安裝完成后會在 “開始→所有程序”和“桌面”上生成程序的快捷方式。然后,將屬性中的“DefaultLocation”的路徑中的“[Manufacturer]”去掉,不然做好的安裝程序默認(rèn)安裝目錄會是“C:Program Files電腦用戶名安裝解決方案名稱”;最后,打開系統(tǒng)必備頁,在“指定系統(tǒng)必備安裝組件的位置”中選擇下載與界面應(yīng)用程序相同位置的系統(tǒng)必備組件,便可在安裝文件包中包含.NetFramework組件,點擊“生成→生成解決方案”。完成上述操作后便可在解決方案文件夾下的Debug文件夾中找到生成的安裝文件了。
MFC是C++實現(xiàn)界面可視化設(shè)計的核心,配合動態(tài)鏈接庫實現(xiàn)界面設(shè)計。雖然MFC可能被取代,但MFC是C++語言走向真正實用化,以及研究者實現(xiàn)進(jìn)一步發(fā)展的基礎(chǔ)。一個友好美觀的界面會帶來舒適的視覺享受,拉近距離,創(chuàng)造價值。界面設(shè)計不再是單純的美術(shù)繪畫,需要定位使用者、使用環(huán)境、使用方式并且為最終的需求服務(wù),是純粹的科學(xué)性的藝術(shù)設(shè)計。文中通過對基于MFC的一系列操作,實現(xiàn)了一個良好的交互平臺的設(shè)計。隨著科學(xué)技術(shù)和時代的不斷發(fā)展,界面設(shè)計將會步入一個更高的平臺。
[1]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[2]溫秀梅,丁學(xué)鈞.Visual C++面向?qū)ο蟪绦蛟O(shè)計[M].北京:清華大學(xué)出版社,2005.
[3]譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計[M].北京:清華大學(xué)出版社,2006.
[4]袁媛.基于MFC類設(shè)計ObjectARX應(yīng)用程序界面[J].中南大學(xué)學(xué)報,2004,35(3):448-452.YUAN Yuan.MFG sequence-based design for ObjectARX application interface[J].Journal of Central South University,2004,35(3):448-452.
[5]楊剛.基于MFC用戶界面設(shè)計主、子對話框數(shù)據(jù)的傳遞[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新, 2005,18(6):98-99.YANG Gang.Data transfer of Son and Lord dialog box based on theUIofMFC[J].Development& Innovation of Machinery&Electrical Products,2005,18(6):98-99.
[6]楊紅軍,王金英.基于VC++的多線程通信程序設(shè)計[J].電腦知識與技術(shù),2008(29):64.YANG Hong-jun,WANG Jin-ying.On system design of the mult-threaded communication based on VC++[J].Computer Knowledge and Technology,2008(29):64.