Welcome to tiger's blog!

What lead to success, what we are seeking...
posts - 47, comments - 23, trackbacks - 0, articles - 8
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

动态增加或删除菜单

Posted on 2007-01-05 11:32 tiger 阅读(1506) 评论(6)  编辑 收藏 引用
1、 增加菜单


//添加
CMenu *mainmenu;
mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单
(mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符

(mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT,_T("Always on
&Top")); //添加新的菜单项
DrawMenuBar(); //重画菜单

  2、 删除菜单


//删除
CMenu *mainmenu;
mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单

CString str ;
for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i--) //取得菜
单的项数。
{
(mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION);
//将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。
if(str=="Always on &Top") //如果是刚才我们增加的菜单项,则删除。
{
(mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION);
break;
}

Feedback

# re: 动态增加或删除菜单[未登录]  回复  更多评论   

2007-04-11 17:48 by RAINBOW
DrawMenuBar();此句一写上链接时就报错:error LNK2019: unresolved external symbol "public: void __thiscall CWnd::DrawMenuBar(void)" (?DrawMenuBar@CWnd@@QAEXXZ) referenced in function "public: virtual void __thiscall CAddmenuView::OnDraw(class CDC *)" (?OnDraw@CAddmenuVie。
这是为什么啊?

# re: 动态增加或删除菜单[未登录]  回复  更多评论   

2007-04-12 14:24 by tiger
你的代码写在视图类中吧?这应该是没有链接相应的库。你将其实现写在主框架类中就好了。

# re: 动态增加或删除菜单[未登录]  回复  更多评论   

2007-04-12 17:29 by RAINBOW
我在主框架中新增了一个消息处理函数,加上此句还是会报同样的错语!

# re: 动态增加或删除菜单  回复  更多评论   

2007-04-13 09:36 by tiger
怎么可能呢?你将我下面的代码直接拷过去看看,这些代码都是可以直接运行成功的。
void CMainFrame::OnMenuitemAdd()
{
// TODO: Add your command handler code here
CMenu *pMainMenu = AfxGetMainWnd()->GetMenu(); //得到主菜单
(pMainMenu->GetSubMenu (0))->AppendMenu(MF_SEPARATOR);//添加分隔符



//添加新的菜单项
(pMainMenu->GetSubMenu (0))->AppendMenu(MF_STRING,
ID_APP_ABOUT,
_T("Always on &Top"));
//重画菜单
DrawMenuBar();
}

void CMainFrame::OnMenuitemDelete()
{
// TODO: Add your command handler code here
CMenu *pMainMenu = AfxGetMainWnd()->GetMenu(); //得到主菜单

CString str;
//取得菜单的项数
for(int i = (pMainMenu->GetSubMenu(0))->GetMenuItemCount() - 1; i >= 0; i--)
{
//将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上
(pMainMenu->GetSubMenu(0))->GetMenuString(i, str, MF_BYPOSITION);

//如果是刚才我们增加的菜单项,则删除
if(str == "Always on &Top")
{
(pMainMenu->GetSubMenu(0))->DeleteMenu(i, MF_BYPOSITION);
break;
}
}
}

# re: 动态增加或删除菜单[未登录]  回复  更多评论   

2007-04-14 14:20 by RAINBOW
我是在EVC4。0下做的,我新建了一个单文档,照你的方法在CMainFrame新增了一成员函数:
void CMainFrame::OnMenuitemAdd()
{
CMenu *pMainMenu = AfxGetMainWnd()->GetMenu();
//得到主菜单
(pMainMenu->GetSubMenu (0))->AppendMenu(MF_SEPARATOR);//添加分隔符


//添加新的菜单项
(pMainMenu->GetSubMenu (0))->AppendMenu(MF_STRING, ID_APP_ABOUT, _T("Always on &Top"));
//重画菜单
// DrawMenuBar();
}
然后用另外一个函数调用它,没有增加菜单!而且一加上DrawMenuBar(); 还是会报同样的错!郁闷死了!
用同样的方法在VIEW类中做可以增加菜单,但DrawMenuBar(); 仍然不能用?

# re: 动态增加或删除菜单[未登录]  回复  更多评论   

2007-04-14 14:54 by tiger
由于EVC只是VC的一个子集,很多VC的库函数EVC中都不支持的。如果是在EVC中,不必调用DrawMenuBar()就可以实现增加菜单,我已经测试过了。EVC好像不支持这个函数。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理