,怎么动态修改右键菜单的文本内容

,怎么动态修改右键菜单的文本内容

在线等,如何动态修改右键菜单的文本内容?
我在 右键菜单的 第三个子菜单的响应函数 里想修改它的文本内容 
可就是不成功 ,但可以获取   很奇怪 


void CMenuView::OnContinue() 
{

CMenu menu;
CString *pText=new CString;


menu.LoadMenu(IDR_MENU1);
CMenu* pPopup = menu.GetSubMenu(0);  //得到菜单项
UINT itemID=pPopup->GetMenuItemID(2);//获取第三个子菜单的ID

pPopup->GetMenuString(2,*pText,MF_BYPOSITION);//获取第三个子菜单的文本
MessageBox(*pText);   // 一直显示“继续”  

*pText="暂停";
pPopup->ModifyMenu(2,MF_BYCOMMAND|MF_STRING,itemID,(LPSTR)pText);  // 修改  不成功

}



每次都弹出 继续 ,一直修改不成功 。这是为什么呢?  求帮助。。

------解决方案--------------------
VS2005上试过的。

CMenu menu;
CString *pText=new CString;


menu.LoadMenu(IDR_MENU);
CMenu* pPopup = menu.GetSubMenu(0);  //得到菜单项
UINT itemID=pPopup->GetMenuItemID(0);//获取第三个子菜单的ID

pPopup->GetMenuString(0,*pText,MF_BYPOSITION);//获取第三个子菜单的文本
MessageBox(*pText);   // 一直显示“继续”  

*pText=_T("暂停");
pPopup->ModifyMenu(0,MF_BYPOSITION
------解决方案--------------------
MF_STRING,itemID,*pText);  // 修改  不成功

ClientToScreen(&point);
pPopup->TrackPopupMenu(
TPM_LEFTALIGN 
------解决方案--------------------
 TPM_RIGHTBUTTON,
point.x, point.y, this);

------解决方案--------------------
引用:
Quote: 引用:

你在右键菜单生成的过程中不要用菜单资源了,直接用AppendMenu动态生成吧,然后用一个变量记录一下当前菜单到底是“继续”还是“暂停”

》》只能用这一招了么? 如果这样改 我的东西改动很大 。

其实问题的关键在于,你定义的CMenu这个变量是一个临时变量,你的修改其实起了作用,但是这个函数结束之后,CMenu这个变量生命期到了就没了,你再点右键,又从新生成一个CMenu变量,重新从资源中LoadMenu,所以你前面的修改就起不到作用了。
如果你非要从资源中加载菜单,那么可以这样做:
一、将CMenu menu改为CXXXView类加一个成员变量。在CXXXView类的OnInitialUpdate()中调用LoadMenu,代码如下:
void CMy11View::OnInitialUpdate()
{
CView::OnInitialUpdate();

menu.LoadMenu(IDR_MENU1);//装载自定义的右键菜单 
}
二、修改一下右键处理函数,将里面的LoadMenu去掉。代友如下:
void CMy11View::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
   CMenu *pSubMenu;//定义下面要用到的cmenu对象
 // menu.LoadMenu(IDR_MENU1);//装载自定义的右键菜单     pSubMenu=menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单  
   CPoint oPoint;//定义一个用于确定光标位置的位置  
   GetCursorPos(&oPoint);//获取当前光标的位置,以便使得菜单可以跟随光标  
   pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); 
}
三、修改一下菜单处理函数:
void CMy11View::On32771()
{
CString pText;
CMenu* pPopup = menu.GetSubMenu(0);  //得到菜单项
UINT itemID=pPopup->GetMenuItemID(0);//获取第三个子菜单的ID
pPopup->GetMenuString(0,pText,MF_BYPOSITION);//获取第三个子菜单的文本
if(pText==_TEXT("继续"))
pText=_TEXT("暂停");
else pText=_T("继续");
pPopup->ModifyMenu(0,MF_BYPOSITION
------解决方案--------------------
MF_STRING,itemID,pText);  // 修改  不成功
}
应该能够实现你所说的,菜单项在继续和暂停之间互换。