windows編程技術(shù)第12章-Windows中的資源_第1頁
windows編程技術(shù)第12章-Windows中的資源_第2頁
windows編程技術(shù)第12章-Windows中的資源_第3頁
windows編程技術(shù)第12章-Windows中的資源_第4頁
windows編程技術(shù)第12章-Windows中的資源_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、windows編程技術(shù)第12章-Windows中的資源第12章 Windows中的資源資源是Windows應(yīng)用程序用戶界面的重要組成部分,菜單、快捷鍵、圖標、光標、對話框和字符串等都是不同的資源類型。資源的使用極大地方便了Windows應(yīng)用程序的界面設(shè)計。資源是數(shù)據(jù),在程序運行是通過調(diào)用API函數(shù)裝入內(nèi)存,也可以隨時從內(nèi)存中釋放資源和資源腳本文件菜單和快捷鍵資源圖標、光標和字符串資源對話框12.1.2 資源和資源腳本文件資源也是一種數(shù)據(jù),他們在資源腳本文件RC(文本文件,以.RC為文件擴展名)中定義了應(yīng)用程序所需的數(shù)據(jù),即菜單、對話框、圖標等資源數(shù)據(jù)。例如:Myhouse Icon 在磁盤上的

2、在磁盤上的關(guān)鍵詞關(guān)鍵詞可在主程序中使用的圖標名可在主程序中使用的圖標名Windows應(yīng)用程序生成過程關(guān)于資源的生成關(guān)于資源的生成C(C+)語言編譯器.C(C+).H.OBJ.DEF.LIBTLINK鏈接器.ICO.CUR.BMP.FNT.DLG資源編輯器.RC資源描述文件(文本文件)資源編譯器.RES(二進制文件)資源鏈接器.EXE可執(zhí)行文件(應(yīng)用程序).EXE集成編譯鏈接12.2 圖標資源圖標、光標(游標)本質(zhì)上都是位圖,只不過它們都被限制了一定的尺寸,分別被用在不同的地方。字符串也是一種資源類型,它給程序提供了另外一種輸出文本字符串的方法。內(nèi)建圖標StopIDI_HAND?IDI_QUES

3、TION!IDI_EXCLAMATION*IDI_ASTERISK12.2.2 圖標應(yīng)用的基本方法Windows 202X應(yīng)用程序支持三種不同的圖標尺寸:256色(48X48)、32色(32X32)和16色(16X16)圖標。在應(yīng)用程序最小化時,小圖標顯示在應(yīng)用程序窗口的左上角;大圖標用于桌面圖標或大圖標試圖中。三種圖標都使用同一個標識符或者名稱,系統(tǒng)直到把不同的尺寸的圖標用在何處。步驟:在資源腳本文件中添加:IDI_MYICON ICON DISCARDABLE ”在主程序中加入:常用的方法WNDCLASS wndclass; = LoadIcon(hInstance,MAKEINTRESO

4、URCE(IDI_MYICON);其他方法:函數(shù)LoadImage也可以將圖標資源裝載到應(yīng)用程序的窗口類,并且功能更強。 = LoadImage (hInstance, MAKEINSTRESOURCE( IDI_MYICON), IMAGE_CURSOR, 32, 32, LR_DEFAULTCOLOR) ;函數(shù)SetClassLong非常有用,它可以在程序執(zhí)行期間,動態(tài)地更改窗口類指定的圖標、光標、菜單甚至窗口過程等屬性。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 大圖表、小圖標的應(yīng)用涉及函數(shù)DrawIcon(HDC hdc, int X, int Y, HICON hIcon) LoadIcon(hInstance, MAKEINTRESOURCE( IDI_ICON ) );cxIcon = GetSystemMetrics(SM_CXICON);/取得圖標的尺寸cyIcon = GetSystemMetrics(SM_CYICON); /取得圖

6、標的尺寸大圖標(32X32)會自動轉(zhuǎn)換成小圖標(16X16)一般地講,Studio中建立一個32X32的大圖標,大圖標將自動在文件夾中顯示,如果在標題欄中,則自動會把大圖標縮成小圖標(16X16)顯示。為什么還要編輯一個小圖標:由于大圖標在自動轉(zhuǎn)換成小圖標,某些復(fù)雜的圖標會失真,因此最好的辦法是在建立一個小圖標。打開源程序打開源程序12.3 使用自定義的光標系統(tǒng)提供了一些預(yù)定義的鼠標光標。標識符為IDC_ARROW,IDC_MOVE,IDC_WAIT或IDC_CROSS等。在資源腳本文件中,自定義光標的描述如下:IDC_MYCURSOR CURSOR DISCARDABLE “cursor1.

7、cur” 自定義的光標資源保存在文件(如cursor1.cur)中,在定義窗口類時,可以把自定義的光標設(shè)置為窗口類默認的光標。 = LoadCursor(hInstance, MAKEINTRESOURCE (IDC_MYCURSOR) );特別是在鼠標消息WM_MOUSEMOVE的處理期間,這個函數(shù)非常有用。case WM_MOUSEMOVE:hCursor = LoadCursor (hInst, MAKEINTRESOURCE( IDC_MYCURSOR ) );SetCursor(hCursor); 用SetClassLong設(shè)置窗口中的光標如果在運行過程中希望改變窗口內(nèi)的默認光標,可

8、以用SetClassLong函數(shù)hCursor = LoadCursor(hInstance,TEXT(“childcursor”); / 其中SetClassLong(hwnd, GCL_HCURSOR, hCursor); 或 者 , 動 態(tài) 設(shè) 置 光 標 。 特 別 是 在 鼠 標 消 息WM_MOUSEMOVE的處理期間,這個函數(shù)非常有用。SetCursor(hCursor);例如:case WM_MOUSEMOVE:hCursor = LoadCursor (hInst, MAKEINTRESOURCE( IDC_MYCURSOR ) );SetCursor(hCursor);12

9、.4 使用字符串資源(自學(xué))使用字符串資源,提供了一種完全不同的使用字符串的方法,字符串被放在資源腳本文件中。程序在需要它們時,通過每個字符串唯一的標識符來獲得字符串。STRING TABLE DISCARDABLEBEGINGIDS_ERROR “錯誤:202Xnn由于某種原因,網(wǎng)頁不能打開!” IDS_MESSAGE “我是超級鏈接”END LoadString將字符串?dāng)?shù)據(jù)從資源文件中復(fù)制到內(nèi)存緩沖區(qū)。int LoadString(HINSTANCE hInstance,UINT uID,LPTSTR lpBuffer,int nBufferMax);圖標、光標和字符串資源的應(yīng)用實例(補充

10、) -演示圖標、光標和字符串資源的使用(模擬網(wǎng)頁中的超級鏈接)12.5 菜單和快捷鍵資源 12.5.1 菜單概念菜單是Windows圖形用戶界面中窗口的重要組成部分。使用菜單可以使用戶了解并方便地使用應(yīng)用程序提供的各項功能;使用快捷鍵資源可使菜單的操作更方便。三種菜單:主菜單,下拉式菜單,浮動式菜單菜單本質(zhì)上是層次嵌套的。鼠標點擊菜單項,則觸發(fā)一個菜單事件,程序捕獲該事件進行管理。12.5.2 菜單代號、菜單項ID與菜單ID 對下拉式菜單來說,可以拉出菜單名以及唯一標識該菜單項的ID。菜單項有三個特性菜單名,它可以是字符串或點陣圖。菜單項的ID,單擊菜單項時,Windows向包含菜單項的菜單所

11、在的窗口發(fā)送WM_COMMAND消息,LOWORD(wParam)是向應(yīng)用程序窗口函數(shù)發(fā)送的下拉式菜單的代號(通知碼)菜單項的屬性,包括是否被禁用、無效化或被選擇。12.5.3 在程序中引用菜單在創(chuàng)建菜單資源后,有三種方法可以實現(xiàn)菜單與程序窗口的關(guān)聯(lián):(1) 在窗口類中加載菜單 = lpMenuName;(2) 創(chuàng)建窗口時加載菜單HMENU LoadMenu(HINSTANCE hInstance, LPCTSTR lpMenuName); (3) 動態(tài)加載菜單應(yīng)用程序窗口調(diào)用函數(shù)LoadMenu獲取菜單句柄后,還可以通過調(diào)用函數(shù)SetMenu動態(tài)地加載菜單,以提高程序的靈活性。BOOL Se

12、tMenu(HWND hWnd, HMENU hMenu);12.5.4 和菜單有關(guān)的窗口消息WM_INITMENU當(dāng)一個主菜單創(chuàng)建時,發(fā)出的消息。WM_MENUSELECT用戶在菜單項中移動光標或者鼠標,應(yīng)用程序會受到許多WM_MENUSELECT消息WM_INITMENUPOPUP準備顯示一個彈出式下拉式菜單時,發(fā)送的消息。WM_COMMAND當(dāng)用戶選擇一個菜單項時,Windows通常會向菜單所在的窗口函數(shù)發(fā)送WM_COMMAND消息,LOWORD(wParam)是菜單項的IDWM_MENUCHAR如果用戶按下Alt鍵和一個與菜單項不匹配的字符時,或者在顯示下拉式菜單時,用戶按下一個與下拉

13、式菜單里的項目不匹配的字符鍵。WM_INITMENUWM_INITMENUPOPUPWM_MENUSELECTWM_INITMENUPOPUPWM_COMMANDWM_MENUSELECTWM_MENUSELECTWM_MENUSELECTWM_MENUSELECT其他菜單消息(參考) WM_SYSCOMMAND消息與WM_COMMAND消息類似,只不過它是用戶選擇系統(tǒng)菜單的菜單項時,發(fā)送到窗口過程的消息隊列。WM_INITMENU是程序的頂層菜單和彈出式菜單被激活前的一瞬間發(fā)送到窗口過程。 wParam是頂層菜單的句柄。WM_INMENUPOPUP是彈出式菜單被激活前的一瞬間發(fā)送到窗口過程的

14、。wParam是彈出式菜單的句柄。LOWORD(lParam)是其在上一級菜單中的索引位。WM_CONTEXTMENU消息通知窗口用戶單擊了鼠標右鍵,并要求彈出浮動菜單。此消息的wParam是單擊鼠標右鍵時所處窗口的句柄;lParam參數(shù)指明了消息產(chǎn)生時的鼠標位置(屏幕坐標),其中,低字節(jié)為水平坐標,高字節(jié)為豎向坐標。 菜單和菜單相關(guān)操作 通過資源編譯器創(chuàng)建菜單資源很容易,用戶只需為其窗鍵的菜單欄添加菜單項或者彈出式菜單,并給每個菜單項指定一個全局唯一的標識符(自定義或由編譯器分配)以及菜單項標題。1 菜單資源的加載 2 菜單的動態(tài)創(chuàng)建 3 菜單項的屬性 4 插入和刪除菜單項資源文件中的菜單的

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菜單的動態(tài)創(chuàng)建 HMENU CreateMenu(VOID);/創(chuàng)

16、建一個空菜單HMENU CreatePopupMenu(VOID);/創(chuàng)建空的彈出式菜單。(1) AppendMenu 在指定菜單的末尾加入一新的菜單項,可以指定該菜單項的內(nèi)容、外觀和行為等屬性。(2) InsertMenuItem 在菜單的指定位置處插入一新菜單項菜單項的屬性(參考)菜單項的禁止或者激活狀態(tài)菜單項的選中或者取消選中狀態(tài)菜單項顯示的內(nèi)容和標識符值(1) GetMenuState 返回指定菜單項的當(dāng)前狀態(tài)(2) EnableMenuItem 改變菜單項的激活、禁止和灰化狀態(tài)(3) CheckMenuItem 用于選中或者取消選中菜單項,默認的選中狀態(tài)是在菜單項的左邊做一復(fù)選框選中

17、標記。(4) SetMenuItemInfo 通過設(shè)置MenuItemInfo結(jié)構(gòu),可以設(shè)置有關(guān)菜單項的所有狀態(tài)、菜單項標題等信息。(5) GetMenuItemInfo 與函數(shù)SetMenuItemInfo對應(yīng),此函數(shù)用于獲取菜單項相關(guān)的信息,如顯示狀態(tài)、選中狀態(tài)、菜單項標題、標識符值等。插入和刪除菜單項(參考)刪除指定的菜單項十分容易:DeleteMenu(hSubMenu, IDM_FILE_EXIT, MF_BYCOMMAND);實現(xiàn)更復(fù)雜的菜單項(參考)1 位圖菜單項位圖菜單項hbmRed = LoadBitmap( hInst, MAKEINTRESOURCE (IDB_RED )

18、 );hPopSub = CreatePopupMenu三三;AppendMenu(hPopSub,MFT_BITMAP,IDM_COLOR_RED,(LPCTSTR)hbmRed); 2 自定義選中標記的菜單項自定義選中標記的菜單項BOOL SetMenuItemBitmaps(HMENU hMenu,UINT uPosition, UINT uFlags, HBITMAP hBitmapUnchecked,HBITMAP hBitmapChecked);12.5.5 菜單顯示例程12.6 快捷(加速)鍵資源加速鍵加速鍵經(jīng)常的,為了避免來回地使用鼠標和對菜單的選擇,提出了隨時利用一個簡單的鍵

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等.壓縮文件請下載最新的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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論