MFC 删除单文档程序的菜单栏

当我们采用单文档模式下进行程序开发时,不一定总需要有菜单栏,那么怎么删除掉菜单栏呢?MFC库提供了API来设置菜单 SetMenu(HAND)。如果仅仅使用这个函数,那么你得到的结果是程序无法运行。原因是没有找到菜单。但是在程序中我们又没有发现设置菜单的部分。

我们分析下程序,MFC界面在类CMainFrame中采用OnCreate()函数创建并且CMainFarm继承自类CFrameWnd。通过调试跟踪发现在CFramWnd中有create函数并且Create函数含有菜单参数。因此,我们假设MFC在创建界面时动态隐式调用了Create函数并且将菜单传递给该参数。

因此,我们需要在CMainFrame类中继承并且重新定义Create函数。具体如下:

BOOL CMainFrame::Create( LPCTSTR lpszClassName,
       LPCTSTR lpszWindowName,
       DWORD dwStyle ,
       const RECT& rect ,
       CWnd* pParentWnd ,
       LPCTSTR lpszMenuName ,
       DWORD dwExStyle ,
       CCreateContext* pContext)
{
 HMENU nIDorHMenu = NULL;
  return CFrameWnd::CreateEx( dwExStyle,lpszClassName,lpszWindowName,dwStyle,
         rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
         pParentWnd->GetSafeHwnd(),
         nIDorHMenu,
         (LPVOID)pContext);
}

在CMainFrame中继承类后,在Oncreate()函数中调用SetMenu(NULL)程序就可以正常运行,并且没有菜单栏了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值