MENUITEMINFO结构包含关于一个菜单项信息
typedef struct tagMENUITEMINFO {
UINT cbSize;
UINT fMask;
UINT fType;
UINT fState;
UINT wID;
HMENU hSubMenu;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
DWORD dwItemData;
LPTSTR dwTypeData;
UINT cch;
HBITMAP hbmpItem;
} MENUITEMINFO, FAR *LPMENUITEMINFO;
成员
cbSize
结构的大小,字节
fMask
检索或设置,这个成员可以使用一个或多个以下值.
MIIM_CHECKMARKS 检索或设置hbmpChecked和hbmpUnchecked成员
MIIM_DATA 检索或设置dwItemData成员
MIIM_ID 检索或设置wID成员
MIIM_STATE 检索或设置fState成员
MIIM_SUBMENU 检索或设置hSubMenu成员
MIIM_TYPE 检索或设置fType和dwTypeData成员
fType
菜单项类型.这个成员可以使用一个或多个这些值
MFT_BITMAP 使用一个位图显示菜单项.dwTypeData低位字是该位图的句柄.并且cch被忽视.
MFT_MENUBARBREAK 放置菜单项在新行上(适用于菜单栏)或在新列内(适用于下拉菜单,子菜单,快捷菜单).对于下拉菜单,子菜单,或快捷菜单,用垂直线分隔以前的列和新的列
MFT_MENUBREAK 放置菜单项在新行上(适用于菜单栏)或在新列内(适用于下拉菜单,子菜单,快捷菜单).对于下拉菜单,子菜单,或快捷菜单,这个列不被垂直线分开
MFT_OWNERDRAW 分配责任到那个窗体菜单绘制自己的菜单项.在菜单第一次显示之前窗体收到一条WM_MEASUREITEM消息,和菜单项必须更新时收到一条WM_DRAWITEM消息。如果该值被指定,则dwTypeData成员包含一个应用程序定义的值。
MFT_RADIOCHECK 如果hbmpChecked成员是NULL ,显示选中的菜单项使用一个单选按钮来代替一个复选标记
MFT_RIGHTJUSTIFY 向右对齐菜单项和所有后来的项,如果菜单项在菜单栏内这个值才是唯一有效的
MFT_RIGHTORDER Windows 95, Windows NT 5.0,和随后的:指定那个级联菜单从右至左(默认的是左
至右).这是支持习惯右至左的语言,比喻阿拉伯语的和希伯来语。
MFT_SEPARATOR 指定那个菜单项是一个分隔条.一个分隔条菜单项显示为一条水平分隔线.
dwTypeDate和cch成员被忽视. 这个值在一个下拉菜单,子菜单,或快捷菜单才是有效的
MFT_STRING 用一个文本字符串显示菜单项.dwTypeData成员指示一个以NULL结尾的字符串,并且cch
成员是字符串的长度
MFT_BITMAP, MFT_SEPARATOR, and MFT_STRING 任何一个值都不能相互组合使用,只有在设置了fMask为
MIIM_TYPE时才能使用fType。
fState
菜单项的状态.这个成员可以是一个或多个的这些值:
MFS_CHECKED 复选的菜单项.至于更多关于菜单项选中的信息,看hbmpChecked成员.
MFS_DEFAULT 指定默认的菜单项。一个菜单仅仅只可以包含一个默认的菜单项,用粗体显示。
MFS_DISABLED菜单项无效并变灰使得它不能被选择.等效于MFS_GRAYED.
MFS_ENABLED 激活菜单项使它可以被选择。这是默认的状态.
MFS_GRAYED菜单项无效并变灰使得它不能被选择.等效于MFS_DISABLED.
MFS_HILITE 菜单项高亮显示。
MFS_UNCHECKED 取消复选菜单项.至于更多关于菜单项unchecked信息,看hbmpUnchecked成员变量
MFS_UNHILITE 移除菜单项的高亮显示,这是默认状态.
使用fState前应设置了fMask的MIIM_STATE标记。
wID
应用程序定义的16位的值用来标识菜单项, 只有在设置了fMask的MIIM_ID时才能使用
hSubMenu
菜单项相关联的下拉菜单或子菜单的的句柄。如果菜单项不是一个打开的下拉菜单或子菜单,那这个成员是NULL, 该项只有在设置了fMask的MIIM_SUBMENU时才能使用
hbmpChecked
菜单项被选中时显示在一侧的位图的句柄.如果这个成员是NULL,使用一个默认的位图.如果为fType指定了
MFT_RADIOCHECK,这个默认的图片是子弹一样的图片。否则它是复选标记,该项只有在设置了fMask的MIIM_CHECKMARKS时才能使用。
hbmpUnchecked
菜单项没有被选中时显示在一侧的位图的句柄.如果这个成员是NULL,没有位图被使用,该项只有在设置了fMask为MIIM_CHECKMARKS时才能使用。
dwItemData
应用程序定义的菜单项相关联的值,该项只有在设置了fMask的MIIM_DATA时才能使用。
dwTypeData
菜单项的内容,它的具体意义依赖于fTYPE值,并且它只能在fMask设置了MIIM_TYPE标记时才能被使用;
要检索一个MFT_STRING类型的菜单项,首先要得到该字符串的大小,通过设置MENUITEMINFO结构的dwTypeData值为空并调用函数GetMenuItemInfo得到的cch值就是字符串的大小,然后分配一个字符串大小的缓冲区,把指向缓冲区的指针存赋给dwTypeData并再次调用GetMenuItemInfo函数用字符串来填充缓冲区。如果检索其它类型的菜单项,GetMenuItemInfo函数会赋给dwTypeData一个类型由fType成员指定的值。当使用SetMenuItemInfo函数时,dwTypeData必须包含一个类型由fType成员指定的值,该项只有在设置了fMask成员的MIIM_STRING标记时才能使用。
cch
当检索一个MFT_STRING类型菜单项的信息时,为菜单项文本(TCHAR)的长度。这个成员只能在当设置了fMask成员的MIIM_TYPE标记时使用,否则为0。当菜单项的内容由函数SetMenuItemInfo设置时,这个成员将被忽略。
在调用GetMenuItemInfo之前,程序必须由dwTypeData设置该成员为缓冲区的长度。 如果要检索的菜单项类型为MFT_STRING(由fType成员指定),这时GetMenuItemInfo设置cch为被检索字符串的长度。如果检索的是其它类型的菜单项,GetMenuItemInfo设置cch的值为0。
该项只有在设置了fMask成员的MIIM_STRING标记时才能使用。
hbmpItem
菜单项上显示位图的句柄,它可能是以下标记中的一个,该项只有在设置了fMask成员的MIIM_BITMAP标记时才能使用。
HBMMENU_CALLBACK
一个由拥有该菜单的窗口绘制的位图。应用程序必须处理WM_MEASUREITEM和WM_DRAWITEM消息。
HBMMENU_MBAR_CLOSE
菜单栏的关闭按钮
HBMMENU_MBAR_CLOSE_D
禁用菜单栏的关闭按钮
HBMMENU_MBAR_MINIMIZE
菜单栏的最小化按钮
HBMMENU_MBAR_MINIMIZE_D
禁用菜单栏的最小化按钮
HBMMENU_MBAR_RESTORE
菜单栏的还原按钮
HBMMENU_POPUP_CLOSE
子菜单的关闭按钮
HBMMENU_POPUP_MAXIMIZE
子菜单的最大化按钮
HBMMENU_POPUP_MINIMIZE
子菜单的最小化按钮
HBMMENU_POPUP_RESTORE
子菜单的还原按钮
HBMMENU_SYSTEM
Windows图标或是在dwItemData中由窗口指定的图标。
备注:
一个菜单可以用用文本和位图两种方式中的一种方式显示菜单项,而不能同时使用。
MENUITEMINFO 结构体可以被GetMenuItemInfo, InsertMenuItem, and SetMenuItemInfo 函数使用