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

下載本文檔

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

文檔簡介

1第14章標(biāo)準(zhǔn)庫Windows程序設(shè)計1、Windows編程的基本概念2、Windows中的數(shù)據(jù)類型3、消息驅(qū)動與消息循環(huán)4、資源與資源文件C++程序設(shè)計313.2界面編程人機界面HCI(human-computerinterface)又稱用戶界面UI(userinterface),是人與計算機之間傳遞、交換信息的媒介和對話接口,是計算機系統(tǒng)的重要組成部分。由于大多數(shù)應(yīng)用程序是以用戶界面為框架的,因此界面編程是軟件開發(fā)的核心編程之一。413.2界面編程用戶界面的設(shè)計與操作系統(tǒng)平臺有關(guān),操作系統(tǒng)界面一般有兩種:①命令行界面CLI(commandlineuserinterface),例如DOS;②圖形用戶界面GUI(graphicaluserinterface),例如Windows。513.2界面編程早期的計算機普遍使用命令行界面,人機操作的特點是文本顯示和命令輸入。時至今日,命令行界面主要用在系統(tǒng)管理、遠程維護、語言處理等系統(tǒng)軟件中,因而命令行界面也稱為控制臺界面,本書前面章節(jié)的程序都是命令行程序。圖形用戶界面是目前操作系統(tǒng)廣泛使用的人機界面。人機操作的特點是圖形顯示和交互圖形化,與命令行界面相比,圖形用戶界面對于使用者來說在視覺上更易于接受,操作上更簡便。本節(jié)介紹Windows系統(tǒng)下的圖形用戶界面編程技術(shù)。613.2.1Windows編程的基本概念Windows應(yīng)用程序的一個突出特點是它有一個美觀的圖形用戶界面——窗口。窗口中可以包含標(biāo)題欄、菜單、工具條、狀態(tài)欄、滾動條等,對話框中還包含類型不同的子控件,例如按鈕、復(fù)選框、列表框、組合框、編輯框等。窗口、對話框、圖形元素與鍵盤和鼠標(biāo)的配合,方便了用戶對應(yīng)用程序的操作。713.2.1Windows編程的基本概念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ù),稱為WindowsAPI函數(shù),用于實現(xiàn)用戶界面和顯示文字和圖形等。813.2.1Windows編程的基本概念Windows編程有多種技術(shù),其中使用C語言和調(diào)用WindowsAPI函數(shù)被稱作SDK編程方法,它今天依然是編寫Windows程序的有效方法。自從出現(xiàn)面向?qū)ο蟪绦蛟O(shè)計方法以來,Windows程序結(jié)構(gòu)和開發(fā)工具發(fā)生了巨大的變化,例如MFC(MicrosoftFoundationClasses)、VisualBasic、C#等。由于這些面向?qū)ο笄铱梢暬拈_發(fā)工具能大幅提高Windows程序的開發(fā)效率,因而得到了廣泛應(yīng)用。但無論如何,掌握SDK編程方法是必要的。913.2.1Windows編程的基本概念編寫Windows程序,需要在程序源文件開始位置包含頭文件:windows.h是主要的包含文件,它包含了其他Windows頭文件。這些頭文件定義了Windows的函數(shù)原型、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)、宏定義和預(yù)定義符號常量,是Windows程序開發(fā)文件中的重要組成部分。有興趣的讀者可以閱讀這些頭文件的細節(jié),對提高Windows編程水平有很大幫助。#include<windows.h>

//Windows頭文件1013.2.1Windows編程的基本概念Windows編程涉及大量API技術(shù)文檔信息,可以通過安裝MSDN得到聯(lián)機幫助。初學(xué)Windows編程的人面對Windows龐大的知識系統(tǒng)往往茫然不知所措,實際上它是非常有規(guī)律的:1113.2.1Windows編程的基本概念①通過掌握Windows的基本數(shù)據(jù)定義和數(shù)據(jù)類型奠定編程基礎(chǔ);②通過詳細分析Windows編程結(jié)構(gòu)了解其編程規(guī)律;③通過構(gòu)造和使用通用的編程框架形成編程模板,盡快上手;④通過研究API文檔的分類特點學(xué)會快速查閱需要的信息;⑤了解、熟悉和模仿Windows的重要編程習(xí)慣,如命名時的“見其名知其意”。1213.2.2數(shù)據(jù)定義與數(shù)據(jù)類型Windows定義了若干實用的宏,例如:#defineTRUE1#defineFALSE0#defineCALLBACK__stdcall#defineWINAPI__stdcall#defineAPIENTRYWINAPI#defineFARfar#defineCONSTconst#defineLOWORD(x)((WORD)(x))#defineHIWORD(x)((WORD)(((DWORD)(x)>>16)&0xFFFF))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)indowsAPI函數(shù);far表示32位遠指針;LOWORD(x)取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ù)類型C語言類型含義BOOLint邏輯類型(取值為TRUE或FALSE)BYTEunsignedchar字節(jié)型CHARcharANSI字符COLORREFunsignedlong顏色值,分紅、綠、藍(RGB)字節(jié)DWORDunsignedlong無符號長整型INTint32位整型LONGlong32位長整型LPARAMlongLONG型消息參數(shù)LPCSTRCONSTCHAR*只讀型8位ANSI字符串的指針LPCTSTRLPCWSTR/LPCSTRLPCWSTR或LPCSTRLPCWSTRCONSTWCHAR*只讀型16位Unicode字符串的指針1613.2.2數(shù)據(jù)定義與數(shù)據(jù)類型續(xù)表13-3常用的Windows數(shù)據(jù)類型Windows數(shù)據(jù)類型C語言類型含義LPDWORDDWORD*DWORD的指針LPSTRCHAR*8位ANSI字符串的指針LPTSTRLPWSTR/LPSTRLPWSTR或LPSTRLPWSTRWCHAR*16位ANSI字符串的指針LPVOIDvoid*void的指針LRESULTlong消息處理結(jié)果值TCHARWCHAR/CHARWCHAR或CHARUINTunsignedint無符號INTVOIDvoidvoidWCHARwchar_t16位Unicode字符WORDunsignedshort16位無符號整型1713.2.2數(shù)據(jù)定義與數(shù)據(jù)類型續(xù)表13-3常用的Windows數(shù)據(jù)類型Windows數(shù)據(jù)類型C語言類型含義WPARAMunsignedintWORD型消息參數(shù)1813.2.2數(shù)據(jù)定義與數(shù)據(jù)類型在Windows應(yīng)用程序中,會有許多諸如窗口、按鈕、滾動條、設(shè)備、控件或者文件等復(fù)雜數(shù)據(jù)結(jié)構(gòu)的不同對象和同類對象中的不同實例。為了在程序中區(qū)分和使用它們,需要對它們進行標(biāo)識。有別于普通變量的標(biāo)識,Windows將這些對象的標(biāo)識稱為句柄(handle)。句柄是Windows編程的基礎(chǔ),一個句柄能夠唯一區(qū)別Windows正在使用的對象或?qū)嵗?。?yīng)用程序幾乎總是通過調(diào)用一個API函數(shù)來獲得一個句柄,之后其他的API函數(shù)就可以使用該句柄,以引用相應(yīng)的對象的信息。常用的Windows句柄類型見表13-4。1913.2.2數(shù)據(jù)定義與數(shù)據(jù)類型表13-4常用的Windows句柄類型Windows句柄類型C語言類型含義HANDLEvoid*通用對象句柄HACCELHACCEL__結(jié)構(gòu)體指針快捷鍵列表句柄HBITMAPHBITMAP__結(jié)構(gòu)體指針位圖句柄HBRUSHHBRUSH__結(jié)構(gòu)體指針畫刷句柄HCURSORHICON__結(jié)構(gòu)體指針光標(biāo)句柄HDCHDC__結(jié)構(gòu)體指針設(shè)備場境(DC)句柄HFILEint文件句柄.HFONTHFONT__結(jié)構(gòu)體指針字體句柄HGDIOBJvoidnear*GDI對象句柄HGLOBALvoid*全局內(nèi)存塊句柄2013.2.2數(shù)據(jù)定義與數(shù)據(jù)類型續(xù)表13-4常用的Windows句柄類型Windows句柄類型C語言類型含義HICONHICON__結(jié)構(gòu)體指針圖標(biāo)句柄HINSTANCEHINSTANCE__結(jié)構(gòu)體指針實例句柄HMENUHMENU__結(jié)構(gòu)體指針菜單句柄HMODULEHINSTANCE__結(jié)構(gòu)體指針模塊句柄。HPALETTEHPALETTE__結(jié)構(gòu)體指針調(diào)色板句柄HPENHPEN__結(jié)構(gòu)體指針畫筆句柄HRGNHRGN__結(jié)構(gòu)體指針區(qū)域句柄HRSRCHRSRC__結(jié)構(gòu)體指針資源句柄HWNDHWND__結(jié)構(gòu)體指針窗口句柄2113.2.2數(shù)據(jù)定義與數(shù)據(jù)類型Windows還定義了一些有用的結(jié)構(gòu)體及結(jié)構(gòu)體指針類型,例如點的坐標(biāo):typedef

struct

tagPOINT{LONGx;LONGy;}

POINT,*PPOINT,

FAR

*LPPOINT;2213.2.2數(shù)據(jù)定義與數(shù)據(jù)類型寬度和高度:typedef

struct

tagSIZE{LONGcx;LONGcy;}

SIZE,*PSIZE,*LPSIZE;2313.2.2數(shù)據(jù)定義與數(shù)據(jù)類型矩形框:typedef

struct

tagRECT{LONGleft;LONGtop;LONGright;LONGbottom;}

RECT,*PRECT,

FAR

*LPRECT;typedefconst

RECTFAR*

LPCRECT;2413.2.2數(shù)據(jù)定義與數(shù)據(jù)類型一般地,Windows自定義數(shù)據(jù)類型、句柄類型和宏定義的關(guān)鍵字都是大寫。編寫Windows應(yīng)用程序時,程序員偏愛使用“匈牙利表示法”的變量命名約定,即變量名以一個或多個小寫字母為前綴,這些字母表示變量的數(shù)據(jù)類型。表13-5列出了在本書中經(jīng)常使用的變量前綴。2513.2.2數(shù)據(jù)定義與數(shù)據(jù)類型表13-5常用變量前綴前綴數(shù)據(jù)類型前綴數(shù)據(jù)類型前綴數(shù)據(jù)類型ccharnshortiintx,yx和y坐標(biāo)cx,cyx長度和y長度bBOOLfint,代表flagwWORDlLONGdwDWORDfnfunction函數(shù)sstringsz以'\0'結(jié)尾的字符串h句柄p,lp指針例如定義C語言字符串,在Windows程序中會這樣寫:char

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

struct

tagMSG

{HWNDhwnd;

//產(chǎn)生消息的窗口句柄

UINTmessage;

//消息的標(biāo)識碼

WPARAMwParam;

//消息附加信息1LPARAMlParam;

//消息附加信息2DWORDtime;

//消息進入消息隊列的時刻

POINTpt;

//發(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來確定由哪個窗口中的哪一段消息處理代碼響應(yīng)這個消息。Windows系統(tǒng)預(yù)先定義了絕大多數(shù)的消息,例如WM_CREATE、WM_DESTROY等。2913.2.3消息與消息循環(huán)2.消息循環(huán)處理機制Windows系統(tǒng)為每個應(yīng)用程序都建立了一個消息隊列(messagequeues)。在程序運行過程中如果發(fā)生了一個事件,Windows會把這個事件所對應(yīng)的消息送入消息隊列等待使用。應(yīng)用程序通過GetMessage函數(shù)從消息隊列中獲取消息,并利用GetMessage函數(shù)的返回值形成一個消息循環(huán),從而可以不斷從消息隊列中獲取消息。3013.2.3消息與消息循環(huán)

Windows系統(tǒng)會根據(jù)消息中的hwnd找到應(yīng)該接收消息的程序窗口,并根據(jù)窗口句柄找到該窗口的窗口過程WndProc(windowprocedure),以消息作為參數(shù)調(diào)用該函數(shù)。在WndProc函數(shù)中,根據(jù)消息標(biāo)識message執(zhí)行該消息所對應(yīng)的代碼,對消息進行處理。處理完成后,只要該消息不是終止應(yīng)用程序消息,就會立即返回到消息循環(huán),以等待獲取下一個消息。Windows應(yīng)用程序就是這樣周而復(fù)始進行消息循環(huán),直到發(fā)出終止應(yīng)用程序的WM_QUIT消息為止,例如單擊窗口的關(guān)閉按鈕。3113.2.3消息與消息循環(huán)從上述消息處理機制可以看到,Windows程序分為兩部分:一個是以消息循環(huán)為主的獲取和發(fā)送消息,另一個是專門處理消息的WndProc函數(shù)。Windows消息處理流程如圖所示。由于Windows是多任務(wù)操作系統(tǒng),因此Windows會根據(jù)實際的消息性質(zhì)來調(diào)度消息究竟發(fā)送到哪個程序進程的哪個窗口上。3213.2.3消息與消息循環(huán)圖13.6Windows消息處理流程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ù)選框等進行雙向通信,當(dāng)用戶在列表框中改動當(dāng)前選擇或改變了復(fù)選框的狀態(tài)時發(fā)出此類消息。這類消息一般不經(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.7Windows消息源3713.2.3消息與消息循環(huán)進程發(fā)送消息有兩個API函數(shù):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í)行文件里面的資源數(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)換成二進制數(shù)據(jù)存儲在可執(zhí)行文件中。應(yīng)用程序通過API函數(shù)將其動態(tài)加載,通過資源標(biāo)識區(qū)分不同的資源。4113.2.4資源與資源文件1.資源頭文件為了區(qū)分不同的資源,一個應(yīng)用程序中相同類型的資源必須有唯一的標(biāo)識。這些標(biāo)識實際上是符號常量,其定義形式為:例如1000可以同時作為菜單、圖標(biāo)的資源標(biāo)識值,但兩個菜單的資源標(biāo)識值不能相同。#define資源標(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)識前綴用途IDM_菜單命令I(lǐng)DB_位圖ID_或IDC_對話框中的控件IDC_光標(biāo)IDD_對話框IDI_圖標(biāo)IDR_菜單、快捷鍵、工具欄、自定義資源IDS_字符串為提高程序可讀性,Windows編程有一套資源標(biāo)識符命名規(guī)則,表13-6列出了常用的資源標(biāo)識符前綴。4413.2.4資源與資源文件例如:#defineIDI_APP100

//主窗口圖標(biāo)資源標(biāo)識符#defineIDR_APP102

//主窗口菜單快捷鍵資源標(biāo)識符#defineIDD_APP102

//主對話框資源標(biāo)識符#defineIDS_APP_TITLE1000

//應(yīng)用程序標(biāo)題資源標(biāo)識符#defineIDC_BUTTON11201

//按鈕資源標(biāo)識符#defineIDB_CARPICTUE1202

//位圖資源標(biāo)識符4513.2.4資源與資源文件2.資源描述文件資源描述文件定義了Windows應(yīng)用程序中的各種資源,其擴展名為.rc,文件名通常與程序的工程項目名稱相同。對于位圖、圖標(biāo)、光標(biāo)等資源,資源描述文件只是說明它們的標(biāo)識和存儲路徑,其圖形數(shù)據(jù)是以文件形式存放在項目的res子文件夾下。4613.2.4資源與資源文件可以將資源描述文件添加到項目中隨程序一起編譯,資源描述文件會生成二進制形式的資源文件,其擴展名為.res。連接器將程序目標(biāo)代碼文件.obj、庫文件.lib(或.a)、資源文件.res連接起來產(chǎn)生可執(zhí)行文件.exe。如圖給出了Windows應(yīng)用程序工程項目中各種文件之間的關(guān)系。4713.2.4資源與資源文件圖13.8Windows應(yīng)用程序工程項目框架4813.2.4資源與資源文件3.資源可視化設(shè)計VC可以對資源進行可視化編輯。所謂可視化設(shè)計是指用“所見即所得”方式進行資源定義,例如用鼠標(biāo)拖動布置對話框上的控件等,如圖所示是一個對話框資源的可視化編輯界面。由于資源大多數(shù)是圖形元素,因此可視化設(shè)計能夠快速建立資源描述文件。4913.2.4資源與資源文件圖13.9對話框可視化編輯5013.2.4資源與資源文件4.資源描述語句資源描述文件是一個文本文件,通過編寫資源描述語句在文件中定義資源。(1)菜單資源一個菜單資源一般由菜單、彈出菜單和菜單項三個層次組成,其定義語句形式為:菜單標(biāo)識符MENU

[加載特性選項]BEGIN

彈出菜單定義語句......END5113.2.4資源與資源文件MENU語句定義了一個菜單資源的內(nèi)容。菜單資源是一個信息集合,這些信息定義應(yīng)用程序的菜單的表現(xiàn)形式及其功能。MENU語句定義菜單時,可以使用表13-7所列的加載特性選項值來聲明菜單被載入時的特性。5213.2.4資源與資源文件表13-7資源加載特性選項加載特性選項說明DISCARDABLE如果資源不再需要可被放棄。FIXED資源保留在一個固定的內(nèi)存位置。MOVEABLE資源在必要時可被移動以便節(jié)省內(nèi)存。LOADONCALL資源在調(diào)用時被加載(默認選項)。PRELOAD資源被立即加載。5313.2.4資源與資源文件彈出菜單定義語句形式為:POPUP語句標(biāo)記一個彈出菜單定義的開始。彈出菜單(也稱下拉菜單)是一個特殊的菜單項,當(dāng)它被選中時,會顯示其子菜單項。表13-8的菜單選項指定了菜單項的外觀。POPUP彈出菜單標(biāo)題

[菜單選項]BEGIN

菜單項定義語句......END5413.2.4資源與資源文件表13-8菜單選項菜單選項說明CHECKED菜單項有一個選中標(biāo)記,頂層菜單此選項無效。GRAYED菜單項不可用,其文字顏色為灰。INACTIVE菜單項名正常顯示但不可選。MENUBARBREAK將菜單新的一列與舊的一列用一垂直線分開。MENUBREAK將菜單項放在新的一行?;?qū)棾霾藛畏旁谛碌囊涣校兄g沒有分割線。5513.2.4資源與資源文件菜單項定義語句形式為:其中菜單項名稱字符串可以包含轉(zhuǎn)義字符\t和\a。\t字符使菜單文字按列對齊,\a字符使所有后面的文字與菜單欄或彈出菜單右對齊。在字符前如果有&,則該字符將有一條下劃線且作為菜單快捷字母鍵。菜單項標(biāo)識符是一個整數(shù)值,當(dāng)該菜單項被單擊時,這個菜單項標(biāo)識值將隨消息WM_COMMAND傳遞到窗口過程WndProc中。MENUITEM菜單項名稱,菜單項標(biāo)識符

[,菜單選項]5613.2.4資源與資源文件特殊菜單項“MENUITEMSEPARATOR”的作用是在菜單上形成一條橫向的分割線,便于對菜單項進行分類。例如設(shè)計一個如圖所示的菜單界面。5713.2.4資源與資源文件其菜單資源定義為:IDR_APPMENUDISCARDABLE

//主窗口菜單資源BEGINPOPUP

"文件(&F)"BEGINMENUITEM

"新建(&N)\tCtrl+N",

IDM_FILE_NEWMENUITEM

"打開(&O)...\tCtrl+O",

IDM_FILE_OPENMENUITEMSEPARATORMENUITEM

"退出(&X)",

IDM_EXITENDPOPUP

"幫助(&H)"BEGINMENUITEM

"軟件簡介(&A)...",

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

[加載特性選項]

x,

y,

width,

height對話框風(fēng)格語句......BEGIN

控件語句......END5913.2.4資源與資源文件表13-9對話框風(fēng)格語句對話框風(fēng)格語句說明STYLEstyles指定對話框的窗口風(fēng)格。styles可以使用“|”位或運算組合多種預(yù)定義值。EXSTYLE=ext-styles指定對話框的擴展窗口風(fēng)格。ext-styles可以使用“|”位或運算組合多種預(yù)定義值。CAPTIONtext指定對話框標(biāo)題,text為字符串。FONTpointsize,typeface指定對話框中文字的大小pointsize和字體名稱typeface,字體名稱為字符串。CLASSclass指定對話框的窗口類,如果沒有此語句則使用Windows標(biāo)準(zhǔn)對話框類。MENUmenuname指定對話框的菜單資源標(biāo)識,如果沒有此語句則對話框沒有菜單。6013.2.4資源與資源文件控件語句定義在對話框上出現(xiàn)的一個或多個控件,包含控件文本(text)、控件在對話框上的位置(x、y)、控件寬度(width)和高度(height)、控件風(fēng)格(style)等屬性。DIALOG語句可以使用的控件見表13-10。6113.2.4資源與資源文件表13-10對話框控件控件控件語句默認按鈕DEFPUSHBUTTONtext,id,x,y,width,height[,style]按鈕PUSHBUTTONtext,id,x,y,width,height[,style]單選按鈕RADIOBUTTONtext,id,x,y,width,height[,style]復(fù)選框CHECKBOXtext,id,x,y,width,height[,style]矩形框GROUPBOXtext,id,x,y,width,height[,style]列表框LISTBOXid,x,y,width,height[,style]組合框COMBOBOXid,x,y,width,height[,style]編輯框EDITTEXTid,x,y,width,height[,style]文字居中控件CTEXTtext,id,x,y,width,height[,style]文字左對齊控件LTEXTtext,id,x,y,width,height[,style]文字右對齊控件RTEXTtext,id,x,y,width,height[,style]6213.2.4資源與資源文件續(xù)表13-10對話框控件控件控件語句卷滾條SCROLLBARid,x,y,width,height[,style]指定類控件CONTROLtext,id,class,style,x,y,width,height[,extended-style]預(yù)定義的class有BUTTON、COMBOBOX、EDIT、LISTBOX、SCROLLBAR、STATIC6313.2.4資源與資源文件圖13.11對話框界面例如設(shè)計一個如圖所示的對話框界面。6413.2.4資源與資源文件其對話框資源定義為:IDD_APPDIALOG

0,

0,

305,

102STYLEDS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENUCAPTION

"對話框"FONT

9,

"宋體"BEGINDEFPUSHBUTTON

"默認按鈕",IDC_BUTTON1,158,73,50,17LTEXT

"編輯框",IDC_STATIC,7,7,133,9EDITTEXTIDC_EDIT1,7,21,133,14GROUPBOX

"矩形框",IDC_STATIC,229,7,64,43PUSHBUTTON

"按鈕",IDC_BUTTON2,220,73,50,17CHECKBOX

"復(fù)選框",IDC_CHECK1,234,21,56,10RADIOBUTTON

"單選按鈕",IDC_RADIO1,234,35,48,10

COMBOBOXIDC_COMBO1,149,21,72,30,CBS_DROPDOWN|CBS_SORTLISTBOXIDC_LIST1,7,56,133,33LTEXT

"列表框",IDC_STATIC,7,43,133,9LTEXT

"組合框",IDC_STATIC,149,7,72,9END6513.2.4資源與資源文件(3)快捷鍵資源快捷鍵總是和菜單項配合使用的。在資源描述文件中,用快捷鍵表來描述菜單項的快捷鍵,其語句形式為:快捷鍵標(biāo)識符ACCELERATORS

[加載特性選項]BEGINevent,id[,type][option]

......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字符。字符前面可以加上插入符^,表示該字符是一個控制字符。整數(shù)值數(shù)值對應(yīng)的ASCII字符。type參數(shù)必須是ASCII。虛鍵值虛鍵值是Windows預(yù)先定義好的整數(shù)值,為字母數(shù)字的虛鍵可以用雙引號加大寫字母或數(shù)字來表示。type參數(shù)必須是VIRTKEY。6813.2.4資源與資源文件id參數(shù)指定一個快捷鍵命令標(biāo)識,該值用來選擇消息處理任務(wù),option參數(shù)指定快捷鍵選項,可以是表13-12中的一個值或使用位或“|”運算的多個值組合。6913.2.4資源與資源文件表13-12快捷鍵選項NOINVERT表示當(dāng)加速鍵被用到時所有頂層菜單項都不高亮。ALT使加速鍵只能在同時按下ALT鍵時才被激活。SHIFT使加速鍵只能在同時按下SHIFT鍵時才被激活。CONTROL使加速鍵只能在同時按下CTRL鍵時才被激活。與控制字符效果相同。7013.2.4資源與資源文件如下是一個快捷鍵表資源定義示例。IDR_APPACCELERATORSMOVEABLEPURE

//主窗口快捷鍵資源BEGIN

"^N",IDM_FILE_NEW

//按Ctrl+N執(zhí)行IDM_FILE_NEW

“O",IDM_FILE_OPEN,VIRTKEY,CONTROL

//按Ctrl+O執(zhí)行IDM_FILE_OPEN

"X",IDM_EXIT,VIRTKEY,ALT

//按ALT+X執(zhí)行IDM_EXITVK_F1,IDM_ABOUT,VIRTKEY

//按F1執(zhí)行IDM_ABOUTEND7113.2.4資源與資源文件(4)位圖、圖標(biāo)、光標(biāo)和字體資源位圖資源描述語句形式為:位圖資源標(biāo)識符BITMAP

[加載特性選項]

filename7213.2.4資源與資源文件例如:BITMAP語句定義一個位圖,該位圖可被應(yīng)用程序顯示出來。filename為位圖文件,允許使用絕對路徑和相對路徑(相對于程序項目路徑)的寫法,一般存放在項目路徑的res子文件夾中。IDB_CARPICTUREBITMAPMOVEABLE

"res\\car.bmp"7313.2.4資源與資源文件圖標(biāo)資源描述語句形式為:例如:圖標(biāo)資源標(biāo)識符ICON

[加載特性選項]

filenameIDI_APPICONDISCARDABLE

"res\\app.ico"

//主窗口圖標(biāo)資源7413.2.4資源與資源文件光標(biāo)資源描述語句形式為:例如:光標(biāo)資源標(biāo)識符CURSOR

[加載特性選項]

filenameIDC_APPCURSORDISCARDABLE

"res\\app.cur"7513.2.4資源與資源文件字體資源描述語句形式為:例如:字體資源標(biāo)識符FONT

[加載特性選項]

filenameIDR_FONTFONTDISCARDABLE

"res\\cmroman.fnt"7613.2.4資源與資源文件(5)字符串資源字符串表資源描述語句形式為:STRINGTABLE

[加載特性選項]BEGIN

字符串資源標(biāo)識符字符串

......END7713.2.4資源與資源文件字符串表語句定義了一個或多個字符串資源。例如:STRINGTABLEDISCARDABLEBEGINIDS_APP_TITLE

"MainWindow"

//應(yīng)用程序標(biāo)題資源

IDS_HELLO

"HelloWorld!"END7813.2.4資源與資源文件(6)自定義資源自定義資源類型可以是圖形格式數(shù)據(jù)、多媒體數(shù)據(jù)、文件數(shù)據(jù)等,其描述語句形式為:例如:其中資源類型標(biāo)識符是大于255的整數(shù)值,用作預(yù)定義的資源類型標(biāo)識。自定義資源標(biāo)識符資源類型標(biāo)識符

[加載特性選項]

filenameIDR_JPGJPEGDISCARDABLE

"res\\flag.jpg"7913.2.4資源與資源文件5.資源加載資源是通過WindowsAPI函數(shù)加載到程序中的。(1)菜單、對話框資源加載菜單資源的加載一般在窗口初始化階段進行的,例如調(diào)用RegisterClassEx和CreateWindow函數(shù)時。對話框資源的加載是在創(chuàng)建對話框時進行的。8013.2.4資源與資源文件(2)內(nèi)置資源類型加載快捷鍵、位圖、光標(biāo)、圖標(biāo)和字符串資源,可以使用如下的API函數(shù)加載:HACCEL

LoadAccelerators(HINSTANCEhInstance,LPCTSTRlpTableName);

//加載快捷鍵HBITMAP

LoadBitmap(HINSTANCEhInstance,LPCTSTRlpBitmapName);

//加載位圖HCURSOR

LoadCursor(HINSTANCEhInstance,LPCTSTRlpCursorName);

//加載光標(biāo)HICON

LoadIcon(HINSTANCEhInstance,LPCTSTRlpIconName);

//加載圖標(biāo)//其中第1個參數(shù)hInstance為包含資源的應(yīng)用實例句柄,第2個參數(shù)為資源標(biāo)識名稱int

LoadString(HINSTANCEhInstan

溫馨提示

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

評論

0/150

提交評論