创建菜单

常用菜单操作函数
文中涉及到的VC++中常见的菜单只要操作如下:
GetMenu() - 获得与框架窗口相链接的菜单。
InsertMenu() – 在指定位置插入新的菜单项,其他的选项向下移。
GetSubMenu() – 获得子菜单指针。
GetMenuItemCount() – 得到菜单下的菜单项的个数。
AppendMenu() – 添加一个新菜单。
GetMenuString() – 获得指定菜单项的标记。
DeleteMenu() – 删除菜单。

1.0  静态创建菜单  (静态创建菜单要求先插入菜单资源,从得到资源ID     IDR_MENU2

CMenu menu;
	CMenu *pSubMenu;
	menu.LoadMenu(IDR_MENU2);
	pSubMenu = menu.GetSubMenu(0);
	CPoint point1;
	GetCursorPos(&point1);
	pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point1.x, point1.y, this);
	pSubMenu->DestroyMenu();
	menu.DestroyMenu();

2.0  动态创建菜单

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();

    // TODO: Add your control notification handler code here
    char buf[2];
    //获取顶级菜单
    CMenu* pMenu=GetMenu();
    //获取1级菜单
    CMenu* pFileMenu=pMenu->GetSubMenu(0);
    CMenu* pTestMenu=pMenu->GetSubMenu(1);
    //添加2级菜单
    if(pTestMenu->GetSafeHmenu()==NULL) 
        return;
    //添加一个2级弹出菜单,将"文件"菜单项作为该菜单的子菜单
    pTestMenu->AppendMenu(MF_POPUP,(UINT)pFileMenu->m_hMenu,"文件");
    //添加一个2级弹出菜单,该菜单的子菜单为空
    pTestMenu->AppendMenu(MF_POPUP,(UINT)pTestMenu->m_hMenu,"测试");
    //添加10个2级普通菜单
    for(UINT m_ID=1;m_ID<=10;m_ID++)
    {
        itoa(m_ID,buf,10);
        pTestMenu->AppendMenu(MF_SEPARATOR);
        pTestMenu->AppendMenu(
            MF_STRING,m_ID+ID_TESTMENU,"2级菜单"+CString(buf));
    }
 
    //添加n级菜单
    CMenu* pnMenu=pTestMenu->GetSubMenu(2);
    pnMenu->AppendMenu(MF_POPUP,(UINT)pnMenu->m_hMenu,"3级菜单");
    for(int i=0;i<5;i++)
    {
        pnMenu=pnMenu->GetSubMenu(0);
        if(pnMenu==NULL) return;
        itoa(i+4,buf,10);
        pnMenu->AppendMenu(
            MF_POPUP,(UINT)pnMenu->m_hMenu,buf + CString("级菜单"));
    }
    pnMenu->GetSubMenu(0)->AppendMenu(
        MF_STRING,ID_TESTMENU,"9级菜单");

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值