我希望根据一个编辑框的内容动态的改变菜单的某项的名字 (菜单是我自己创建的)代码如下:
CMenu* mmenu = GetMenu();
CMenu* submenu1 = mmenu->GetSubMenu(2);
submenu1->ModifyMenu(1,MF_BYPOSITION,0,str);
str是要修改成的名字。
结果发现 名字是改变了,但是原来可以点击这项弹出个对话框,现在也不行了,点击没反应了,求那位大侠给解答一下把 。
CMenu* mmenu = GetMenu();
CMenu* submenu1 = mmenu->GetSubMenu(2);
submenu1->ModifyMenu(1,MF_BYPOSITION,0,str);
str是要修改成的名字。
结果发现 名字是改变了,但是原来可以点击这项弹出个对话框,现在也不行了,点击没反应了,求那位大侠给解答一下把 。
解决方案 »
- 龙马的困惑
- CEdit如何实现手动换行,但是不要自动换行
- DDK里的Bitmap那个驱动的例子,打印完了,生成的BMP文件输出到什么位置去了?
- 为什么存储一条记录后,要过两三秒钟之后才能读取出来?
- 怎样用vc程序操作execl表里面的图表?
- 向当前有焦点的窗口输入字符串
- 怎么样可以使自己做的deskband(基于com)作用于当前系统每一个用户?
- 有没有关于编译器或编译原理好的网站或论坛啊,比较急啊
- 给出一个HDLL.dll文件及头文件HXF.H(HDLL.dll所有方法的说明),但调用HDLL里面的方法时出错!
- 如何编程可以实现把IC卡内的证书向系统注册(已经知道CSP及密钥容器名)
- char *p="the world",此时变量会在内存中占4个字节,可是“the workd”这个字符串存在哪里呢?
- 怎么读CSV文件(文件中有逗号等)
我把参数改成mf_bycommand,就修改不了名字了 我刚才试过
用mf_bycommand,要用ID来关联的.
或者你把那个id替换你的语句里面的第3个参数.
void CMainFrame::OnChangeFileMenu()
{
// Get the menu from the application window.
CMenu* mmenu = GetMenu(); // Look for "File" menu.
int pos = FindMenuItem(mmenu, _T("&File"));
if (pos == -1)
return; // Remove "New" menu item from the File menu.
CMenu* submenu = mmenu->GetSubMenu(pos);
pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
if (pos > -1)
submenu->RemoveMenu(pos, MF_BYPOSITION); // Look for "Open" menu item from the File menu. Insert a new
// menu item called "Close" right after the "Open" menu item.
// ID_CLOSEFILE is the command id for the "Close" menu item.
pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
if (pos > -1)
submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close")); // Rename menu item "Exit" to "Exit Application".
pos = FindMenuItem(submenu, _T("E&xit"));
if (pos > -1)
{
UINT id = submenu->GetMenuItemID(pos);
submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
} // Associate a context help ID with File menu, if one is not found.
// ID_FILE_CONTEXT_HELPID is the context help ID for the File menu
// that is defined in resource file.
if (submenu->GetMenuContextHelpId() == 0)
submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID); // Set "Open" menu item as the default menu item for the File menu,
// if one is not found. So, when a user double-clicks the File
// menu, the system sends a command message to the menu's owner
// window and closes the menu as if the File\Open command item had
// been chosen.
if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
{
pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
submenu->SetDefaultItem(pos, TRUE);
}
}// FindMenuItem() will find a menu item string from the specified
// popup menu and returns its position (0-based) in the specified
// popup menu. It returns -1 if no such menu item string is found.
int FindMenuItem(CMenu* Menu, LPCTSTR MenuString)
{
ASSERT(Menu);
ASSERT(::IsMenu(Menu->GetSafeHmenu())); int count = Menu->GetMenuItemCount();
for (int i = 0; i < count; i++)
{
CString str;
if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
str.Compare(MenuString) == 0)
return i;
} return -1;
}这里有个例子,你参考下.
改为: submenu1->ModifyMenu(1,MF_BYPOSITION,ITEM1_ID,str);
其中这个ITEM1_ID, 对应你的菜单项1的ID号。