![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
MFC 写了一个函数更换菜单,为什么第二次点击出现断言错误
voidCMainFrame::OnToolbar1(){//TODO:在此添加命令处理程序代码//MessageBox("更换menu");SetMenu(NULL);...
void CMainFrame::OnToolbar1()
{
// TODO: 在此添加命令处理程序代码
//MessageBox("更换menu");
SetMenu(NULL); //执行之后,菜单栏消失了,而且菜单栏占用的位置也空了
m_menu.LoadMenu(IDR_MENU1);
SetMenu(&m_menu);
}
第一次按钮响应是正确的,再次点击之后,就出现了断言错误,请问什么原因? 展开
{
// TODO: 在此添加命令处理程序代码
//MessageBox("更换menu");
SetMenu(NULL); //执行之后,菜单栏消失了,而且菜单栏占用的位置也空了
m_menu.LoadMenu(IDR_MENU1);
SetMenu(&m_menu);
}
第一次按钮响应是正确的,再次点击之后,就出现了断言错误,请问什么原因? 展开
展开全部
原因:
由于 menu 是局部对象,所以最后必须加上 menu.Detach()方法。目的是将菜单对象与菜单句柄分离。
解决方法:
我亲自试了一下,其实你应该这样做:
SetMenu(NULL)替换成m_menu.Detach();如下:
void CMainFrame::OnToolbar1()
{
m_menu.Detach();//修改
m_menu.LoadMenu(IDR_MENU1);
SetMenu(&m_menu);
}
2. 也可以从新定义一个CMenu,如下:
void CMainFrame::OnToolbar1()
{
CMenu m_Menunew;
m_Menunew.LoadMenu(IDR_MENU1);
SetMenu(&m_Menunew);
}
希望能够帮助你解决问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询