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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、PI函數(shù),用于實現(xiàn)用戶界面和顯示文字和圖形等。813.2.1 Windows編程的基本概念Windows編程有多種技術,其中使用C語言和調用Windows API函數(shù)被稱作SDK編程方法,它今天依然是編寫Windows程序的有效方法。自從出現(xiàn)面向對象程序設計方法以來,Windows程序結構和開發(fā)工具發(fā)生了巨大的變化,例如MFC(Microsoft Foundation Classes)、Visual Basic、C#等。由于這些面向對象且可視化的開發(fā)工具能大幅提高Windows程序的開發(fā)效率,因而得到了廣泛應用。但無論如何,掌握SDK編程方法是必要的。913.2.1 Windows編程的基本概

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

6、非常有規(guī)律的:1113.2.1 Windows編程的基本概念通過掌握Windows的基本數(shù)據(jù)定義和數(shù)據(jù)類型奠定編程基礎;通過詳細分析Windows編程結構了解其編程規(guī)律;通過構造和使用通用的編程框架形成編程模板,盡快上手;通過研究API文檔的分類特點學會快速查閱需要的信息;了解、熟悉和模仿Windows的重要編程習慣,如命名時的“見其名知其意”。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調用約定,被調函數(shù)采用自右向左的順序參數(shù)入棧,函數(shù)自己在退出時清空堆棧;非_stdcall聲明為C調用約定,被調函數(shù)采用自右向左的順序參數(shù)入棧,由調用者清空堆棧;CALLBACK表示回調函數(shù),WINAPI表示W(wǎng)indows API函數(shù);far表示32位遠指針;LOWORD(x)取x的

8、低16位值,HIWORD(x)取x的高16位值。1413.2.2 數(shù)據(jù)定義與數(shù)據(jù)類型為了提高程序的可讀性和兼容性,Windows建立了完整的數(shù)據(jù)類型體系,稱為Win32應用程序接口數(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顏色值,分紅、綠、藍(顏色值,分紅、綠、藍(

9、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語言類型語言類型含義含義LPDWORDDW

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

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

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

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

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

15、pedef 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ù)類型、句柄類型和宏定義的關鍵字都是大寫。編寫Windows應用程序時,程序員偏愛使用“匈牙利表示法”的變量命名約

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坐標坐標cx,cyx長度和長度和y長度長度bBOOLfint,代表,代表flagwWORDlLONGdwDWORDfnfunction函數(shù)函數(shù)sstringsz以以0結尾的字符串結尾的字符串 h句柄句柄p,lp指針指針例如定義C語言字符串,在Windows程序中會這樣寫:char szMessage200;26

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

33、如設計一個如圖所示的菜單界面。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 軟件簡介軟件簡介(&A)., IDM_ABOUT ENDEND5

34、813.2.4 資源與資源文件(2)對話框資源對話框資源定義語句形式為:DIALOG語句定義了一個對話框模板。加載特性選項可以使用表13-7的值,x、y、width、height表示對話框左上角在屏幕上的位置和對話框的寬度、高度值,對話框風格語句定義對話框的外觀風格,參見表13-9。對話框資源標識符對話框資源標識符 DIALOG 加載特性選項加載特性選項 x, y, width, height對話框風格語句.BEGIN 控件語句.END5913.2.4 資源與資源文件表13-9 對話框風格語句對話框風格語句對話框風格語句說明說明STYLE styles指定對話框的窗口風格。指定對話框的窗口風格

35、。styles可以使用可以使用“|”位或運算組位或運算組合多種預定義值。合多種預定義值。EXSTYLE=ext-styles指定對話框的擴展窗口風格。指定對話框的擴展窗口風格。ext-styles可以使用可以使用“|”位位或運算組合多種預定義值?;蜻\算組合多種預定義值。CAPTION text指定對話框標題,指定對話框標題,text為字符串。為字符串。FONT pointsize, typeface指定對話框中文字的大小指定對話框中文字的大小pointsize和字體名稱和字體名稱typeface,字體名稱為字符串。字體名稱為字符串。CLASS class指定對話框的窗口類,如果沒有此語句則使用

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

37、ON text,id,x,y,width,height ,style按鈕按鈕PUSHBUTTON text,id,x,y,width,height ,style單選按鈕單選按鈕RADIOBUTTON text,id,x,y,width,height ,style復選框復選框CHECKBOX text,id,x,y,width,height ,style矩形框矩形框GROUPBOX text,id,x,y,width,height ,style列表框列表框LISTBOX id,x,y,width,height ,style組合框組合框COMBOBOX id,x,y,width,height ,s

38、tyle編輯框編輯框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,height ,style指定類控件指定類控件CONTROL tex

39、t,id,class,style,x,y,width,height ,extended-style預定義的預定義的class有有BUTTON、COMBOBOX、EDIT、LISTBOX、SCROLLBAR、STATIC6313.2.4 資源與資源文件圖13.11 對話框界面例如設計一個如圖所示的對話框界面。6413.2.4 資源與資源文件其對話框資源定義為:IDD_APP DIALOG 0, 0, 305, 102STYLE DS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENUCAPTION 對話框對話框FONT 9, 宋體宋體BEGI

40、N DEFPUSHBUTTON 默認按鈕默認按鈕,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 復選框復選框,IDC_CHECK1,234,21,56,10 RADIOBUTTON 單選按鈕單選按鈕,IDC_RADIO1,234,35,48,10 COMBOBOX IDC_COMBO1,

41、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)快捷鍵資源快捷鍵總是和菜單項配合使用的。在資源描述文件中,用快捷鍵表來描述菜單項的快捷鍵,其語句形式為:快捷鍵標識符快捷鍵標識符 ACCELERATORS 加載特性選項加載特性選項BEGIN event,id,typeoption .END6613.2.4 資源與資源文件快捷鍵表為應用

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

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

44、高亮。ALT使加速鍵只能在同時按下使加速鍵只能在同時按下ALT鍵時才被激活。鍵時才被激活。SHIFT使加速鍵只能在同時按下使加速鍵只能在同時按下SHIFT鍵時才被激活。鍵時才被激活。CONTROL使加速鍵只能在同時按下使加速鍵只能在同時按下CTRL鍵時才被激活。與控制字符效果鍵時才被激活。與控制字符效果相同。相同。7013.2.4 資源與資源文件如下是一個快捷鍵表資源定義示例。IDR_APP ACCELERATORS MOVEABLE PURE /主窗口快捷鍵資源主窗口快捷鍵資源BEGIN N,IDM_FILE_NEW /按按Ctrl+N執(zhí)行執(zhí)行IDM_FILE_NEW “O,IDM_FILE

45、_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)位圖、圖標、光標和字體資源位圖資源描述語句形式為:位圖資源標識符位圖資源標識符 BITMAP 加載特性選項加載特性選項 filename7213.2.4 資源與資源文件例如:BITMAP語句定義一個位圖,該位圖可被應用程序顯示出來。filename為位圖文件,允許使用絕對路徑和相對路徑

46、(相對于程序項目路徑)的寫法,一般存放在項目路徑的res子文件夾中。IDB_CARPICTURE BITMAP MOVEABLE rescar.bmp7313.2.4 資源與資源文件圖標資源描述語句形式為:例如:圖標資源標識符圖標資源標識符 ICON 加載特性選項加載特性選項 filenameIDI_APP ICON DISCARDABLE resapp.ico /主窗口圖標資源主窗口圖標資源7413.2.4 資源與資源文件光標資源描述語句形式為:例如:光標資源標識符光標資源標識符 CURSOR 加載特性選項加載特性選項 filenameIDC_APP CURSOR DISCARDABLE r

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論