在wince下用mfc的dialog类编程,我在resource中加入了菜单,然后通过下面代码加入到dialog的init中,实现了wince下dialog中添加菜单的功能
SHMENUBARINFO m_menu_bar;
ZeroMemory(&m_menu_bar, sizeof(SHMENUBARINFO));
m_menu_bar.cbSize = sizeof(SHMENUBARINFO);
m_menu_bar.hwndParent = this->m_hWnd;
m_menu_bar.nToolBarId = IDR_MENU1;
m_menu_bar.hInstRes = AfxGetInstanceHandle();
m_menu_bar.nBmpId = 0;
m_menu_bar.cBmpImages = 0;
m_menu_bar.dwFlags = SHCMBF_COLORBK | SHCMBF_HMENU | SHCMBF_HIDESIPBUTTON;
IDR_MENU1为我的菜单的ID。在菜单的其中一个选项添加了事件,我把事件添加到对话框类中CIPCameraDEMODlg::OnBtnVideostart(),我现在想在事件中动态的改变菜单该选项的文字,就是把“start”改变为“stop”,用SetWindowText好像做不到。
求教改变该菜单选项的解决方法,最好贴出相应代码,非常感谢!
先把你使用SetWindowText有方法贴出来吧
SetWindowText我这样用不可以
GetDlgItem(IDC_BTN_VIDEOSTART)->SetWindowText(_T("Stop"));
我用ModifyMenu也不行
CMenu *pmenu;
pmenu->LoadMenu(IDR_MENU1);
pmenu->ModifyMenu( IDC_BTN_VIDEOSTART, MF_BYPOSITION | MF_STRING | MF_OWNERDRAW, 0, _T("stop") );
TCHAR szTestAgain[] = TEXT("modify");
MENUITEMINFO it;
it.cbSize=sizeof(MENUITEMINFO);
it.fMask=MIIM_TYPE;
it.fType=MFT_STRING|MFT_OWNERDRAW;
it.dwTypeData=szTestAgain;
it.cch=wcslen(szTestAgain)+1;
SetMenuItemInfo(hMenu,0,TRUE,&it);//其中hMenu是该子菜单的句柄,0是表示该子菜单的第一项
子菜单的句柄如何获得?我是在对话框类中加载菜单类,只知道菜单的ID是IDR_MENU1
方法很多。可以在WM_INITMENUPOPUP:捕获
hMenu=(HMENU) wParam;
//这个消息在打开子菜单项时响应。