菜单栏按钮置灰出现(mfc100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突

最近又碰到这个问题,说实话有点不长记性了,犯了同样的错误。一般读取位置发生访问冲突都是由于内存泄漏所引起的,但引起内存泄漏的情况非常多,先贴下我出现错误的代码

GetDlgItem(ID_GETIMAGE)->EnableWindow(FALSE);

没错,就这一行。平常习惯使用工具箱中的按钮,然后置灰就像上面的语句一样,什么问题也没有。

但这次我想要置灰菜单栏上的按钮,想当然的就按上面的方法写,ID_GETIMAGE是我菜单栏某按钮的ID。

于是乎就报出标题所示的错误了,调用堆栈一看,发现是上面这行代码出现问题。于是去搜索了一下菜单栏按钮怎么置灰,顺利解决问题。

下面贴上代码

	CMenu *menu = GetMenu();
	CMenu *submenu = menu->GetSubMenu(0);
	submenu->EnableMenuItem(ID_GETIMAGE,MF_DISABLED);

在其他函数的作用域中,再解除置灰。

	CMenu *menu = GetMenu();
	CMenu *submenu = menu->GetSubMenu(0);
	submenu->EnableMenuItem(ID_GETIMAGE,MF_ENABLED);

MF_DISABLED为置灰,MF_ENABLED为解除置灰,不清楚的可以去MSDN查看一下解释。

猜你喜欢

转载自blog.csdn.net/AlphaPoseidon/article/details/85263739