在現在的環境下,在VC下編程,大家都已經習慣了使用MFC的快捷,對於資源檔的處理很多人都已經不瞭解了,我寫這篇文章,主要就是為了對VC下資源檔的處理進行一個簡單的解說。
一.添加表徵圖icon
第一種,通過ID進行添加
wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON1)) ;
這裡其實是將ICON資源的ID轉換為字串的指標
第二種,通過字串進行添加
wndclass.hIcon = LoadIcon (hInstance, TEXT("Myicon")) ;
但需要注意的是,使用這種方法的時候不應該在resource.h包含#define語句
第三種,通過SetClassLong方法進行設定
SetClassLong(hwnd,GCL_HICON,LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2)));
這種方法主要是用於動態設定
二.添加字串資源
LoadString (hInstance, IDS_ICON1, szAppName, sizeof (szAppName) / sizeof (TCHAR)) ;
id是ID號,szAppName是接收字串數組的指標,第四參數是最大字元數。
三.菜單資源
3.1 當使用者選擇一個菜單時,windows通常向視窗過程發送幾個訊息“:
WM_INITMENU:wParam:主菜單控制代碼;
lParam:0;
WM_MENUSELECT:LOWORD(wParam):選中項:菜單ID或者彈出式菜單控制代碼;
HIWORD(wParam):選擇標誌;
lParam:包含選中項的菜單控制代碼;
WM_INITMENUPOPUP: wParam:彈出式菜單控制代碼;
LOWORD(lParam):彈出式菜單索引;
HIWORD(lParam):系統功能表為1,其他為0;
WM_COMMAND: LOWORD(wParam):菜單ID;
HIWORD(wParam):0;
lParam:0;
WM_SYSCOMMAND:wParam:菜單ID;
lParam:0;
註:如果WM_SYSCOMMAND訊息是由按滑鼠產生的,LOWORD(lParam)和HIWORD(lParam)將包含游標位置的X和Y的螢幕座標。
WM_MENUCHAR:LOWORD(wParam):字元代碼(ASCII或Unicode);
HIWORD(wParam):選擇碼;
lParam:菜單控制代碼;
選擇碼是:
a. 0,不顯示彈出式菜單
b. MF_POPUP ,顯示彈出式菜單
c.MF_SYSMENU,顯示系統彈出式菜單
3.2對於菜單處理的API
hMenu = GetMenu (hwnd) ;
//擷取菜單控制代碼
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;
//分別用於取消或者選中功能表項目
EnableMenuItem (hMenu, IDM_TIMER_START, MF_GRAYED) ;
//用於灰化功能表項目
3.3 定義菜單的複雜方法
hMenu=CreateMenu();
hMenuPopup=CreateMenu();
AppendMenu(hMenuPopup,MF_STRING,IDM_FILE_NEW,”&New”);
……
……
AppendMenu(hMenu,MF_POPUP,hMenuPopup,”&File”);
3.4 浮動彈出式菜單
case WM_CREATE:
hMenu = LoadMenu (hInst, szAppName) ;
hMenu = GetSubMenu (hMenu, 0) ;
return 0 ;
case WM_RBUTTONUP:
point.x = LOWORD (lParam) ;
point.y = HIWORD (lParam) ;
ClientToScreen (hwnd, &point) ;
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y,
0, hwnd, NULL) ;
3.5 使用系統功能表
hMenu = GetSystemMenu (hwnd, FALSE) ;
3.6其他功能表命令
DrawMenuBar(hwnd);
//強制重新整理菜單
hMenuPopup=GetSubMenu(hMenu,iPosition);
//獲得彈出式菜單的控制代碼
iCount=GetMenuItemCount(hMenu);
//獲得頂層菜單或者當前彈出式菜單的項數
id=GetMenuItemID(hMenuPopup,iPosition);
//其中iPosition是功能表項目在彈出式菜單中的位置(從0開始)
iCharCount=GetMenuString(hMenu,id,pString,iMaxCount,iFag);
//iFag為MF_BYCOMMAND(其中ID是菜單ID),為MF_BYPOSITION(其中id是位置索引),函數返回複製的字數,將iMaxCount個位元組複製到pString中
iFlags=GetMenuState(hMenu,id,iFlag);
////iFag為MF_BYCOMMAND(其中ID是菜單ID),為MF_BYPOSITION(其中id是位置索引),函數返回當前屬性的組合
DestoryMenu(hMenu);
//是菜單控制代碼無效
3.7 處理菜單的非正規命令
setMenu(hwnd,hMenu);