动态添加菜单

转载 2017年01月03日 16:16:43

动态添加菜单:是在原有的菜单栏中用程序添加子菜单,而不是可视化操作;

mainframe里面的oncreate函数里面;

 

★注意:在resource.h中添加资源ID定义

#define IDM_HELLO 111

创建资源ID,只是为了后面添加菜单命令响应函数;

算法:

     //S1:创建一个空的弹出菜单;

     CMenu menu;

    menu.CreatePopupMenu();

     //S2:获取菜单栏的指针;

     GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"WinSun");

     //S3:插入一个子菜单,仅作演示,可以没有

    GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,"WinSun");

     //S4:添加子菜单项,IDM_HELLO,是一个resource.h里面的宏定义符号常量111

    menu.AppendMenu(MF_STRING,IDM_HELLO,"Hello");

    menu.AppendMenu(MF_STRING,112,"Weixin");

    menu.AppendMenu(MF_STRING,113,"Mybole");

     //S5:脱离资源和指针

    menu.Detach();

 

完整程序如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

      if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

             return -1;

     

      if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

             | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

             !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

      {

             TRACE0("Failed to create toolbar\n");

             return -1;      // fail to create

      }

 

      if (!m_wndStatusBar.Create(this) ||

             !m_wndStatusBar.SetIndicators(indicators,

               sizeof(indicators)/sizeof(UINT)))

      {

             TRACE0("Failed to create status bar\n");

             return -1;      // fail to create

      }

 

      // TODO: Delete these three lines if you don't want the toolbar to

      //  be dockable

      m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

      EnableDocking(CBRS_ALIGN_ANY);

      DockControlBar(&m_wndToolBar);

 

      //S1:创建一个空的弹出菜单;

      CMenu menu;

    menu.CreatePopupMenu();

 

      //S2:获取菜单栏的指针;

      GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"WinSun");

 

      //S3:插入一个子菜单,仅作演示,可以没有

    GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,"WinSun");

 

      //S4:添加子菜单项,IDM_HELLO,是一个resource.h里面的宏定义符号常量111

    menu.AppendMenu(MF_STRING,IDM_HELLO,"Hello");

    menu.AppendMenu(MF_STRING,112,"Weixin");

    menu.AppendMenu(MF_STRING,113,"Mybole");

 

      //S5:脱离资源和指针

    menu.Detach();

 

      return 0;

}

 

添加/删除系统菜单

 

给系统菜单添加/删除菜单项

GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,114,"Welcome");

GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,MF_BYCOMMAND | MF_STRING,115,"维新");

GetMenu()->DeleteMenu(1,MF_BYPOSITION);

GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);*/

GetMenu()->DeleteMenu(       GetMenu()->GetSubMenu(1)->GetMenuItemID(0),MF_BYC

OMMAND);

 

如何添加响应函数

★注意:因为是程序代码添加菜单,我们无法可视化看到菜单,就无法使用classwizard添加响应函数,只能手动添加:三个步骤

 

第一步:在MainFrm.h中声明消息响应。DECLARE_MESSAGE_MAP()之前添加 

afx_msg void OnHello();

 

第二步:在MainFrm.cppEND_MESSAGE_MAP()之前,添加

ON_COMMAND(IDM_HELLO,OnHello)

 

第三步:在MainFrm.cpp中添加CMainFrame::OnHello()函数定义

void CMainFrame::OnHello()

{

      MessageBox("hello");

}

vb.net 2005 动态加载菜单及反射+权限

Imports System.ReflectionPublic Class Form1Class Form1    Public userflag As Object = "1,2,3,4,5,7,8...
  • htpower
  • htpower
  • 2007年08月19日 12:47
  • 1763

Android开发基础之动态添加菜单项

我们在之前的一篇博客中使用了在xml中写死了菜单项Item,然后在java文件中进行响应。但是这种菜单项显得非常不灵活,不能动态的增加删除Item。其实在Android中可以在java文件中动态增加菜...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2015年07月30日 22:37
  • 3468

VB 2005 Toolstrip动态添加菜单

一直以来,都喜欢用第三方控件,毕竟功能要强大得多,不过,正因为如果,导致俺的程序中招,即:infragistic 2005的WinGrid和Toolbar有冲突,花了几十个小时,才查出原因,晚上试了一...
  • benjoyeh
  • benjoyeh
  • 2014年01月25日 02:22
  • 1007

vb.net学习总结一(动态菜单)

刚刚看了一个vb.net 实现动态菜单的例子。觉得很有意思。例子中用的主要技术有:菜单树 的 操作treeview的操作利用堆栈实现菜单树与treeview树成员的对应利用委托实现对象与事件的关联因为...
  • precipitant
  • precipitant
  • 2006年11月22日 17:28
  • 2752

动态添加菜单

1  我们将找到应用程序主菜单对象,并把它封装到一个C M e n u对象中CMenu* pMainMenu = AfxGetMainWnd()->GetMenu();2  通过搜索,找到要编辑的子菜...
  • dangjt
  • dangjt
  • 2007年03月30日 13:06
  • 340

C# Winform 动态添加菜单

最近在做WINFORM开发,一直都在为主界面的点击事件及动态加载菜单苦脑。现在已解决这个问题了,可以实现数据库或都XML等配置完成动态生成菜单及事件加载。代码如下: private void For...
  • limlimlim
  • limlimlim
  • 2012年11月02日 16:32
  • 6014

动态创建菜单及菜单项过程介绍

本子主要介绍了创建动态菜单的过程
  • xiao3404
  • xiao3404
  • 2016年10月16日 15:20
  • 670

vb.net 用MenuStrip动态创建菜单,怎样添加子菜单,并增加click事件

Private Sub Form9_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Lo...
  • mhjcumt
  • mhjcumt
  • 2012年08月21日 11:25
  • 9209

Android利用GridView加载九宫格菜单

第一步:布局main.xml文件    android:layout_width="fill_parent"    android:layout_height="fill_parent"    and...
  • taomanman
  • taomanman
  • 2014年10月09日 12:34
  • 2449

javascript树形菜单(一):Tigra Tree Menu,实现动态数据加载

要使用一个javascript的树菜单,找了个现成的Tigra Tree Menu,看了下效果,还不错,就打算使用。  http://www.softcomplex.com/products/tigr...
  • kittaaron
  • kittaaron
  • 2013年03月15日 15:01
  • 1421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态添加菜单
举报原因:
原因补充:

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