界面編程基礎(chǔ)知識_第1頁
界面編程基礎(chǔ)知識_第2頁
界面編程基礎(chǔ)知識_第3頁
界面編程基礎(chǔ)知識_第4頁
界面編程基礎(chǔ)知識_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第14章 標(biāo)準(zhǔn)庫Windows程序設(shè)計1、Windows編程的基本概念2、Windows中的數(shù)據(jù)類型3、消息驅(qū)動與消息循環(huán)4、資源與資源文件313.2 界面編程人機界面HCI(human-computer interface)又稱用戶界面UI(user interface),是人與計算機之間傳遞、交換信息的媒介和對話接口,是計算機系統(tǒng)的重要組成部分。由于大多數(shù)應(yīng)用程序是以用戶界面為框架的,因此界面編程是軟件開發(fā)的核心編程之一。413.2 界面編程用戶界面的設(shè)計與操作系統(tǒng)平臺有關(guān),操作系統(tǒng)界面一般有兩種:命令行界面CLI(command line user interface),例如DOS;圖

2、形用戶界面GUI(graphical user interface),例如Windows。513.2 界面編程早期的計算機普遍使用命令行界面,人機操作的特點是文本顯示和命令輸入。時至今日,命令行界面主要用在系統(tǒng)管理、遠(yuǎn)程維護、語言處理等系統(tǒng)軟件中,因而命令行界面也稱為控制臺界面,本書前面章節(jié)的程序都是命令行程序。圖形用戶界面是目前操作系統(tǒng)廣泛使用的人機界面。人機操作的特點是圖形顯示和交互圖形化,與命令行界面相比,圖形用戶界面對于使用者來說在視覺上更易于接受,操作上更簡便。本節(jié)介紹Windows系統(tǒng)下的圖形用戶界面編程技術(shù)。613.2.1 Windows編程的基本概念Windows應(yīng)用程序的一個

3、突出特點是它有一個美觀的圖形用戶界面窗口。窗口中可以包含標(biāo)題欄、菜單、工具條、狀態(tài)欄、滾動條等,對話框中還包含類型不同的子控件,例如按鈕、復(fù)選框、列表框、組合框、編輯框等。窗口、對話框、圖形元素與鍵盤和鼠標(biāo)的配合,方便了用戶對應(yīng)用程序的操作。713.2.1 Windows編程的基本概念Windows應(yīng)用程序的界面編程,即是設(shè)計滿足要求的窗口程序。簡單的Windows應(yīng)用程序只有一個窗口,而復(fù)雜的Windows應(yīng)用程序有多個窗口。Windows運行機制的核心是動態(tài)鏈接,應(yīng)用程序在運行時使用動態(tài)鏈接庫,調(diào)用Windows提供的系統(tǒng)功能。Windows為程序員提供了幾千個函數(shù),稱為Windows A

4、PI函數(shù),用于實現(xiàn)用戶界面和顯示文字和圖形等。813.2.1 Windows編程的基本概念Windows編程有多種技術(shù),其中使用C語言和調(diào)用Windows API函數(shù)被稱作SDK編程方法,它今天依然是編寫Windows程序的有效方法。自從出現(xiàn)面向?qū)ο蟪绦蛟O(shè)計方法以來,Windows程序結(jié)構(gòu)和開發(fā)工具發(fā)生了巨大的變化,例如MFC(Microsoft Foundation Classes)、Visual Basic、C#等。由于這些面向?qū)ο笄铱梢暬拈_發(fā)工具能大幅提高Windows程序的開發(fā)效率,因而得到了廣泛應(yīng)用。但無論如何,掌握SDK編程方法是必要的。913.2.1 Windows編程的基本概

5、念編寫Windows程序,需要在程序源文件開始位置包含頭文件:windows.h是主要的包含文件,它包含了其他Windows頭文件。這些頭文件定義了Windows的函數(shù)原型、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)、宏定義和預(yù)定義符號常量,是Windows程序開發(fā)文件中的重要組成部分。有興趣的讀者可以閱讀這些頭文件的細(xì)節(jié),對提高Windows編程水平有很大幫助。#include /Windows頭文件頭文件1013.2.1 Windows編程的基本概念Windows編程涉及大量API技術(shù)文檔信息,可以通過安裝MSDN得到聯(lián)機幫助。初學(xué)Windows編程的人面對Windows龐大的知識系統(tǒng)往往茫然不知所措,實際上它是

6、非常有規(guī)律的:1113.2.1 Windows編程的基本概念通過掌握Windows的基本數(shù)據(jù)定義和數(shù)據(jù)類型奠定編程基礎(chǔ);通過詳細(xì)分析Windows編程結(jié)構(gòu)了解其編程規(guī)律;通過構(gòu)造和使用通用的編程框架形成編程模板,盡快上手;通過研究API文檔的分類特點學(xué)會快速查閱需要的信息;了解、熟悉和模仿Windows的重要編程習(xí)慣,如命名時的“見其名知其意”。1213.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型Windows定義了若干實用的宏,例如:#define TRUE 1#define FALSE 0#define CALLBACK _stdcall#define WINAPI _stdcall#define API

7、ENTRY WINAPI#define FAR far#define CONST const#define LOWORD(x) (WORD)(x)#define HIWORD(x) (WORD)(DWORD)(x) 16) & 0 xFFFF)1313.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型其中_stdcall表示PASCAL調(diào)用約定,被調(diào)函數(shù)采用自右向左的順序參數(shù)入棧,函數(shù)自己在退出時清空堆棧;非_stdcall聲明為C調(diào)用約定,被調(diào)函數(shù)采用自右向左的順序參數(shù)入棧,由調(diào)用者清空堆棧;CALLBACK表示回調(diào)函數(shù),WINAPI表示W(wǎng)indows API函數(shù);far表示32位遠(yuǎn)指針;LOWORD(x

8、)取x的低16位值,HIWORD(x)取x的高16位值。1413.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型為了提高程序的可讀性和兼容性,Windows建立了完整的數(shù)據(jù)類型體系,稱為Win32應(yīng)用程序接口數(shù)據(jù)類型。常用的Windows數(shù)據(jù)類型見表13-3。1513.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型表13-3 常用的Windows數(shù)據(jù)類型Windows數(shù)據(jù)類型數(shù)據(jù)類型 C語言類型語言類型含義含義BOOLint邏輯類型(取值為邏輯類型(取值為TRUE或或FALSE)BYTEunsigned char字節(jié)型字節(jié)型CHARcharANSI字符字符COLORREFunsigned long顏色值,分紅、綠、藍(lán)(顏色值,分紅、

9、綠、藍(lán)(RGB)字節(jié))字節(jié)DWORDunsigned long無符號長整型無符號長整型INTint32位整型位整型LONGlong32位長整型位長整型LPARAMlongLONG型消息參數(shù)型消息參數(shù)LPCSTRCONST CHAR *只讀型只讀型8位位ANSI字符串的指針字符串的指針LPCTSTRLPCWSTR/LPCSTRLPCWSTR或或LPCSTRLPCWSTRCONST WCHAR *只讀型只讀型16位位Unicode字符串的指針字符串的指針1613.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型續(xù)表13-3 常用的Windows數(shù)據(jù)類型Windows數(shù)據(jù)類型數(shù)據(jù)類型 C語言類型語言類型含義含義LPDWO

10、RDDWORD *DWORD的指針的指針LPSTRCHAR *8位位ANSI字符串的指針字符串的指針LPTSTRLPWSTR/LPSTRLPWSTR或或LPSTRLPWSTRWCHAR *16位位ANSI字符串的指針字符串的指針LPVOIDvoid *void的指針的指針LRESULTlong消息處理結(jié)果值消息處理結(jié)果值TCHARWCHAR/CHARWCHAR或或CHARUINTunsigned int無符號無符號INTVOIDvoidvoidWCHARwchar_t16位位Unicode字符字符WORDunsigned short16位無符號整型位無符號整型1713.2.2 數(shù)據(jù)定義與數(shù)據(jù)類

11、型續(xù)表13-3 常用的Windows數(shù)據(jù)類型Windows數(shù)據(jù)類型數(shù)據(jù)類型 C語言類型語言類型含義含義WPARAMunsigned intWORD型消息參數(shù)型消息參數(shù)1813.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型在Windows應(yīng)用程序中,會有許多諸如窗口、按鈕、滾動條、設(shè)備、控件或者文件等復(fù)雜數(shù)據(jù)結(jié)構(gòu)的不同對象和同類對象中的不同實例。為了在程序中區(qū)分和使用它們,需要對它們進(jìn)行標(biāo)識。有別于普通變量的標(biāo)識,Windows將這些對象的標(biāo)識稱為句柄(handle)。句柄是Windows編程的基礎(chǔ),一個句柄能夠唯一區(qū)別Windows正在使用的對象或?qū)嵗?。?yīng)用程序幾乎總是通過調(diào)用一個API函數(shù)來獲得一個句柄,之后

12、其他的API函數(shù)就可以使用該句柄,以引用相應(yīng)的對象的信息。常用的Windows句柄類型見表13-4。1913.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型表13-4 常用的Windows句柄類型Windows句柄類型句柄類型 C語言類型語言類型含義含義HANDLEvoid *通用對象句柄通用對象句柄HACCELHACCEL_結(jié)構(gòu)體指針結(jié)構(gòu)體指針快捷鍵列表句柄快捷鍵列表句柄HBITMAPHBITMAP_結(jié)構(gòu)體指針結(jié)構(gòu)體指針位圖句柄位圖句柄HBRUSHHBRUSH_結(jié)構(gòu)體指針結(jié)構(gòu)體指針畫刷句柄畫刷句柄HCURSORHICON_結(jié)構(gòu)體指針結(jié)構(gòu)體指針光標(biāo)句柄光標(biāo)句柄HDCHDC_結(jié)構(gòu)體指針結(jié)構(gòu)體指針設(shè)備場境(設(shè)備場境(

13、DC)句柄)句柄HFILEint文件句柄文件句柄.HFONTHFONT_結(jié)構(gòu)體指針結(jié)構(gòu)體指針字體句柄字體句柄HGDIOBJvoid near *GDI對象句柄對象句柄HGLOBALvoid *全局內(nèi)存塊句柄全局內(nèi)存塊句柄2013.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型續(xù)表13-4 常用的Windows句柄類型Windows句柄類句柄類型型C語言類型語言類型含義含義HICONHICON_結(jié)構(gòu)體指針結(jié)構(gòu)體指針圖標(biāo)句柄圖標(biāo)句柄HINSTANCEHINSTANCE_結(jié)構(gòu)體指針結(jié)構(gòu)體指針實例句柄實例句柄HMENUHMENU_結(jié)構(gòu)體指針結(jié)構(gòu)體指針菜單句柄菜單句柄HMODULEHINSTANCE_結(jié)構(gòu)體指針結(jié)構(gòu)體指針模

14、塊句柄。模塊句柄。HPALETTEHPALETTE_結(jié)構(gòu)體指針結(jié)構(gòu)體指針調(diào)色板句柄調(diào)色板句柄HPENHPEN_結(jié)構(gòu)體指針結(jié)構(gòu)體指針畫筆句柄畫筆句柄HRGNHRGN_結(jié)構(gòu)體指針結(jié)構(gòu)體指針區(qū)域句柄區(qū)域句柄HRSRCHRSRC_結(jié)構(gòu)體指針結(jié)構(gòu)體指針資源句柄資源句柄HWNDHWND_結(jié)構(gòu)體指針結(jié)構(gòu)體指針窗口句柄窗口句柄2113.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型Windows還定義了一些有用的結(jié)構(gòu)體及結(jié)構(gòu)體指針類型,例如點的坐標(biāo):typedef struct tagPOINT LONG x; LONG y; POINT, *PPOINT, FAR *LPPOINT;2213.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型寬度和高

15、度:typedef struct tagSIZE LONG cx; LONG cy; SIZE, *PSIZE, *LPSIZE;2313.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型矩形框:typedef struct tagRECT LONG left; LONG top; LONG right; LONG bottom; RECT, *PRECT, FAR *LPRECT;typedef const RECT FAR* LPCRECT;2413.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型一般地,Windows自定義數(shù)據(jù)類型、句柄類型和宏定義的關(guān)鍵字都是大寫。編寫Windows應(yīng)用程序時,程序員偏愛使用“匈牙利表示法”的變

16、量命名約定,即變量名以一個或多個小寫字母為前綴,這些字母表示變量的數(shù)據(jù)類型。表13-5列出了在本書中經(jīng)常使用的變量前綴。2513.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型表13-5 常用變量前綴前綴前綴數(shù)據(jù)類型數(shù)據(jù)類型前綴前綴數(shù)據(jù)類型數(shù)據(jù)類型前綴前綴數(shù)據(jù)類型數(shù)據(jù)類型ccharnshortiintx,yx和和y坐標(biāo)坐標(biāo)cx,cyx長度和長度和y長度長度bBOOLfint,代表,代表flagwWORDlLONGdwDWORDfnfunction函數(shù)函數(shù)sstringsz以以0結(jié)尾的字符串結(jié)尾的字符串 h句柄句柄p,lp指針指針例如定義C語言字符串,在Windows程序中會這樣寫:char szMessage20

17、0;2613.2.3 消息與消息循環(huán)1事件與消息命令行界面程序是過程式的,即程序按順序調(diào)用函數(shù)直至運行結(jié)束。圖形用戶界面程序是事件驅(qū)動式的,即程序啟動并創(chuàng)建程序窗口之后,隨即進(jìn)入一個等待狀態(tài)(稱為消息循環(huán)),直到接收到一個事件(稱為消息),例如鍵盤輸入、鼠標(biāo)單擊等,程序脫離等待狀態(tài)對事件進(jìn)行相應(yīng)的處理(稱為消息處理或響應(yīng)消息),處理完成后又進(jìn)入等待狀態(tài)。2713.2.3 消息與消息循環(huán)為了描述事件的各種信息,Windows定義了一個消息(message)類型如下:typedef struct tagMSG HWND hwnd; /產(chǎn)生消息的窗口句柄產(chǎn)生消息的窗口句柄 UINT message;

18、 /消息的標(biāo)識碼消息的標(biāo)識碼 WPARAM wParam; /消息附加信息消息附加信息1 LPARAM lParam; /消息附加信息消息附加信息2 DWORD time; /消息進(jìn)入消息隊列的時刻消息進(jìn)入消息隊列的時刻 POINT pt; /發(fā)送該消息時光標(biāo)的屏幕位置發(fā)送該消息時光標(biāo)的屏幕位置 MSG, *PMSG, FAR *LPMSG;2813.2.3 消息與消息循環(huán)當(dāng)Windows發(fā)生某個事件時,Windows系統(tǒng)會把該事件的相關(guān)信息填寫到MSG結(jié)構(gòu)的各個成員中,并設(shè)法把這個消息發(fā)送到應(yīng)用程序中。應(yīng)用程序根據(jù)消息中的窗口句柄hwnd和消息識別碼message來確定由哪個窗口中的哪一段消

19、息處理代碼響應(yīng)這個消息。Windows系統(tǒng)預(yù)先定義了絕大多數(shù)的消息,例如WM_CREATE、WM_DESTROY等。2913.2.3 消息與消息循環(huán)2消息循環(huán)處理機制Windows系統(tǒng)為每個應(yīng)用程序都建立了一個消息隊列(message queues)。在程序運行過程中如果發(fā)生了一個事件,Windows會把這個事件所對應(yīng)的消息送入消息隊列等待使用。應(yīng)用程序通過GetMessage函數(shù)從消息隊列中獲取消息,并利用GetMessage函數(shù)的返回值形成一個消息循環(huán),從而可以不斷從消息隊列中獲取消息。3013.2.3 消息與消息循環(huán) Windows系統(tǒng)會根據(jù)消息中的hwnd找到應(yīng)該接收消息的程序窗口,并

20、根據(jù)窗口句柄找到該窗口的窗口過程WndProc(window procedure),以消息作為參數(shù)調(diào)用該函數(shù)。在WndProc函數(shù)中,根據(jù)消息標(biāo)識message執(zhí)行該消息所對應(yīng)的代碼,對消息進(jìn)行處理。處理完成后,只要該消息不是終止應(yīng)用程序消息,就會立即返回到消息循環(huán),以等待獲取下一個消息。Windows應(yīng)用程序就是這樣周而復(fù)始進(jìn)行消息循環(huán),直到發(fā)出終止應(yīng)用程序的WM_QUIT消息為止,例如單擊窗口的關(guān)閉按鈕。3113.2.3 消息與消息循環(huán)從上述消息處理機制可以看到,Windows程序分為兩部分:一個是以消息循環(huán)為主的獲取和發(fā)送消息,另一個是專門處理消息的WndProc函數(shù)。Windows消息

21、處理流程如圖所示。由于Windows是多任務(wù)操作系統(tǒng),因此Windows會根據(jù)實際的消息性質(zhì)來調(diào)度消息究竟發(fā)送到哪個程序進(jìn)程的哪個窗口上。3213.2.3 消息與消息循環(huán)圖13.6 Windows消息處理流程3313.2.3 消息與消息循環(huán)3消息源Windows程序的消息來源有四種。(1)硬件事件:包括鍵盤和鼠標(biāo)的輸入。這類消息首先放在系統(tǒng)消息隊列中,然后由Windows將它們送入應(yīng)用程序消息隊列中,由應(yīng)用程序來處理消息。3413.2.3 消息與消息循環(huán)(2)控件消息:用來與Windows的控件對象,例如列表框、按鈕、復(fù)選框等進(jìn)行雙向通信,當(dāng)用戶在列表框中改動當(dāng)前選擇或改變了復(fù)選框的狀態(tài)時發(fā)出

22、此類消息。這類消息一般不經(jīng)過應(yīng)用程序消息隊列,而是直接發(fā)送到控件對象上去。(3)系統(tǒng)消息:對程序化的事件或系統(tǒng)時鐘中斷作出反應(yīng)。一些系統(tǒng)消息,象DDE消息(動態(tài)數(shù)據(jù)交換消息)要通過Windows的系統(tǒng)消息隊列,而有的則不通過系統(tǒng)消息隊列而直接送入應(yīng)用程序消息隊列,例如創(chuàng)建窗口WM_CREATE消息。3513.2.3 消息與消息循環(huán)(4)用戶消息:程序員使用RegisterWindowMessage函數(shù)自定義并在應(yīng)用程序中主動發(fā)出的消息,一般由應(yīng)用程序的某一部分內(nèi)部處理。3613.2.3 消息與消息循環(huán)圖13.7 Windows消息源3713.2.3 消息與消息循環(huán)進(jìn)程發(fā)送消息有兩個API函數(shù):

23、PostMessage和SendMessage。PostMessage函數(shù)將消息存放在消息隊列中,該消息不一定立刻處理;SendMessage直接發(fā)送消息到消息循環(huán)中并及時處理。3813.2.4 資源與資源文件在Windows應(yīng)用程序中有一些特殊數(shù)據(jù),例如用戶界面上的菜單、圖標(biāo)、位圖等。這些數(shù)據(jù)具有一定的獨立性,程序不是在任何時候都要用到它們;它們存放在可執(zhí)行文件中,能夠避免程序擁有大量分散文件。Windows將這些數(shù)據(jù)稱為資源。3913.2.4 資源與資源文件簡單地說,資源就是一種可供Windows應(yīng)用程序使用,可單獨編輯并動態(tài)加載的數(shù)據(jù)。所謂單獨編輯是指利用軟件工具可以直接編輯可執(zhí)行文件里

24、面的資源數(shù)據(jù),無需重新編譯程序就能夠修改程序用到的諸如菜單之類的內(nèi)容;所謂動態(tài)加載是指資源不像程序中的靜態(tài)數(shù)據(jù)(如全局變量)那樣在程序剛開始運行即裝入到內(nèi)存中,而是在必需時才加載到內(nèi)存中。4013.2.4 資源與資源文件Windows資源有菜單、圖標(biāo)、位圖、光標(biāo)、對話框、工具欄、快捷鍵、字符串、自定義資源等類型。資源是由RC資源描述文件定義的,經(jīng)編譯后轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)存儲在可執(zhí)行文件中。應(yīng)用程序通過API函數(shù)將其動態(tài)加載,通過資源標(biāo)識區(qū)分不同的資源。4113.2.4 資源與資源文件1資源頭文件為了區(qū)分不同的資源,一個應(yīng)用程序中相同類型的資源必須有唯一的標(biāo)識。這些標(biāo)識實際上是符號常量,其定義形式

25、為:例如1000可以同時作為菜單、圖標(biāo)的資源標(biāo)識值,但兩個菜單的資源標(biāo)識值不能相同。#define 資源標(biāo)識符資源標(biāo)識符 資源標(biāo)識值資源標(biāo)識值4213.2.4 資源與資源文件由于資源標(biāo)識既出現(xiàn)在資源描述文件中(定義資源必須有標(biāo)識),又出現(xiàn)在程序文件中(加載資源必須指明標(biāo)識),因此在程序的工程項目中一般將所有資源標(biāo)識定義在資源頭文件resource.h中,凡是用到資源標(biāo)識的地方都包含這個頭文件。4313.2.4 資源與資源文件表13-6 資源標(biāo)識符前綴標(biāo)識前綴標(biāo)識前綴用途用途標(biāo)識前綴標(biāo)識前綴用途用途IDM_菜單命令菜單命令I(lǐng)DB_位圖位圖ID_或或IDC_ 對話框中的控件對話框中的控件IDC_光

26、標(biāo)光標(biāo)IDD_對話框?qū)υ捒騃DI_圖標(biāo)圖標(biāo)IDR_菜單、快捷鍵、工具欄、自菜單、快捷鍵、工具欄、自定義資源定義資源IDS_字符串字符串為提高程序可讀性,Windows編程有一套資源標(biāo)識符命名規(guī)則,表13-6列出了常用的資源標(biāo)識符前綴。4413.2.4 資源與資源文件例如:#define IDI_APP 100 /主窗口圖標(biāo)資源標(biāo)識符主窗口圖標(biāo)資源標(biāo)識符#define IDR_APP 102 /主窗口菜單快捷鍵資源標(biāo)識符主窗口菜單快捷鍵資源標(biāo)識符#define IDD_APP 102 /主對話框資源標(biāo)識符主對話框資源標(biāo)識符#define IDS_APP_TITLE 1000 /應(yīng)用程序標(biāo)題資源標(biāo)

27、識符應(yīng)用程序標(biāo)題資源標(biāo)識符#define IDC_BUTTON1 1201 /按鈕資源標(biāo)識符按鈕資源標(biāo)識符#define IDB_CARPICTUE 1202 /位圖資源標(biāo)識符位圖資源標(biāo)識符4513.2.4 資源與資源文件2資源描述文件資源描述文件定義了Windows應(yīng)用程序中的各種資源,其擴展名為.rc,文件名通常與程序的工程項目名稱相同。對于位圖、圖標(biāo)、光標(biāo)等資源,資源描述文件只是說明它們的標(biāo)識和存儲路徑,其圖形數(shù)據(jù)是以文件形式存放在項目的res子文件夾下。4613.2.4 資源與資源文件可以將資源描述文件添加到項目中隨程序一起編譯,資源描述文件會生成二進(jìn)制形式的資源文件,其擴展名為.re

28、s。連接器將程序目標(biāo)代碼文件.obj、庫文件.lib(或.a)、資源文件.res連接起來產(chǎn)生可執(zhí)行文件.exe。如圖給出了Windows應(yīng)用程序工程項目中各種文件之間的關(guān)系。4713.2.4 資源與資源文件圖13.8 Windows應(yīng)用程序工程項目框架4813.2.4 資源與資源文件3資源可視化設(shè)計VC可以對資源進(jìn)行可視化編輯。所謂可視化設(shè)計是指用“所見即所得”方式進(jìn)行資源定義,例如用鼠標(biāo)拖動布置對話框上的控件等,如圖所示是一個對話框資源的可視化編輯界面。由于資源大多數(shù)是圖形元素,因此可視化設(shè)計能夠快速建立資源描述文件。4913.2.4 資源與資源文件圖13.9 對話框可視化編輯5013.2.

29、4 資源與資源文件4資源描述語句資源描述文件是一個文本文件,通過編寫資源描述語句在文件中定義資源。(1)菜單資源一個菜單資源一般由菜單、彈出菜單和菜單項三個層次組成,其定義語句形式為:菜單標(biāo)識符菜單標(biāo)識符 MENU 加載特性選項加載特性選項BEGIN 彈出菜單定義語句.END5113.2.4 資源與資源文件MENU語句定義了一個菜單資源的內(nèi)容。菜單資源是一個信息集合,這些信息定義應(yīng)用程序的菜單的表現(xiàn)形式及其功能。MENU語句定義菜單時,可以使用表13-7所列的加載特性選項值來聲明菜單被載入時的特性。5213.2.4 資源與資源文件表13-7 資源加載特性選項加載特性選項加載特性選項說明說明DI

30、SCARDABLE如果資源不再需要可被放棄。如果資源不再需要可被放棄。FIXED資源保留在一個固定的內(nèi)存位置。資源保留在一個固定的內(nèi)存位置。MOVEABLE資源在必要時可被移動以便節(jié)省內(nèi)存。資源在必要時可被移動以便節(jié)省內(nèi)存。LOADONCALL資源在調(diào)用時被加載(默認(rèn)選項)。資源在調(diào)用時被加載(默認(rèn)選項)。PRELOAD資源被立即加載。資源被立即加載。5313.2.4 資源與資源文件彈出菜單定義語句形式為:POPUP語句標(biāo)記一個彈出菜單定義的開始。彈出菜單(也稱下拉菜單)是一個特殊的菜單項,當(dāng)它被選中時,會顯示其子菜單項。表13-8的菜單選項指定了菜單項的外觀。POPUP 彈出菜單標(biāo)題彈出菜單

31、標(biāo)題 菜單選項菜單選項BEGIN 菜單項定義語句.END5413.2.4 資源與資源文件表13-8 菜單選項菜單選項菜單選項說明說明CHECKED菜單項有一個選中標(biāo)記,頂層菜單此選項無效。菜單項有一個選中標(biāo)記,頂層菜單此選項無效。GRAYED菜單項不可用,其文字顏色為灰。菜單項不可用,其文字顏色為灰。INACTIVE菜單項名正常顯示但不可選。菜單項名正常顯示但不可選。MENUBARBREAK將菜單新的一列與舊的一列用一垂直線分開。將菜單新的一列與舊的一列用一垂直線分開。MENUBREAK將菜單項放在新的一行?;?qū)棾霾藛畏旁谛碌囊涣?,將菜單項放在新的一行?;驅(qū)棾霾藛畏旁谛碌囊涣校兄g沒有分

32、割線。列之間沒有分割線。5513.2.4 資源與資源文件菜單項定義語句形式為:其中菜單項名稱字符串可以包含轉(zhuǎn)義字符t和a。t字符使菜單文字按列對齊,a字符使所有后面的文字與菜單欄或彈出菜單右對齊。在字符前如果有&,則該字符將有一條下劃線且作為菜單快捷字母鍵。菜單項標(biāo)識符是一個整數(shù)值,當(dāng)該菜單項被單擊時,這個菜單項標(biāo)識值將隨消息WM_COMMAND傳遞到窗口過程WndProc中。MENUITEM 菜單項名稱菜單項名稱,菜單項標(biāo)識符菜單項標(biāo)識符 ,菜單選項菜單選項5613.2.4 資源與資源文件特殊菜單項“MENUITEM SEPARATOR”的作用是在菜單上形成一條橫向的分割線,便于對菜

33、單項進(jìn)行分類。例如設(shè)計一個如圖所示的菜單界面。5713.2.4 資源與資源文件其菜單資源定義為:IDR_APP MENU DISCARDABLE /主窗口菜單資源主窗口菜單資源BEGIN POPUP 文件文件(&F) BEGIN MENUITEM 新建新建(&N)tCtrl+N, IDM_FILE_NEW MENUITEM 打開打開(&O).tCtrl+O, IDM_FILE_OPEN MENUITEM SEPARATOR MENUITEM 退出退出(&X), IDM_EXIT END POPUP 幫助幫助(&H) BEGIN MENUITEM 軟件簡介

34、軟件簡介(&A)., IDM_ABOUT ENDEND5813.2.4 資源與資源文件(2)對話框資源對話框資源定義語句形式為:DIALOG語句定義了一個對話框模板。加載特性選項可以使用表13-7的值,x、y、width、height表示對話框左上角在屏幕上的位置和對話框的寬度、高度值,對話框風(fēng)格語句定義對話框的外觀風(fēng)格,參見表13-9。對話框資源標(biāo)識符對話框資源標(biāo)識符 DIALOG 加載特性選項加載特性選項 x, y, width, height對話框風(fēng)格語句.BEGIN 控件語句.END5913.2.4 資源與資源文件表13-9 對話框風(fēng)格語句對話框風(fēng)格語句對話框風(fēng)格語句說明說明S

35、TYLE styles指定對話框的窗口風(fēng)格。指定對話框的窗口風(fēng)格。styles可以使用可以使用“|”位或運算組位或運算組合多種預(yù)定義值。合多種預(yù)定義值。EXSTYLE=ext-styles指定對話框的擴展窗口風(fēng)格。指定對話框的擴展窗口風(fēng)格。ext-styles可以使用可以使用“|”位位或運算組合多種預(yù)定義值?;蜻\算組合多種預(yù)定義值。CAPTION text指定對話框標(biāo)題,指定對話框標(biāo)題,text為字符串。為字符串。FONT pointsize, typeface指定對話框中文字的大小指定對話框中文字的大小pointsize和字體名稱和字體名稱typeface,字體名稱為字符串。字體名稱為字符串

36、。CLASS class指定對話框的窗口類,如果沒有此語句則使用指定對話框的窗口類,如果沒有此語句則使用Windows標(biāo)準(zhǔn)對話框類。標(biāo)準(zhǔn)對話框類。MENU menuname 指定對話框的菜單資源標(biāo)識,如果沒有此語句則對話框指定對話框的菜單資源標(biāo)識,如果沒有此語句則對話框沒有菜單。沒有菜單。6013.2.4 資源與資源文件控件語句定義在對話框上出現(xiàn)的一個或多個控件,包含控件文本(text)、控件在對話框上的位置(x、y)、控件寬度(width)和高度(height)、控件風(fēng)格(style)等屬性。DIALOG語句可以使用的控件見表13-10。6113.2.4 資源與資源文件表13-10 對話框控

37、件控件控件控件語句控件語句默認(rèn)按鈕默認(rèn)按鈕DEFPUSHBUTTON text,id,x,y,width,height ,style按鈕按鈕PUSHBUTTON text,id,x,y,width,height ,style單選按鈕單選按鈕RADIOBUTTON text,id,x,y,width,height ,style復(fù)選框復(fù)選框CHECKBOX text,id,x,y,width,height ,style矩形框矩形框GROUPBOX text,id,x,y,width,height ,style列表框列表框LISTBOX id,x,y,width,height ,style組合框組合

38、框COMBOBOX id,x,y,width,height ,style編輯框編輯框EDITTEXT id,x,y,width,height ,style文字居中控件文字居中控件CTEXT text,id,x,y,width,height ,style文字左對齊控件文字左對齊控件LTEXT text,id,x,y,width,height ,style文字右對齊控件文字右對齊控件RTEXT text,id,x,y,width,height ,style6213.2.4 資源與資源文件續(xù)表13-10 對話框控件控件控件控件語句控件語句卷滾條卷滾條SCROLLBAR id,x,y,width,he

39、ight ,style指定類控件指定類控件CONTROL text,id,class,style,x,y,width,height ,extended-style預(yù)定義的預(yù)定義的class有有BUTTON、COMBOBOX、EDIT、LISTBOX、SCROLLBAR、STATIC6313.2.4 資源與資源文件圖13.11 對話框界面例如設(shè)計一個如圖所示的對話框界面。6413.2.4 資源與資源文件其對話框資源定義為:IDD_APP DIALOG 0, 0, 305, 102STYLE DS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSME

40、NUCAPTION 對話框?qū)υ捒騀ONT 9, 宋體宋體BEGIN DEFPUSHBUTTON 默認(rèn)按鈕默認(rèn)按鈕,IDC_BUTTON1,158,73,50,17 LTEXT 編輯框編輯框,IDC_STATIC,7,7,133,9 EDITTEXT IDC_EDIT1,7,21,133,14 GROUPBOX 矩形框矩形框,IDC_STATIC,229,7,64,43 PUSHBUTTON 按鈕按鈕,IDC_BUTTON2,220,73,50,17 CHECKBOX 復(fù)選框復(fù)選框,IDC_CHECK1,234,21,56,10 RADIOBUTTON 單選按鈕單選按鈕,IDC_RADIO1,2

41、34,35,48,10 COMBOBOX IDC_COMBO1,149,21,72,30,CBS_DROPDOWN|CBS_SORT LISTBOX IDC_LIST1,7,56,133,33 LTEXT 列表框列表框,IDC_STATIC,7,43,133,9 LTEXT 組合框組合框,IDC_STATIC,149,7,72,9END 6513.2.4 資源與資源文件(3)快捷鍵資源快捷鍵總是和菜單項配合使用的。在資源描述文件中,用快捷鍵表來描述菜單項的快捷鍵,其語句形式為:快捷鍵標(biāo)識符快捷鍵標(biāo)識符 ACCELERATORS 加載特性選項加載特性選項BEGIN event,id,typeop

42、tion .END6613.2.4 資源與資源文件快捷鍵表為應(yīng)用程序定義了一個或多個快捷鍵,通過TranslateAccelerator函數(shù)可以將消息隊列中快捷鍵消息翻譯成WM_COMMAND或WM_SYSCOMMAND消息。當(dāng)按下快捷鍵時,程序執(zhí)行快捷鍵命令標(biāo)識對應(yīng)的消息處理,使用戶能夠快速執(zhí)行一個任務(wù)。event參數(shù)指定用作快捷鍵的按鍵,可以是表13-11中的任意一個值。6713.2.4 資源與資源文件表13-11 快捷鍵資源按鍵類型按鍵值按鍵值含義含義字符字符單個單個ASCII字符。字符前面可以加上插入符字符。字符前面可以加上插入符,表示該字符是一,表示該字符是一個控制字符。個控制字符。

43、整數(shù)值整數(shù)值數(shù)值對應(yīng)的數(shù)值對應(yīng)的ASCII字符。字符。type參數(shù)必須是參數(shù)必須是ASCII。虛鍵值虛鍵值虛鍵值是虛鍵值是Windows預(yù)先定義好的整數(shù)值,為字母數(shù)字的虛鍵可預(yù)先定義好的整數(shù)值,為字母數(shù)字的虛鍵可以用雙引號加大寫字母或數(shù)字來表示。以用雙引號加大寫字母或數(shù)字來表示。type參數(shù)必須是參數(shù)必須是VIRTKEY。6813.2.4 資源與資源文件id參數(shù)指定一個快捷鍵命令標(biāo)識,該值用來選擇消息處理任務(wù),option參數(shù)指定快捷鍵選項,可以是表13-12中的一個值或使用位或“|”運算的多個值組合。6913.2.4 資源與資源文件表13-12 快捷鍵選項NOINVERT 表示當(dāng)加速鍵被用到

44、時所有頂層菜單項都不高亮。表示當(dāng)加速鍵被用到時所有頂層菜單項都不高亮。ALT使加速鍵只能在同時按下使加速鍵只能在同時按下ALT鍵時才被激活。鍵時才被激活。SHIFT使加速鍵只能在同時按下使加速鍵只能在同時按下SHIFT鍵時才被激活。鍵時才被激活。CONTROL使加速鍵只能在同時按下使加速鍵只能在同時按下CTRL鍵時才被激活。與控制字符效果鍵時才被激活。與控制字符效果相同。相同。7013.2.4 資源與資源文件如下是一個快捷鍵表資源定義示例。IDR_APP ACCELERATORS MOVEABLE PURE /主窗口快捷鍵資源主窗口快捷鍵資源BEGIN N,IDM_FILE_NEW /按按Ct

45、rl+N執(zhí)行執(zhí)行IDM_FILE_NEW “O,IDM_FILE_OPEN,VIRTKEY,CONTROL /按按Ctrl+O執(zhí)行執(zhí)行IDM_FILE_OPEN X,IDM_EXIT,VIRTKEY,ALT /按按ALT+X執(zhí)行執(zhí)行IDM_EXIT VK_F1,IDM_ABOUT,VIRTKEY /按按F1執(zhí)行執(zhí)行IDM_ABOUTEND7113.2.4 資源與資源文件(4)位圖、圖標(biāo)、光標(biāo)和字體資源位圖資源描述語句形式為:位圖資源標(biāo)識符位圖資源標(biāo)識符 BITMAP 加載特性選項加載特性選項 filename7213.2.4 資源與資源文件例如:BITMAP語句定義一個位圖,該位圖可被應(yīng)用程序

46、顯示出來。filename為位圖文件,允許使用絕對路徑和相對路徑(相對于程序項目路徑)的寫法,一般存放在項目路徑的res子文件夾中。IDB_CARPICTURE BITMAP MOVEABLE rescar.bmp7313.2.4 資源與資源文件圖標(biāo)資源描述語句形式為:例如:圖標(biāo)資源標(biāo)識符圖標(biāo)資源標(biāo)識符 ICON 加載特性選項加載特性選項 filenameIDI_APP ICON DISCARDABLE resapp.ico /主窗口圖標(biāo)資源主窗口圖標(biāo)資源7413.2.4 資源與資源文件光標(biāo)資源描述語句形式為:例如:光標(biāo)資源標(biāo)識符光標(biāo)資源標(biāo)識符 CURSOR 加載特性選項加載特性選項 file

47、nameIDC_APP CURSOR DISCARDABLE resapp.cur7513.2.4 資源與資源文件字體資源描述語句形式為:例如:字體資源標(biāo)識符字體資源標(biāo)識符 FONT 加載特性選項加載特性選項 filenameIDR_FONT FONT DISCARDABLE rescmroman.fnt7613.2.4 資源與資源文件(5)字符串資源字符串表資源描述語句形式為:STRINGTABLE 加載特性選項加載特性選項BEGIN 字符串資源標(biāo)識符 字符串 .END7713.2.4 資源與資源文件字符串表語句定義了一個或多個字符串資源。例如:STRINGTABLE DISCARDABLE

48、 BEGIN IDS_APP_TITLE MainWindow /應(yīng)用程序標(biāo)題資源應(yīng)用程序標(biāo)題資源 IDS_HELLO Hello World!END7813.2.4 資源與資源文件(6)自定義資源自定義資源類型可以是圖形格式數(shù)據(jù)、多媒體數(shù)據(jù)、文件數(shù)據(jù)等,其描述語句形式為:例如:其中資源類型標(biāo)識符是大于255的整數(shù)值,用作預(yù)定義的資源類型標(biāo)識。自定義資源標(biāo)識符自定義資源標(biāo)識符 資源類型標(biāo)識符資源類型標(biāo)識符 加載特性選項加載特性選項 filenameIDR_JPG JPEG DISCARDABLE resflag.jpg7913.2.4 資源與資源文件5資源加載資源是通過Windows API函

49、數(shù)加載到程序中的。(1)菜單、對話框資源加載菜單資源的加載一般在窗口初始化階段進(jìn)行的,例如調(diào)用RegisterClassEx和CreateWindow函數(shù)時。對話框資源的加載是在創(chuàng)建對話框時進(jìn)行的。8013.2.4 資源與資源文件(2)內(nèi)置資源類型加載快捷鍵、位圖、光標(biāo)、圖標(biāo)和字符串資源,可以使用如下的API函數(shù)加載:HACCEL LoadAccelerators(HINSTANCE hInstance,LPCTSTR lpTableName); /加載快捷鍵加載快捷鍵HBITMAP LoadBitmap(HINSTANCE hInstance,LPCTSTR lpBitmapName); /加載位圖加載位圖HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName); /加加載光標(biāo)載光標(biāo)HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName); /加載圖標(biāo)加載圖標(biāo)/其中第其中第1個參數(shù)個參數(shù)hInstance為包含資源的應(yīng)用實例句柄,第為包含資源的應(yīng)用實例句柄,第2個參數(shù)為資源標(biāo)識名稱個參數(shù)為資源標(biāo)識名稱int LoadString(HINSTANCE hInstance,UINT uID,LPTSTR lpBuffer,int nBufferMax);

溫馨提示

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

最新文檔

評論

0/150

提交評論