




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、windows編程技術(shù)第12章-Windows中的資源第12章 Windows中的資源資源是Windows應(yīng)用程序用戶界面的重要組成部分,菜單、快捷鍵、圖標(biāo)、光標(biāo)、對(duì)話框和字符串等都是不同的資源類型。資源的使用極大地方便了Windows應(yīng)用程序的界面設(shè)計(jì)。資源是數(shù)據(jù),在程序運(yùn)行是通過調(diào)用API函數(shù)裝入內(nèi)存,也可以隨時(shí)從內(nèi)存中釋放資源和資源腳本文件菜單和快捷鍵資源圖標(biāo)、光標(biāo)和字符串資源對(duì)話框12.1.2 資源和資源腳本文件資源也是一種數(shù)據(jù),他們?cè)谫Y源腳本文件RC(文本文件,以.RC為文件擴(kuò)展名)中定義了應(yīng)用程序所需的數(shù)據(jù),即菜單、對(duì)話框、圖標(biāo)等資源數(shù)據(jù)。例如:Myhouse Icon 在磁盤上的
2、在磁盤上的關(guān)鍵詞關(guān)鍵詞可在主程序中使用的圖標(biāo)名可在主程序中使用的圖標(biāo)名Windows應(yīng)用程序生成過程關(guān)于資源的生成關(guān)于資源的生成C(C+)語言編譯器.C(C+).H.OBJ.DEF.LIBTLINK鏈接器.ICO.CUR.BMP.FNT.DLG資源編輯器.RC資源描述文件(文本文件)資源編譯器.RES(二進(jìn)制文件)資源鏈接器.EXE可執(zhí)行文件(應(yīng)用程序).EXE集成編譯鏈接12.2 圖標(biāo)資源圖標(biāo)、光標(biāo)(游標(biāo))本質(zhì)上都是位圖,只不過它們都被限制了一定的尺寸,分別被用在不同的地方。字符串也是一種資源類型,它給程序提供了另外一種輸出文本字符串的方法。內(nèi)建圖標(biāo)StopIDI_HAND?IDI_QUES
3、TION!IDI_EXCLAMATION*IDI_ASTERISK12.2.2 圖標(biāo)應(yīng)用的基本方法Windows 202X應(yīng)用程序支持三種不同的圖標(biāo)尺寸:256色(48X48)、32色(32X32)和16色(16X16)圖標(biāo)。在應(yīng)用程序最小化時(shí),小圖標(biāo)顯示在應(yīng)用程序窗口的左上角;大圖標(biāo)用于桌面圖標(biāo)或大圖標(biāo)試圖中。三種圖標(biāo)都使用同一個(gè)標(biāo)識(shí)符或者名稱,系統(tǒng)直到把不同的尺寸的圖標(biāo)用在何處。步驟:在資源腳本文件中添加:IDI_MYICON ICON DISCARDABLE ”在主程序中加入:常用的方法WNDCLASS wndclass; = LoadIcon(hInstance,MAKEINTRESO
4、URCE(IDI_MYICON);其他方法:函數(shù)LoadImage也可以將圖標(biāo)資源裝載到應(yīng)用程序的窗口類,并且功能更強(qiáng)。 = LoadImage (hInstance, MAKEINSTRESOURCE( IDI_MYICON), IMAGE_CURSOR, 32, 32, LR_DEFAULTCOLOR) ;函數(shù)SetClassLong非常有用,它可以在程序執(zhí)行期間,動(dòng)態(tài)地更改窗口類指定的圖標(biāo)、光標(biāo)、菜單甚至窗口過程等屬性。DWORD SetClassLong(HWND hWnd,int nIndex,LONG dwNewLong);12.2.2 例題ICONDEMO涉及函數(shù)DrawIcon
5、(HDC hdc, int X, int Y, HICON hIcon) LoadIcon(hInstance, MAKEINTRESOURCE( IDI_ICON ) );打開源程序打開源程序12.2.3 大圖表、小圖標(biāo)的應(yīng)用涉及函數(shù)DrawIcon(HDC hdc, int X, int Y, HICON hIcon) LoadIcon(hInstance, MAKEINTRESOURCE( IDI_ICON ) );cxIcon = GetSystemMetrics(SM_CXICON);/取得圖標(biāo)的尺寸cyIcon = GetSystemMetrics(SM_CYICON); /取得圖
6、標(biāo)的尺寸大圖標(biāo)(32X32)會(huì)自動(dòng)轉(zhuǎn)換成小圖標(biāo)(16X16)一般地講,Studio中建立一個(gè)32X32的大圖標(biāo),大圖標(biāo)將自動(dòng)在文件夾中顯示,如果在標(biāo)題欄中,則自動(dòng)會(huì)把大圖標(biāo)縮成小圖標(biāo)(16X16)顯示。為什么還要編輯一個(gè)小圖標(biāo):由于大圖標(biāo)在自動(dòng)轉(zhuǎn)換成小圖標(biāo),某些復(fù)雜的圖標(biāo)會(huì)失真,因此最好的辦法是在建立一個(gè)小圖標(biāo)。打開源程序打開源程序12.3 使用自定義的光標(biāo)系統(tǒng)提供了一些預(yù)定義的鼠標(biāo)光標(biāo)。標(biāo)識(shí)符為IDC_ARROW,IDC_MOVE,IDC_WAIT或IDC_CROSS等。在資源腳本文件中,自定義光標(biāo)的描述如下:IDC_MYCURSOR CURSOR DISCARDABLE “cursor1.
7、cur” 自定義的光標(biāo)資源保存在文件(如cursor1.cur)中,在定義窗口類時(shí),可以把自定義的光標(biāo)設(shè)置為窗口類默認(rèn)的光標(biāo)。 = LoadCursor(hInstance, MAKEINTRESOURCE (IDC_MYCURSOR) );特別是在鼠標(biāo)消息WM_MOUSEMOVE的處理期間,這個(gè)函數(shù)非常有用。case WM_MOUSEMOVE:hCursor = LoadCursor (hInst, MAKEINTRESOURCE( IDC_MYCURSOR ) );SetCursor(hCursor); 用SetClassLong設(shè)置窗口中的光標(biāo)如果在運(yùn)行過程中希望改變窗口內(nèi)的默認(rèn)光標(biāo),可
8、以用SetClassLong函數(shù)hCursor = LoadCursor(hInstance,TEXT(“childcursor”); / 其中SetClassLong(hwnd, GCL_HCURSOR, hCursor); 或 者 , 動(dòng) 態(tài) 設(shè) 置 光 標(biāo) 。 特 別 是 在 鼠 標(biāo) 消 息WM_MOUSEMOVE的處理期間,這個(gè)函數(shù)非常有用。SetCursor(hCursor);例如:case WM_MOUSEMOVE:hCursor = LoadCursor (hInst, MAKEINTRESOURCE( IDC_MYCURSOR ) );SetCursor(hCursor);12
9、.4 使用字符串資源(自學(xué))使用字符串資源,提供了一種完全不同的使用字符串的方法,字符串被放在資源腳本文件中。程序在需要它們時(shí),通過每個(gè)字符串唯一的標(biāo)識(shí)符來獲得字符串。STRING TABLE DISCARDABLEBEGINGIDS_ERROR “錯(cuò)誤:202Xnn由于某種原因,網(wǎng)頁不能打開!” IDS_MESSAGE “我是超級(jí)鏈接”END LoadString將字符串?dāng)?shù)據(jù)從資源文件中復(fù)制到內(nèi)存緩沖區(qū)。int LoadString(HINSTANCE hInstance,UINT uID,LPTSTR lpBuffer,int nBufferMax);圖標(biāo)、光標(biāo)和字符串資源的應(yīng)用實(shí)例(補(bǔ)充
10、) -演示圖標(biāo)、光標(biāo)和字符串資源的使用(模擬網(wǎng)頁中的超級(jí)鏈接)12.5 菜單和快捷鍵資源 12.5.1 菜單概念菜單是Windows圖形用戶界面中窗口的重要組成部分。使用菜單可以使用戶了解并方便地使用應(yīng)用程序提供的各項(xiàng)功能;使用快捷鍵資源可使菜單的操作更方便。三種菜單:主菜單,下拉式菜單,浮動(dòng)式菜單菜單本質(zhì)上是層次嵌套的。鼠標(biāo)點(diǎn)擊菜單項(xiàng),則觸發(fā)一個(gè)菜單事件,程序捕獲該事件進(jìn)行管理。12.5.2 菜單代號(hào)、菜單項(xiàng)ID與菜單ID 對(duì)下拉式菜單來說,可以拉出菜單名以及唯一標(biāo)識(shí)該菜單項(xiàng)的ID。菜單項(xiàng)有三個(gè)特性菜單名,它可以是字符串或點(diǎn)陣圖。菜單項(xiàng)的ID,單擊菜單項(xiàng)時(shí),Windows向包含菜單項(xiàng)的菜單所
11、在的窗口發(fā)送WM_COMMAND消息,LOWORD(wParam)是向應(yīng)用程序窗口函數(shù)發(fā)送的下拉式菜單的代號(hào)(通知碼)菜單項(xiàng)的屬性,包括是否被禁用、無效化或被選擇。12.5.3 在程序中引用菜單在創(chuàng)建菜單資源后,有三種方法可以實(shí)現(xiàn)菜單與程序窗口的關(guān)聯(lián):(1) 在窗口類中加載菜單 = lpMenuName;(2) 創(chuàng)建窗口時(shí)加載菜單HMENU LoadMenu(HINSTANCE hInstance, LPCTSTR lpMenuName); (3) 動(dòng)態(tài)加載菜單應(yīng)用程序窗口調(diào)用函數(shù)LoadMenu獲取菜單句柄后,還可以通過調(diào)用函數(shù)SetMenu動(dòng)態(tài)地加載菜單,以提高程序的靈活性。BOOL Se
12、tMenu(HWND hWnd, HMENU hMenu);12.5.4 和菜單有關(guān)的窗口消息WM_INITMENU當(dāng)一個(gè)主菜單創(chuàng)建時(shí),發(fā)出的消息。WM_MENUSELECT用戶在菜單項(xiàng)中移動(dòng)光標(biāo)或者鼠標(biāo),應(yīng)用程序會(huì)受到許多WM_MENUSELECT消息WM_INITMENUPOPUP準(zhǔn)備顯示一個(gè)彈出式下拉式菜單時(shí),發(fā)送的消息。WM_COMMAND當(dāng)用戶選擇一個(gè)菜單項(xiàng)時(shí),Windows通常會(huì)向菜單所在的窗口函數(shù)發(fā)送WM_COMMAND消息,LOWORD(wParam)是菜單項(xiàng)的IDWM_MENUCHAR如果用戶按下Alt鍵和一個(gè)與菜單項(xiàng)不匹配的字符時(shí),或者在顯示下拉式菜單時(shí),用戶按下一個(gè)與下拉
13、式菜單里的項(xiàng)目不匹配的字符鍵。WM_INITMENUWM_INITMENUPOPUPWM_MENUSELECTWM_INITMENUPOPUPWM_COMMANDWM_MENUSELECTWM_MENUSELECTWM_MENUSELECTWM_MENUSELECT其他菜單消息(參考) WM_SYSCOMMAND消息與WM_COMMAND消息類似,只不過它是用戶選擇系統(tǒng)菜單的菜單項(xiàng)時(shí),發(fā)送到窗口過程的消息隊(duì)列。WM_INITMENU是程序的頂層菜單和彈出式菜單被激活前的一瞬間發(fā)送到窗口過程。 wParam是頂層菜單的句柄。WM_INMENUPOPUP是彈出式菜單被激活前的一瞬間發(fā)送到窗口過程的
14、。wParam是彈出式菜單的句柄。LOWORD(lParam)是其在上一級(jí)菜單中的索引位。WM_CONTEXTMENU消息通知窗口用戶單擊了鼠標(biāo)右鍵,并要求彈出浮動(dòng)菜單。此消息的wParam是單擊鼠標(biāo)右鍵時(shí)所處窗口的句柄;lParam參數(shù)指明了消息產(chǎn)生時(shí)的鼠標(biāo)位置(屏幕坐標(biāo)),其中,低字節(jié)為水平坐標(biāo),高字節(jié)為豎向坐標(biāo)。 菜單和菜單相關(guān)操作 通過資源編譯器創(chuàng)建菜單資源很容易,用戶只需為其窗鍵的菜單欄添加菜單項(xiàng)或者彈出式菜單,并給每個(gè)菜單項(xiàng)指定一個(gè)全局唯一的標(biāo)識(shí)符(自定義或由編譯器分配)以及菜單項(xiàng)標(biāo)題。1 菜單資源的加載 2 菜單的動(dòng)態(tài)創(chuàng)建 3 菜單項(xiàng)的屬性 4 插入和刪除菜單項(xiàng)資源文件中的菜單的
15、結(jié)構(gòu)IDM_MYMENU1 MENU DISCARDABLE BEGIN POPUP 文件(&F) BEGIN MENUITEM 新建(&N)tCtrl+N, 100 MENUITEM 打開(&O).tCtrl+O, 101 MENUITEM 保存(&S).tCtrl+S, 102 MENUITEM SEPARATOR MENUITEM 文本模式(&T)tCtrl+T, 103 END POPUP 編輯(&E) BEGIN MENUITEM 撤銷(&U)tCtrl+Z, 104 MENUITEM SEPARATOR ENDEND菜單的動(dòng)態(tài)創(chuàng)建 HMENU CreateMenu(VOID);/創(chuàng)
16、建一個(gè)空菜單HMENU CreatePopupMenu(VOID);/創(chuàng)建空的彈出式菜單。(1) AppendMenu 在指定菜單的末尾加入一新的菜單項(xiàng),可以指定該菜單項(xiàng)的內(nèi)容、外觀和行為等屬性。(2) InsertMenuItem 在菜單的指定位置處插入一新菜單項(xiàng)菜單項(xiàng)的屬性(參考)菜單項(xiàng)的禁止或者激活狀態(tài)菜單項(xiàng)的選中或者取消選中狀態(tài)菜單項(xiàng)顯示的內(nèi)容和標(biāo)識(shí)符值(1) GetMenuState 返回指定菜單項(xiàng)的當(dāng)前狀態(tài)(2) EnableMenuItem 改變菜單項(xiàng)的激活、禁止和灰化狀態(tài)(3) CheckMenuItem 用于選中或者取消選中菜單項(xiàng),默認(rèn)的選中狀態(tài)是在菜單項(xiàng)的左邊做一復(fù)選框選中
17、標(biāo)記。(4) SetMenuItemInfo 通過設(shè)置MenuItemInfo結(jié)構(gòu),可以設(shè)置有關(guān)菜單項(xiàng)的所有狀態(tài)、菜單項(xiàng)標(biāo)題等信息。(5) GetMenuItemInfo 與函數(shù)SetMenuItemInfo對(duì)應(yīng),此函數(shù)用于獲取菜單項(xiàng)相關(guān)的信息,如顯示狀態(tài)、選中狀態(tài)、菜單項(xiàng)標(biāo)題、標(biāo)識(shí)符值等。插入和刪除菜單項(xiàng)(參考)刪除指定的菜單項(xiàng)十分容易:DeleteMenu(hSubMenu, IDM_FILE_EXIT, MF_BYCOMMAND);實(shí)現(xiàn)更復(fù)雜的菜單項(xiàng)(參考)1 位圖菜單項(xiàng)位圖菜單項(xiàng)hbmRed = LoadBitmap( hInst, MAKEINTRESOURCE (IDB_RED )
18、 );hPopSub = CreatePopupMenu三三;AppendMenu(hPopSub,MFT_BITMAP,IDM_COLOR_RED,(LPCTSTR)hbmRed); 2 自定義選中標(biāo)記的菜單項(xiàng)自定義選中標(biāo)記的菜單項(xiàng)BOOL SetMenuItemBitmaps(HMENU hMenu,UINT uPosition, UINT uFlags, HBITMAP hBitmapUnchecked,HBITMAP hBitmapChecked);12.5.5 菜單顯示例程12.6 快捷(加速)鍵資源加速鍵加速鍵經(jīng)常的,為了避免來回地使用鼠標(biāo)和對(duì)菜單的選擇,提出了隨時(shí)利用一個(gè)簡單的鍵
19、盤操作,以提高工作效率。12.6.4 加速(快捷)鍵表模板1 資源腳本文件中描述的快捷鍵IDR_MYACCELERATOR ACCELERATORS DISCARDABLE BEGIN E, IDM_DRAW_ELLIPSE, VIRTKEY, CONTROL, NOINVERT N, IDM_FILE_NEW, VIRTKEY, CONTROL, NOINVERT O, IDM_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT Q, IDM_FILE_EXIT, VIRTKEY, CONTROL, NOINVERT R, IDM_DRAW_RECT, VIRTKEY, CONTROL, NOINVERT S, IDM_FILE_SAVE, VIRTKEY, CONTROL, NOINVERT T, IDM_FILE_TEXT, ASCII, NOINV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥劑學(xué)居民健康考核試題及答案
- 藥物政策與行業(yè)發(fā)展試題及答案
- 初級(jí)會(huì)計(jì)師財(cái)務(wù)分析技能試題及答案
- 網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)師考試全景分析及試題及答案
- 2025年-黑龍江建筑安全員知識(shí)題庫
- 稅務(wù)合規(guī)違約的后果分析試題及答案
- 知識(shí)產(chǎn)權(quán)的社會(huì)功能與法律保障試題及答案
- 衛(wèi)生管理證書考試內(nèi)容與考試形式分析試題及答案
- 高中語文名著導(dǎo)讀吶喊讀后感素材新人教版
- 文化產(chǎn)業(yè)管理證書Exam試題及答案探索
- 中藥熱奄包在急性腸炎治療中的應(yīng)用研究
- 文化集市體驗(yàn)活動(dòng)策劃
- 村級(jí)巡察培訓(xùn)課件
- 景觀生態(tài)規(guī)劃與設(shè)計(jì)景觀生態(tài)學(xué)與景觀生態(tài)原理
- 人教版九年級(jí)數(shù)學(xué)下冊(cè)第二十六章反比例函數(shù)-作業(yè)設(shè)計(jì)
- 兩位數(shù)減一位數(shù)退位口算題-2
- 北京師范大學(xué)研究生培養(yǎng)方案
- 物業(yè)服務(wù)理論知識(shí)考試題庫500題(含答案)
- GB/T 3683-2023橡膠軟管及軟管組合件油基或水基流體適用的鋼絲編織增強(qiáng)液壓型規(guī)范
- 人防工程巡查檢測投標(biāo)方案
- 基于PLC的智能家居控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論