MFC的SDI下控制菜单栏的置灰与恢复

在做一个项目,在程序初始化的时候,将系统的菜单栏的某几项置灰,当实现某处功能之后,再将这几个菜单项给恢复过来,没有弄过,总问别人似乎也不太好,只好自己动手了。baidu,google,msdn,三管齐下,试了两个小时之后,终于完成了这个功能,为了给后人铺路,特地在此记录。

 

1.首先是SDI模式,因此,系统生成的默认文件有TestView,TestDoc,MainFrm以及一个主类Test。首先,要想控制系统的初始化效果,需要添加Test的InitInstance()虚函数,在里面写菜单栏的置灰操作,代码如下:

 

  1.     CMenu* submenu = m_pMainWnd->GetMenu();
  2.     submenu->EnableMenuItem(1,MF_BYPOSITION | MF_ENABLED | MF_GRAYED);

用到了变量m_pMainWnd,这个是系统定义的窗口句柄;函数EnableMenuItem(),这里的含义是:是对菜单栏上第二个菜单项进行置灰操作,由于在系统的顶级菜单项没有ID,因此,我通过指定位置的方式进行。

 

2.在需要使菜单栏生效的地方,只要做相反的操作即可。代码如下:

  1.     CMenu* pMenu = AfxGetMainWnd()->GetMenu();
  2.     pMenu->EnableMenuItem(1,MF_BYPOSITION   |   MF_ENABLED );

这样就完成了菜单栏上菜单项的控制操作。

 

其实,原理真的很简单,只是自己以前没弄过,走了不少弯路,在TestView的OnCreate()函数下进行置灰操作,总是不行,真是贻笑大方了。

 

实践再次证明大学时候,陈建明教授的名言:办不到的事情,并不是不能办,只是我们的本领不够大,没有找到方法,终于可以安心睡觉了,哈哈

 

BTW:如果有人借鉴,一定要留言哦,哈哈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值