windows菜單等常用資源設定

來源:互聯網
上載者:User

在現在的環境下,在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);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.