wince和Windowsmobile開發中怎樣動態修改menubar功能表項目的文本(原)

來源:互聯網
上載者:User

我嘗試了很多辦法,網上搜到說是用SHGetSubMenu()這個方法擷取HMENU,但是我在Aygshell.h中卻沒找到這個函數。嘗試用SHGetMenu()擷取,但是擷取出來的都是NULL。最後在網上搜到了擷取Menubar的HMENU控制代碼的方法:

首先,建立對應softkey的菜單。

SHMENUBARINFO* smb=new SHMENUBARINFO();
smb->cbSize = sizeof(SHMENUBARINFO);
smb->hInstRes = ::AfxGetInstanceHandle();
smb->hwndParent = m_hWnd;
smb->nToolBarId =IDR_DAYPLANSTART;
smb->nBmpId = 0;
smb->cBmpImages = 0;
smb->dwFlags = SHCMBF_HMENU|SHCMBF_HIDESIPBUTTON;
SHCreateMenuBar(smb);

然後,可以直接儲存控制代碼,或使用SHFindMenuBar()找出控制代碼,通過下面的方法擷取到對應的菜單控制代碼。

HWND hwndMB=smb->hwndMB;
TBBUTTONINFO tbbi={0};
tbbi.cbSize=sizeof(tbbi);
tbbi.dwMask=TBIF_LPARAM|TBIF_BYINDEX;
::SendMessage(hwndMB,TB_GETBUTTONINFO,0,(LPARAM)&tbbi);
HMENU m_hMenuBar=(HMENU)tbbi.lParam;

最後,使用菜單控制代碼對裡面的功能表項目進行修改。

TCHAR szDrawText[100];
wcscpy(&szDrawText[0],sChangeText);sChangeText是CString類型,注意長度不要超過szDrawText定義的長度。
MENUITEMINFO mii;
memset((char *)&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.dwTypeData = &szDrawText[0];
mii.cch = 100;
mii.fType =MFT_STRING;
GetMenuItemInfo(m_hMenuBar, ID_TAKEPHOTO, FALSE, &mii);//擷取功能表項目資訊
SetMenuItemInfo(m_hMenuBar, ID_TAKEPHOTO, FALSE, &mii);//設定功能表項目資訊

ID_TAKEPHOTO是功能表項目的ID

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.