wince和Windowsmobile开发中怎样动态修改menubar菜单项的文本(原)

来源:互联网 发布:内网聊天软件 编辑:程序博客网 时间:2024/04/30 04:30

我尝试了很多办法,网上搜到说是用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

 

原创粉丝点击