CMenu

CObject
 └CMenu

CMenu类为Windows HMENU的封装类。它提供了成员函数以用于创建、追踪、更新及销毁菜单。
在本地的堆栈框架中创建一个CMenu对象,然后调用CMenu的成员函数来操纵所需的新菜单。接着,调用CWnd::SetMenu函数为窗口设置菜单。然后立即调用CMenu对象的Detach成员函数。CWnd::SetMenu成员函数将窗口的菜单设置为新菜单,这将导致在窗口刷新后将影响菜单的改变,同时也将菜单的拥有者传递给窗口。调用Detach函数将把HMENU从CMenu对象中分离出来,以便当本地的CMenu变量超出范围后,CMenu对象的构造函数将不会销毁不再拥有的菜单。当窗口销毁后,菜单自动销毁。
可以调用LoadMenuIndirect成员函数在内存中创建来自模板的菜单,不过通过调用LoadMenu创建的菜单更容易维护。并且这种菜单资源本身也可以由菜单编辑器创建或修改。
#include <afxwin.h>

请参阅:CObject

CMenu类的成员

数据成员
m_hMenu指定附加给CMenu对象的窗口菜单的句柄

构造函数
CMenu构造一个CMenu对象

初始化
Attach附加一个Windows菜单句柄给CMenu对象
Detach从CMenu对象中分离Windows菜单的句柄,并返回该句柄
FromHandle返回一个指向给定Windows菜单句柄的CMenu对象的指针
GetSafeHmenu返回由CMenu对象包含的m_hMenu值
DeleteTempMap删除由FromHandle成员函数创建的所有临时CMenu对象
CreateMenu创建一个空菜单,并将其附加给CMenu对象
CreatePopupMenu创建一个空的弹出菜单,并将其附加给CMenu对象
LoadMenu从可执行文件中装载菜单资源,并将其附加给CMenu对象
LoadMenuIndirect从内存的菜单模板中装载菜单,并将其附加给CMenu对象
DestroyMenu销毁附加给CMenu对象的菜单,并释放菜单占用的内存

菜单操作
DeleteMenu从菜单中删除指定的项。如果菜单项与弹出菜单相关联,那么将销毁弹出菜单的句柄,并释放它占用的内存
TrackPopupMenu在指定的位置显示浮动菜单,并跟踪弹出菜单的选择项

菜单项操作
AppendMenu在该菜单末尾添加新的菜单项
CheckMenuItem在弹出菜单的菜单项中放置或删除检测标记
CheckMenuRadioItem将单选钮放置在菜单项之前,或从组中所有的其它菜单项中删除单选钮
SetDefaultItem为指定的菜单设置缺省的菜单项
GetDefaultItem获取指定的菜单缺省的菜单项
EnableMenuItem使菜单项有效、无效或变灰
GetMenuItemCount决定弹出菜单或顶层菜单的项数
GetMenuItemID获取位于指定位置菜单项的菜单项标识
GetMenuState返回指定菜单项的状态或弹出菜单的项数
GetMenuString获取指定菜单项的标签
GetMenuItemInfo获取有关菜单项的信息
GetSubMenu获取指向弹出菜单的指针
InsertMenu在指定位置插入新菜单项,并顺次下移其它菜单项
ModifyMenu改变指定位置的已存在的菜单项
RemoveMenu从指定的菜单中删除与弹出菜单相关联的菜单项
SetMenuItemBitmaps将指定检测标记的位图与菜单项关联
GetMenuCountextHelpID获取与菜单关联的帮助文本的ID号
SetMenuCountextHelpID设置与菜单关联的帮助文本的ID号

可覆盖的函数
DrawItem通过框架来调用,其发生于拥有者菜单的可视部分有所改变
MeasureItem通过框架来调用,用于决定当创建了拥有者菜单时的菜单维数