MFC 菜单栏的使用

来源:互联网 发布:淘宝哪家包包好看 编辑:程序博客网 时间:2024/06/05 07:43

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

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

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

    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()的代码就可以了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大连船员体检眼力不合格怎么办 禁行如果通过了怎么办 钻戒的戒圈磨损怎么办 多肉的肉掉了怎么办 电脑自带鼠标动不了怎么办 笔记本电脑自带鼠标动不了怎么办 包包弹簧扣松了怎么办 耳钉氧化成黑色怎么办 想买点小股票玩玩要怎么办 玩具子弹打到眼睛怎么办 玩具汽车遥控器码乱了怎么办 索尼A7屏幕花了怎么办? 汽车冷冻器坏了怎么办 sim卡损坏怎么办 补卡 异或门一个输入怎么办 迷你世界加不了好友怎么办 电脑软件显示无效应用程序怎么办 美的滚筒洗衣机打不开门怎么办 手机存储卡坏了怎么办 回南天地板潮湿怎么办 lg滚筒洗衣机门打不开怎么办 西门子滚桶洗衣机门打不开怎么办 洗衣机离合器螺丝卸不动怎么办 门锁保险栓坏了怎么办 小车电瓶没电了怎么办 重装机兵战车底盘坏了怎么办 父亲沉迷安利十年该怎么办 脚的大脚骨痛怎么办 自考准考证号忘记了怎么办 有桌子老师不出马怎么办 电商遇到职业打假人怎么办 超市遇到职业打假人怎么办 阿里巴巴碰到职业打假人怎么办 商家遇到职业打假人怎么办 买过期食品不赔怎么办 淘宝卖假货遇到打假师怎么办 网店遇到职业打假人怎么办 职业打假师把我起诉法院怎么办 被职业打假举报了怎么办 车档杆拉不动显示不在p档怎么办 宜人贷还不起了怎么办