日历

2008 7.4 Fri
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

日志分类

文章搜索

日志文章

2008年05月09日 16:08:40

MFC中利用CMenu类动态添加弹出菜单

方法:
MFC中利用CMenu类动态添加弹出菜单和响应函数
步骤:
1 声明一个菜单:
  CMenu menu;
2 生成菜单对象:  
  menu.CreatePopupMenu();
3 给菜单添加上内容:
  menu.AppendMenu(MF_STRING,WM_CLEARHOSTS,"清除HOSTS");
AppendMenu函数具体的意义可以查看MSDN,其中WM_CLEARHOSTS为自定义的一个消息,最后一个参数为菜单的text,点击这个菜单就可以调用WM_CLEARHOSTS消息的处理函数。
4 添加子弹出菜单:
  CMenu submenu;
  submenu.CreatePopupMenu();
  menu.AppendMenu(MF_POPUP,(UINT_PTR)(submenu.m_hMenu),"sub");
5 设置当失去焦点时菜单自动消失
  SetForegroundWindow();
6 设置菜单的位置:
  menu.TrackPopupMenu();
以上各步连接起来就是一个完整的动态生成菜单的步骤,当动态生成的菜单很多且菜单又不固定的时候,预先
为每个菜单都定义一个消息和消息处理函数是很麻烦且不现实的,现在介绍一种方法来动态响应动态生成的菜单。
其原理就是利用OnCommand函数。
首先,要为每一个动态生成的菜单指定一个ID,方式如下
  menu.AppendMenu(MF_STRING,ID,"yourMenuName");
其中参数ID为一个唯一的整数,可以由你自己指定,当鼠标单击此菜单的时候,系统发送一个消息,此消息优先
被OnCommand函数接收,OnCommand函数的原形为:
BOOL OnCommand(WPARAM wParam, LPARAM lParam);
假如你指定菜单的ID为10001,响应函数的具体写法为:
BOOL OnCommand(WPARAM wParam, LPARAM lParam)
{
  int menuID = LOWORD(wParam);
  if(menuID > 10000)
  {
    //添加你自己的处理代码
  }
}
如果是使用对话框的mfc,自己重载OnCommand函数即可

本文转自网站C/C++开发工具

Tags: MFC   C语言   弹出菜单  

类别: 无分类 |  评论(0) |  浏览(219) |  收藏
发表评论