谈在VC中动态改变菜单

原创 2001年05月21日 10:55:00
谈在VC中动态改变菜单
bull77

  大部分Windows应用程序都使用下拉式菜单实现自己特定的函数,它使编程更加方便,不需要在程序中增加多个按钮以完成这些操作。大多数情况下,我们的程序编译生成后,菜单就确定了,不能再修改。然而,在很多情况下,程序要根据用户的自己设置产生不同的菜单以适应不同用户的要求,这就需要我们动态的改变菜单。接下来我们就分析如何动态的生成不同的菜单。

  第一步:

  运行AppWizard生成一个工程mymenu,接受所有的默认设置,除了下面一步:在step 1中选Single Document ,点击Finish按钮,此时我们生成了一个工程。编译运行,我们可以发现程序默认生成的菜单,接下来我们要对这个菜单进行修改。

  第二步:

  添加一个菜单资源,按如下步骤:菜单中选择InsertàResouceàMenuàNew ,我们可以看到添加了一个ID号为IDR_MENU1的菜单资源,至于菜单中的各项你就随便添加了,为了我们下面的编程,请你添加几项,第一列要包含几个子菜单。

  第三步:

  添加一个对话框资源,按如下步骤:菜单中选择InsertàResouceàDialogàNew ,我们可以看到添加了一个ID号为IDD_DIALOG1的对话框资源,添加六个按钮,如下图:

jt-2001-4-29-image002.jpg

ID号依次为ID_CLEAR, ID_GOONE ,ID_GOTWO, ID_ADD, ID_ADDITEM, ID_EDIT ,为对话框定义类名为CChangeMenu, 双击添加的六个按钮增加处理函数,用默认函数名。

  第四步:

  在IDR_MAINFRAME菜单中添加一项,ID号为ID_SET,名为"弹出设置对话框",为其添加处理函数,添加如下代码:

  CChangeMenu dlg;
  dlg.DoModal();

  当然,别忘了在文件的开头添加#include "changemenu . h"

  第五步:

  找到添加的六个按钮的处理函数,依次添加如下的代码:

  void CChangeMenu::OnClear()
   {
    AfxGetMainWnd()->SetMenu(NULL);
    AfxGetMainWnd()->DrawMenuBar();
   }

  void CChangeMenu::OnGoone()
   {
    if(!menu1){
     menu1.LoadMenu(IDR_MENU1);
     AfxGetMainWnd()->SetMenu(&menu1);
     AfxGetMainWnd()->DrawMenuBar();
     menu1.Detach();
    }
   }

  void CChangeMenu::OnGotwo()
   {
    if(!menu2){
     menu2.LoadMenu(IDR_MAINFRAME);
     AfxGetMainWnd()->SetMenu(&menu2);
     AfxGetMainWnd()->DrawMenuBar();
     menu2.Detach();
    }
   }

  void CChangeMenu::OnAdd()
   {
    static int x=400;
    AfxGetMainWnd()->GetMenu()->AppendMenu(MF_STRING,x,"mynew");
    AfxGetMainWnd()->DrawMenuBar();
    x++;
   }

  void CChangeMenu::OnAdditem()
   {
    static int y=500;
    AfxGetMainWnd()->GetMenu()->GetSubMenu(0)->InsertMenu(1,MF_BYPOSITION,y,"mynewitem");
    AfxGetMainWnd()->DrawMenuBar();
    y++;
   }

  void CChangeMenu::OnEdit()
   {
    AfxGetMainWnd()->GetMenu()->ModifyMenu(0,MF_BYPOSITION,402,"dfd");
    AfxGetMainWnd()->DrawMenuBar();
   }

VC++实现弹出菜单(转)

用VC++实现弹出菜单比较简单,这里介绍其中的一种来实现一个鼠标左键弹出菜单,效果如下图所示: 步骤: 一、新建一个基于对话框的MFC应用程序-----PopupMenu 二...
  • adu285041555
  • adu285041555
  • 2013年02月25日 10:44
  • 650

VC MFC菜单栏(CMenu)控件

 菜单栏 在对话框窗口里显示菜单栏 像工具栏一样,菜单栏在按件面板里没有对应的选项,但有一个菜单控件类CMenu,所以如果想要在对话框里显示菜单栏,就得像工具栏那样,到ResourceV...
  • u012252959
  • u012252959
  • 2017年04月14日 14:25
  • 556

VC++任务栏托盘图标及右键菜单实现

Windows 95以及后来的Windows版本允许你将程序图标放入系统托盘。所谓系统托盘,通常指的是屏幕右下方显示时间,音量等图标的那个区域。托盘图标通常可以执行一些快捷操作,如窗口隐藏时通常最小化...
  • u010561359
  • u010561359
  • 2013年06月04日 14:52
  • 1989

vc托盘图标的实现以及托盘右键菜单的响应

#define  UM_SHOW_TORY_ICON WM_USER + 200 + 1      // 用于响应托盘图标消息 void addToTray() { HINSTANCE ...
  • qingzai_
  • qingzai_
  • 2015年02月28日 17:41
  • 1470

VC 创建弹出式菜单

步骤: (1) 创建一个基于对话框的应用程序 (2)在工作区选择资源视图,插入一个菜单资源,添加菜单项 (3)在对话框的头文件中声明一个CMenu类对象m_Menu (4)在OnInitDia...
  • cc7829290
  • cc7829290
  • 2013年02月05日 16:37
  • 2220

VC2010 对话框显示菜单栏并响应

1. 新建项目,在resourceview视图添加新的菜单(右键)     2. 在下图Type Here处添加菜单内容。 注意,当定义了二级及以后菜单后,一级菜单就不能再更改ID了,也不再有响...
  • phenixyf
  • phenixyf
  • 2015年01月14日 17:37
  • 2945

VC/MFC 在对话框中添加菜单栏并响应

今天我写了一个科学计算器,是基于MFC对话框的,然后想要在对话框上创建一个菜单栏,并响应。。。实现弹出一些信息。 实现后的效果图: 实现步骤如下: 新建一个基于对话框的MFC应用...
  • phenixyf
  • phenixyf
  • 2015年01月13日 19:06
  • 4593

Windows Shell编程实现右键菜单-VS2005,Win7 32位

参考资料: windows右键菜单开发--with vs2008(2005) or vc9(vc8) 前言:其实最近一直在看微软的刻录函数 imapi2,发现大量的接口函数...
  • zaishaoyi
  • zaishaoyi
  • 2014年08月12日 00:17
  • 2469

图解VC++工具栏和状态栏编程实例

demo工程 http://pan.baidu.com/s/1mh83aru VB6附带的graphics文件夹资源 http://pan.baidu.com/s/1sl5RmI5 ...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年04月05日 22:20
  • 1480

MFC : 给主菜单动态添加删除一级子菜单

demo private: BOOL AddDyMenu(DWORD dwMenuRcId, TCHAR* pMenuName); BOOL DelDyMenu(TCHAR* pMen...
  • LostSpeed
  • LostSpeed
  • 2016年03月08日 23:28
  • 1186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:谈在VC中动态改变菜单
举报原因:
原因补充:

(最多只允许输入30个字)