msdn的奇怪说法,关于CMenu Detach
时间:2011-12-16
来源:互联网
CMenu Detach的问题。。。 刚才帮人改代码发现的:
MainFrame.cpp
OnCreate中:
SetMenu(NULL);
CMenu m_menu;
m_menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&m_menu);
m_menu.Detach();
m_menu.Detach(); //这句去掉的话,依然 菜单不会消失。。。。
按照msdn的说法,局部对象,如果不调用Detach,那么会导致 菜单消失。。。。。
以下是msdn的说法:
在本地的堆栈框架中创建一个CMenu对象,然后调用CMenu的成员函数来操纵所需的新菜单。接着,调用CWnd::SetMenu函数为窗口设置菜单。然后立即调用CMenu对象的Detach成员函数。CWnd::SetMenu成员函数将窗口的菜单设置为新菜单,这将导致在窗口刷新后将影响菜单的改变,同时也将菜单的拥有者传递给窗口。调用Detach函数将把HMENU从CMenu对象中分离出来,以便当本地的CMenu变量超出范围后,CMenu对象的构造函数将不会销毁不再拥有的菜单。当窗口销毁后,菜单自动销毁。
可是我 注释了Detach, 菜单依然不消失。。。
MainFrame.cpp
OnCreate中:
SetMenu(NULL);
CMenu m_menu;
m_menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&m_menu);
m_menu.Detach();
m_menu.Detach(); //这句去掉的话,依然 菜单不会消失。。。。
按照msdn的说法,局部对象,如果不调用Detach,那么会导致 菜单消失。。。。。
以下是msdn的说法:
在本地的堆栈框架中创建一个CMenu对象,然后调用CMenu的成员函数来操纵所需的新菜单。接着,调用CWnd::SetMenu函数为窗口设置菜单。然后立即调用CMenu对象的Detach成员函数。CWnd::SetMenu成员函数将窗口的菜单设置为新菜单,这将导致在窗口刷新后将影响菜单的改变,同时也将菜单的拥有者传递给窗口。调用Detach函数将把HMENU从CMenu对象中分离出来,以便当本地的CMenu变量超出范围后,CMenu对象的构造函数将不会销毁不再拥有的菜单。当窗口销毁后,菜单自动销毁。
可是我 注释了Detach, 菜单依然不消失。。。
作者: caddor2011 发布时间: 2011-12-16
up up
作者: caddor2011 发布时间: 2011-12-16
mark
作者: healer_kx 发布时间: 2011-12-16
怀疑原因已经找到了
SetMenu(NULL)只是隐藏,不是去掉菜单
所以 menu.LoadMenu后,是多一次句
SetMenu(&menu)后
菜单从隐藏到现实。。。。。。。。。。。。。。
menu消失后, 就消失了。。。
菜单 并不是 自定义的。。。
SetMenu(NULL)只是隐藏,不是去掉菜单
所以 menu.LoadMenu后,是多一次句
SetMenu(&menu)后
菜单从隐藏到现实。。。。。。。。。。。。。。
menu消失后, 就消失了。。。
菜单 并不是 自定义的。。。
引用 2 楼 healer_kx 的回复:
mark
mark
作者: caddor2011 发布时间: 2011-12-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28