MFC中CMenu类的问题
CreateaCMenuobjectonthestackframeasalocal,thencallCMenu’smemberfunctionstomanipulatet...
Create a CMenu object on the stack frame as a local, then call CMenu’s member functions to manipulate the new menu as needed. Next, call CWnd::SetMenu to set the menu to a window, followed immediately by a call to the CMenu object’s Detach member function. The CWnd::SetMenu member function sets the window’s menu to the new menu, causes the window to be redrawn to reflect the menu change, and also passes ownership of the menu to the window. The call to Detach detaches the HMENU from the CMenu object, so that when the local CMenu variable passes out of scope, the CMenu object destructor does not attempt to destroy a menu it no longer owns. The menu itself is automatically destroyed when the window is destroyed.
这段话表达的含义是什么?英文我倒是看得懂,就是不知道表达的什么意思?比如句柄和CMenu对象为什么要断开呢?析构和窗口销毁不是一个意思吗?里面的关系我捋不顺。谢谢各位大大回答! 展开
这段话表达的含义是什么?英文我倒是看得懂,就是不知道表达的什么意思?比如句柄和CMenu对象为什么要断开呢?析构和窗口销毁不是一个意思吗?里面的关系我捋不顺。谢谢各位大大回答! 展开
1个回答
展开全部
在本地的堆栈框架中创建一个CMenu对象,然后调用CMenu的成员函数来操纵所需的新菜单。接着,调用CWnd::SetMenu函数为窗口设置菜单。然后立即调用CMenu对象的Detach成员函数。CWnd::SetMenu成员函数将窗口的菜单设置为新菜单,这将导致在窗口刷新后将影响菜单的改变,同时也将菜单的拥有者传递给窗口。调用Detach函数将把HMENU从CMenu对象中分离出来,以便当本地的CMenu变量超出范围后,CMenu对象的构造函数将不会销毁不再拥有的菜单。当窗口销毁后,菜单自动销毁。
最主要的是成员函数Detach,如果你定义了一个局部的CMenu对象,建立了一个菜单,当这个对象的生命周期结束时析构函数就会销毁这个菜单(我们当然不希望这样),而Detach则能将菜单的句柄和CMenu对象断开,这样对象的生命周期结束时菜单也不会销毁,而是当这个窗口销毁时菜单才销毁、、
最主要的是成员函数Detach,如果你定义了一个局部的CMenu对象,建立了一个菜单,当这个对象的生命周期结束时析构函数就会销毁这个菜单(我们当然不希望这样),而Detach则能将菜单的句柄和CMenu对象断开,这样对象的生命周期结束时菜单也不会销毁,而是当这个窗口销毁时菜单才销毁、、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询