删除MFC单文档默认菜单栏的两种方法

MFC 删除单文档程序的菜单栏 当我们采用单文档模式下进行程序开发时,不一定总需要有菜单栏,那么怎么删除掉菜单栏呢?MFC库提供了API来设置菜单 SetMenu(HAND)。如果仅仅使用这个函数,那么你得到的结果是程序无法运行。原因是没有找到菜单。但是在程序中我们又没有发现设置菜单的部分。我们分析下程序,MFC界面在类CMainFrame中采用OnCreate()函数创建并且CMainFarm继承自类CFrameWnd。通过调试跟踪发现在CFramWnd中有create函数并且Create函数含有菜单参数。因此,我们假设MFC在创建界面 阅读详情

 


 新建一个MFC单文档程序,默认都有四个菜单栏:文件、编辑、视图和帮助。怎么把这四个菜单栏删除掉呢?有两种方法:

 


第一种方法:重载框架类的Create函数,具体代码如下:

 


view plaincopy to clipboardprint?
BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext)  
{  
    // TODO: 在此添加专用代码和/或调用基类  
//  return CFrameWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, // //pParentWnd, lpszMenuName, dwExStyle, 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);  
} 
BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext)
{
 // TODO: 在此添加专用代码和/或调用基类
// return CFrameWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, // //pParentWnd, lpszMenuName, dwExStyle, 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);
}
 

 

 

 

第二种方法:手动删除所有菜单项。具体是先定义一个删除所有菜单项的函数:

 


view plaincopy to clipboardprint?
/*! 
*  /brief 删除所有的菜单栏。 
* 
* 删除窗口的所有菜单栏。 
*  /return 无。 
*/ 
static void DelAllMenu(HMENU hMenu)  
{  
    //  首先删除多余的菜单项  
    int Menucount = GetMenuItemCount(hMenu);  
    for (int i = Menucount-1;i>-1;i--)  
    {  
        ::DeleteMenu(hMenu,i, MF_BYPOSITION);  
    }    
} 
/*!
*  /brief 删除所有的菜单栏。
*
* 删除窗口的所有菜单栏。
*  /return 无。
*/
static void DelAllMenu(HMENU hMenu)
{
 //  首先删除多余的菜单项
 int Menucount = GetMenuItemCount(hMenu);
 for (int i = Menucount-1;i>-1;i--)
 {
  ::DeleteMenu(hMenu,i, MF_BYPOSITION);
 } 
}

 


 然后在框架类的OnCreate函数调用这个函数,具体如下:

 


view plaincopy to clipboardprint?
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{  
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)  
        return -1;  
      
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP  
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||  
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))  
    {  
        TRACE0("未能创建工具栏/n");  
        return -1;      // 未能创建  
    }  
    if (!m_wndStatusBar.Create(this) ||  
        !m_wndStatusBar.SetIndicators(indicators,  
          sizeof(indicators)/sizeof(UINT)))  
    {  
        TRACE0("未能创建状态栏/n");  
        return -1;      // 未能创建  
    }  
    // TODO: 如果不需要工具栏可停靠,则删除这三行  
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
    EnableDocking(CBRS_ALIGN_ANY);  
    DockControlBar(&m_wndToolBar);  
    // 获取窗口的菜单句柄  
    CMenu *pMenu = GetMenu();  
    if (NULL!=pMenu)  
    {  
        DelAllMenu(pMenu->GetSafeHmenu());  
    }  
    return 0;  
} 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 {
  TRACE0("未能创建工具栏/n");
  return -1;      // 未能创建
 }
 if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,
    sizeof(indicators)/sizeof(UINT)))
 {
  TRACE0("未能创建状态栏/n");
  return -1;      // 未能创建
 }
 // TODO: 如果不需要工具栏可停靠,则删除这三行
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndToolBar);
 // 获取窗口的菜单句柄
 CMenu *pMenu = GetMenu();
 if (NULL!=pMenu)
 {
        DelAllMenu(pMenu->GetSafeHmenu());
 }
 return 0;
}
 

 

 


本文来自优快云博客,转载处:http://blog.youkuaiyun.com/clever101/archive/2010/03/18/5394535.aspx

MFC-动态添加和删除菜单栏 立即下载

相关推荐

如何去删除mfc默认菜单栏

删除mfc默认菜单栏删除mfc默认菜单栏删除mfc默认菜单栏删除mfc默认菜单栏删除mfc默认菜单栏删除mfc默认菜单栏删除mfc默认菜单栏

MFC单文档去掉默认的菜单、工具栏和状态栏

1,去掉工具栏和状态栏, 在  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   中注销掉相关的工具栏和状态栏语句,即可。 2,去掉菜单, 在 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 中,增加语句 cs.hMenu = NULL;//即 菜单句柄赋值为空

qqqren的博客 1万+

别再乱拖了!Godot 4.x 场景编辑器的7个隐藏操作技巧(附快捷键清单)

本文揭示了Godot 4.x场景编辑器的7个隐藏操作技巧,包括智能对齐、轴心点应用、多节点批量操作等,帮助开发者提升游戏开发效率。特别介绍了坐标系切换和自定义快捷键等实用功能,适用于处理复杂场景和团队协作。

weixin_29534421的博客 362

MFC删除默认创建的标题栏,菜单栏, 工具栏, 状态栏,边框

删除菜单栏 隐藏 m_wndMenuBar.ShowWindow(SW_HIDE); 注释创建菜单代码 //if (!m_wndMenuBar.Create(this)) //{ // TRACE0("未能创建菜单栏\n"); // return -1; // 未能创建 //} //m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS

D_daytime的博客 2233

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

高精地图语义分割标注

什么是语义分割?语义分割与目标检测的区别?语义分割的关键应用场景有哪些?高精地图语义分割标注的难点?

weixin_52509513的博客 1647

删除MFC单文档(多文档)默认菜单栏的两种方法

转:http://www.fengfly.com/plus/view-172975-1.html 新建一个MFC单文档程序,默认都有四个菜单栏:文件、编辑、视图和帮助。怎么把这四个菜单栏删除掉呢?有两种方法: 第一种方法:重载框架类的Create函数,具体代码如下: BOOL CMainFrame::Create(LPCTSTR lpszClassName

zhangmiaoping23的专栏 3896

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

删除MFC单文档默认菜单栏的两种方法 以及 区别 cwnd:oncreate() 和 cwnd:create()

删除MFC单文档默认菜单栏的两种方法 以及理解create和oncreate函数的用法!

keyouan2008的专栏 1515

Pytorch CIFAR10图像分类 EfficientNet v1篇

EfficientNet源自Google Brain的论文EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. 从标题也可以看出,这篇论文最主要的创新点是. 论文提出了,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从而提高网络的效果。EfficientNet在网络变大时效果提升明显,把精度上限进一步提升,成为了当前最强网络。

风信子的猫Redamancy的快乐星球 1852

100天精通Python(基础篇)——第4天:数据类型全解析_从基础到转换

数据类型全解析_从基础到转换

努力让自己发光,对的人才能迎着光而来 11万+

2012年03月31日

新建一个MFC单文档程序,默认都有四个菜单栏:文件、编辑、视图和帮助。怎么把这四个菜单栏删除掉呢?有两种方法: 第一种方法:重载框架类的Create函数,具体代码如下: BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& ...

weixin_30520015的博客 85

【WorkBuddy专栏27】WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆

WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆

AI人人懂 2708
上一篇: word中如何设置页码从任意页开始算起(图文版)
下一篇: 如何打开一个程序或创建一个进程
fairy_study
博客等级 码龄18年 29粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值