+ -
当前位置:首页 → 问答吧 → msdn的奇怪说法,关于CMenu Detach

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, 菜单依然不消失。。。

作者: caddor2011   发布时间: 2011-12-16

up up

作者: caddor2011   发布时间: 2011-12-16

mark

作者: healer_kx   发布时间: 2011-12-16

怀疑原因已经找到了


SetMenu(NULL)只是隐藏,不是去掉菜单

所以 menu.LoadMenu后,是多一次句

SetMenu(&menu)后

菜单从隐藏到现实。。。。。。。。。。。。。。

menu消失后, 就消失了。。。

菜单 并不是 自定义的。。。



引用 2 楼 healer_kx 的回复:

mark

作者: caddor2011   发布时间: 2011-12-16