VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法

VS2010 MFC 用默认设置生成的应用程序GetMenu返回空值 最近学习菜单,遇见一个问题 阅读详情

解决方法1: //来源:http://www.cnblogs.com/yuzhoufeng/archive/2011/12/11/2284200.html

今天学习VC++ 2010 MFC单文档应用程序中动态添加菜单,下面是代码部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
int  CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
CMenu m_Menu;
m_Menu.CreatePopupMenu();
ASSERT(m_Menu.GetSafeHmenu());
GetMenu()->AppendMenuW(MF_POPUP,( UINT )m_Menu.m_hMenu,_T( "文件" ));
m_Menu.AppendMenuW(MF_STRING,111,_T( "新建" ));
m_Menu.AppendMenuW(MF_STRING,112,_T( "打开" ));
m_Menu.Detach();
return  0;
}

  但是GetMenu()返回始终未NULL,无法获取菜单指针,网上查了下,说VS2010建的SDI/MDI与之前的不一样,是类似BCG的一些东西,所以用之前的方法GetMenu()得到CMenu是NULL或者无效。

【解决方案】:

  在CMainFrame类中找到CMFCMenuBar m_wndMenuBar;这个成员变量,将跟它相关的代码注释掉的话,然后运行,OK。

 

解决方法2: //来源:http://blog.youkuaiyun.com/grasshopperwarbler/article/details/6337754

这里说的是SDI的情况,如果在vs2010里面按着默认选项创建一个单文档工程(Single Document).

问题分析:

出错的代码如下 :
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);
加在CMainFrame::Oncreate()里面,整个程序就会崩溃,出现的异常类似如此:Unhandled exception at 0x58aba12c (mfc100ud.dll) in menu1.exe: 0xC0000005: Access violation reading location 0x00000004.

出错的原因是,在执行这段代码的时候,Menu并没有生成。因为采用断点来检测的话,此时的GetMenu返回值不是一个正常的地址。为什么会这样呢?

后来才发现visual studio2010里默认采用的是Menu格式在OnCreate()末端并未生成。vs2010默认采用的是增加了扩展功能的Menu,所以调用GetMenu()会得到空指针。

解决方法:

最原始的解决方法是采用回原来的Menu格式。就在新建工程的一个对话框中选择回原始的菜单模式即可,如下图:

[整理]VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 - 钰央 - 计算机视觉·图像处理

不过经过更改后编译会出现两个错误,是关于:

ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)

两句代码是关于打印功能的。如果不涉及这方面的功能,可以直接把这两句话注释掉。(也可以在创建项目时把“打印预览”去掉)

然后在CMainFrame::OnCreate()末尾加上GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);
程序就可以顺利通过了。

Cursor+Playwright MCP实战:如何用自然语言一键生成UI自动化测试脚本 本文探讨了如何利用Cursor与Playwright MCP实现自然语言驱动的UI自动化测试脚本生成。通过智能IDE与浏览器自动化协议的结合,开发者可以高效创建稳定的测试脚本,显著提升测试效率与维护性。重点介绍了MCP架构的优势、项目结构最佳实践及团队协作规范,为自动化测试带来革命性改进。 阅读详情

相关推荐

基于live555实现一个rtsp客户端程序

本文介绍了基于live555流媒体库实现的RTSP客户端程序,能够通过RTSP地址获取H.264/H.265裸码流或TS流数据并存入本地文件。详细阐述了使用CLion搭建工程的代码架构和CMake配置,重点分析了TS流解析模块的实现,包括TS包结构解析、PES包提取和ES裸流获取的完整流程。文章提供了TS/PES/ES三种数据包的协议说明,并给出了从TS流中提取视频帧的具体方法,最后附有工程代码下载链接。该方案实现了RTSP流媒体接收、解析和存储的完整功能链。

kk821521286的博客 789

MFC VS2010、VS2012中GetMenu()问题解决(续)

问题:GetMenu函数没有返回菜单栏指针,编程环境是visual studio 2010.(在VC6.0没有这问题) 我用MFC新建的工程,在CMainFrame类的OnCreate函数添加如下代码: GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED); 编译正确,但是调试的时

h_wlyfw的专栏 5279

PSM倾向匹配详细步骤和程序

目录1.安装psmatch2统计包。2.数据准备3.数据分析及命令解读4.结果解读4.1模型拟合结果,此处无太多实际意义。4.2试验组可匹配的观测概览,按照命令中设定的匹配规则,试验组有8例患者未能匹配到合适对照。4.3结果解读的重点应该是对stata新生成的中间变量的解读。4.4均衡性检验结果4.5匹配结果的图示化5.Stata命令汇总最后留下两个问题给大家思考:题目 试验设计中,匹配的目的在于确保干预效应估计是建立在可比个体之间的不同结果的基础上。最简单的匹配方式是将干预组和对照组中协变量值相同的两个个

平平淡淡,戒急用忍,一生学闭嘴。 5万+

Cmenu类方法判断弹出按钮选中状态并做相应处理

此方法实现每次点击菜单项时,使其选中的菜单项,打√标记,并设置到Disable状态. 在菜单项的响应函数中调用,形参传递对应的ID即可!   CMenu* pSubMenu=NULL; UINT Sub_IndexMax=0; pSubMenu = CMenu::FromHandle(GetSkinMenu(m_pMainWnd->m_hWnd))->GetSubMenu(1); S

shuaiqidiudiu的专栏 2052

单片机如何获得5V电源

在单片机实际设计中,有时会需要在电路中用到5V电压源,那么这个常见的实验需求有哪些办法解决呢,我综合网上的资料,概括一下: 1)USB    这种方法在我们直接将单片机板与电脑连接调试的时候,算是简单又方便的办法了,但如果我所要得到的成品不直接连接外部的器件,这就得舍弃。     常用的,USB/5V插头线,这是一种专门的电源线,一端是USB通用接口,可以直插USB端口,另一端是内正外负电压

Echo_Ana的博客 3万+

ros_control硬件接口实战:从零构建机器人控制框架

本文详细介绍了ros_control硬件接口在机器人控制框架中的核心作用与实践方法。通过解析硬件接口类型、实现标准接口、构建主控制循环及自定义功能扩展,帮助开发者从零构建高效的机器人控制系统,提升硬件与ROS的协同效率。

lstm7chronicler的博客 500

VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法

对于前面问题的分析:来源于http://blog.163.com/yuyang_tech/blog/static/216050083201211144120401/ 解决方法1: //来源:http://www.cnblogs.com/yuzhoufeng/archive/2011/12/11/2284200.html 今天学习VC++ 2010 MFC单文档应用程序中动态添加菜单,...

awfp80781的博客 435

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1766

VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法

VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法

dearbaba_11的博客 165

独立游戏开发者必看:STEAM税务信息更新全流程(附中国区避坑指南)

本文为独立游戏开发者详细解析了Steam税务信息更新的全流程,重点针对中国区开发者提供了避坑指南。文章深入解释了W-8BEN表格的填写要点,并指导如何准备个人所得税纳税记录和身份证等核心证明文件,以确保顺利通过审核,避免收入被预扣税款。

tcp8optimizer的博客 1292

Moltbot 超详细安装使用教程(初学者版)

你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。

weixin_51040479的博客 2015

VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常(2)

经过(1)的菜单标记出现中断后,验证给菜单添加图形标记,按照(1)的方法处理,并没有出现问题,可以正常运行,菜单有图形标记 《Visual C++开发权威指南.尹成》P120 代码如下: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ...... CMenu m_Menu; m_Menu.CreatePopupM

qq_34655081的博客 818

npm报错 npm WARN deprecated....的问题解决方式

报错 :npm WARN deprecated … 现象:无法进行有效的vue项目的部署以及npm install 命令的执行。 原因一:版本问题 说明:由于npm的版本过低或者过高导致的报错 检查版本: npm -v 如果版本是比较旧的,或者是最新的,这里可以进行对npm的更新和回退。 更新npm版本: npm updated -d 查看可以更新的版本 npm install -g npm 默认安装最新版本 安装回退指定的版本: npm updated -d 查看所有的版本 npm -g i.

任聪聪的博客 16万+

Visual Studio 2010中GetMenu()和GetSubMenu(0)引发异常的一个简单解决方法

这里说的是SDI的情况,如果在vs2010里面按着默认选项创建一个单文档工程,       然后想做一件事情 ,就是把一个默认的子菜单的一项钩选,     代码如下 : GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED); 加在CMainFrame::Oncrea

坚持不懈 持续进步 988

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mfc多文档解决GetMenu()->GetSubMenu(0)为null,报错问题

mfc多文档解决GetMenu()->GetSubMenu(0)为null,报错问题 将 CMenu* menu; menu = GetMenu()->GetSubMenu(0); CMenu* childMenu = menu->GetSubMenu(8);//装载自定义的菜单 改为 CMenu pMenu = CMenu::FromHandle(m_wndMenuBar.GetHMenu()); CMenu menu; menu = pMenu->GetSubMenu(0); C

阿杰的博客 1112

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SkinMagic使用后按钮加自定义图标或菜单GetMneu返回NULL的解决方法

我们在使用SkinMagic类美化窗口之后,在程序的InitInstance函数中会加入了SetDialogSkin函数, 但我们在使用时却发现,我们添加的菜单或者按钮图标无法正常显示!   一.出现这样的问题,需要修改以下位置(基于对话框的编程): 1.删除InitInstance函数中加入的SetDialogSkin函数, 2.在需要显示图标和按钮的主对话框的OnInitDialog

shuaiqidiudiu的专栏 1484

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VS2010返回失败,GetMenu()->GetSubMenu(0)

根据孙鑫的MFC教程,lesson-6,获得菜单栏 VC6.0 用到一个:GetMenu()->GetSubMenu(0)->CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED); VS2010,到这里就崩溃,因为GetMenu()得到的指针为空。 根据网上找到的解决方案: 方案一: 把Mainfrm.h mainfrm.cpp中的关...

优快云的博客 516

GetMenu()->GetSubMenu(0) 致使程序崩溃的解决方法

如果我们使用孙鑫的《VC++ 深入详解》,学到菜单这一章,就可以发现有这样一段程序。 int CMainFrame::OnCreate(LPCREATESTRUCT)  函数中有下面这句: GetMenu() -> GetSubMenu(0) -> CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED); 语句的功能是设置 【文件】菜单下【新

fanyun7654的专栏 2623
上一篇: Opencv中的ROI介绍
下一篇: 如何提高编程能力
devil_pull
博客等级 码龄15年 12粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值