MFC 菜单栏的使用

主要介绍两种比较简单和常用的创建方法。

一、在资源视图中添加菜单资源,通过鼠标点击添加菜单项

    菜单栏设计好,以后就是添加了。介绍两种方法:

    1、很简单,鼠标右击想显示菜单栏的对话框属性,可以看到有一个menu的属性,点击就会出现你已经设计好的菜单栏的资源ID,选中就好了。点击运行,就可以看到菜单栏。

    2、首先定位到你想显示菜单栏对话框的OnInitDialog()函数处,在其函数体里添加如下代码:

       CMenu menu;
       menu.LoadMenuW(IDR_MENU1);//加载资源菜单栏,IDR_MENU1为资源视图里菜单的ID
       this->SetMenu(&menu);     //这个函数将当前菜单设为指定的菜单。

        //它使窗口被重画以反映菜单的变化。参数必须是指针型的。

       menu.Detach();// 窗口销毁时,局部变量menu同时销毁 

二、通过输入代码显示菜单栏

     要熟悉几个CMenu()的函数 

BOOL AppendMenu(hMenu hMenu,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);

hMenu:将被修改的菜单条、下拉式菜单、子菜单、或快捷菜单的句柄。

UFlags:控制新菜单项的外观和性能的标志。此参数可以是备注里所列值的组合。

UIDNewltem:指定新菜单项的标识符,或者当uFlags设置为MF_POPUP时,表示下拉式菜单或子菜单的句柄。

LpNewltem:指定新菜单项的内容。

 

BOOL InsertMenu(UINt uPosition,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);

uPosition:指定新菜单项将被插入其前面的菜单项,其含义由参数uFlagS决定。

uFlags:指定控制参数uPosition的解释的标志、新菜单项的内容、外观和性能。此参数必须为下列值之一和列于备注里的一个值的组合。  

uIDNewltem:指定新菜单项的标识符,或者当参数uFlags设置为MF_POPUP时,指定下拉式菜单或子菜单的句柄。

LpNewltem:指定新菜单项的内容。其含义依赖于参数UFlags是否包含标志MF_BITMAP,MF_OWNERDRAW或MF_STRING。

 

熟悉几个nFlags标识符

MF_CHECKED:命令旁显示默认复选标志

MF_UNCHECKED:清除命令旁的复选标志

MF_DISABLED:禁止此菜单命令,但是不变灰显示

MF_ENABLED:允许此菜单命令,恢复到正常状态

MF_GRAYED:禁止此菜单命令,变灰显示

MF_MENUBARBREAK:对于静态菜单,放到新行;对于弹出菜单,放到新栏 中,栏间有分隔线

MF_MENUBREAK:对于静态菜单,放到新行;对于弹出菜单,放到新栏,栏间无分隔线

MF_OWNERDRAW:指定该命令是自画式菜单命令

MF_POPUP:指定该菜单命令有一个关联的弹出式菜单,即标准菜单,点击是显示其子菜单

MF_SEPARATOR:画一条水平分隔线,只用于弹出式菜单。

MF_STRING:指定此菜单命令是一个字符串 ,一般菜单可以设置响应函数。

定位到你想显示菜单栏的对话框的OnInitDialog()函数处,在其函数体里添加如下代码:

      CMenu menu;
      menu.CreateMenu();
      menu.AppendMenuA(MF_POPUP,(UINT)menu.m_hMenu,"文件");

      menu.AppendMenuA(MF_POPUP,(UINT)menu.m_hMenu,"编辑");
      menu.InsertMenuA(2,MF_POPUP,(UINT)menu.m_hMenu,"视图");

     //此时在菜单的第三项插入菜单

     //AppendMenuA()和InsertMenu()区别是,前一个函数总是默认的在菜单栏后面

     //插入菜单,而第二个函数可以在任意位置通过改变uPosition
      menu.GetSubMenu(0)->AppendMenuA(MF_STRING,111,"打开");

     //给菜单栏的第一个菜单添加子菜单,菜单栏默认计数从0开始的

      
      menu.GetSubMenu(0)->AppendMenuA(MF_SEPARATOR);
      //在“打开”后面添加了一个分隔符,

      menu.GetSubMenu(0)->AppendMenuA(MF_STRING,111,"关闭");
      this->SetMenu(&menu);
      menu.Detach();

最后设置一般菜单项的响应函数:

    在资源头文件添加#define IDM_MM2 111;就可以将 menu.GetSubMenu(0)->AppendMenuA(MF_STRING,111,"关闭");改写为 menu.GetSubMenu(0)->AppendMenuA(MF_STRING,IDM_MM2,"关闭");

    在当前对话框的头文件里添加一个点击菜单的响应函数例如ONMM2();

    关联MFC 中用的是ON_COMMAND(IDM_MM2,ONMM2),注意这句话后面不加“;”的。

    例如下面的添加:

   BEGIN_MESSAGE_MAP(CasdDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP   

  //当我们是手动添加时,就在下面不要添加到上面语句当中,如果添加到上面可能会出现一些莫名的错误。
    ON_BN_CLICKED(IDC_BUTTON2, &CasdDlg::OnBnClickedButton2)
    ON_COMMAND(IDM_MM1,OnMM1)
END_MESSAGE_MAP()

    然后编写函数ONMM2()的代码就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值