MENUITEMINFO 结构
MENUITEMINFO 结构包含一个菜单项的相关信息。
结构原型:
typedef struct tagMENUITEMINFO {
UINT cbSize;
UINT fMask;
UINT fType;
UINT fState;
UINT wID;
HMENU hSubMenu;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
ULONG_PTR dwItemData;
LPTSTR dwTypeData;
UINT cch;
HBITMAP hbmpItem;
} MENUITEMINFO, *LPMENUITEMINFO;
成员解析:
|
成员
|
含义
|
|
cbSize
|
1. 指向结构体的大小(字节为单位)
2. 调用者必须用 sizeof(MENUITEMINFO) 来为该成员赋值
|
|
fMask
|
可作为获取输出或者调用者设置成员。该成员可以是一个或多个以下值:
|
值
|
含义
|
|
MIIM_BITMAP
(0x00000080)
|
获取或设置 hbmpItem 成员
|
|
MIIM_CHECKMARKS
(0x00000008)
|
获取或设置 hbmpChecked 和 hbmpUnchecked 成员
|
|
MIIM_DATA
(0x00000020)
|
获取或设置 dwItemData 成员
|
|
MIIM_FTYPE
(0x00000100)
|
获取或设置 fType 成员
|
|
MIIM_ID
(0x00000002)
|
获取或设置 wID 成员
|
|
MIIM_STATE
(0x00000001)
|
获取或设置 fState 成员
|
|
MIIM_STRING
(0x00000040)
|
获取或设置 dwTypeData 成员
|
|
MIIM_SUBMENU
(0x00000004)
|
获取或设置 hSubMenu 成员
|
|
MIIM_TYPE
(0x00000010)
|
1. 获取或设置 fType 和 dwTypeData 成员
2. MIIM_TYPE 可以由 MIIM_BITMAP, MIIM_FTYPE 和 MIIM_STRING 代替
|
|
|
fType
|
菜单项的类型。该成员可以是一个或多个下列值:
MFT_BITMAP, MFT_SEPARATOR 和 MFT_STRING 这些值不能同时在一起使用。fType 成员只有当 fMask 为 MIIM_TYPE 时才被使用
|
值
|
含义
|
|
MFT_BITMAP
(0x00000004L)
|
1. 使用位图显示菜单项
2. 成员 dwTypeData 的低位字是位图的句柄,cch 成员被忽略
3. MFT_BITMAP 被 MIIM_BITMAP 和 hbmpItem 代替
|
|
MFT_MENUBARBREAK
(0x00000020L)
|
1. 将菜单项移动到新的一行(作为菜单栏)或者新的一列(作为下拉菜单,子菜单或快捷菜单)
2. 对于一个下拉菜单,子菜单或者快捷菜单,新列与旧列之间有一条竖线分隔
|
|
MFT_MENUBREAK
(0x00000040L)
|
1. 将菜单项移动到新的一行(作为菜单栏)或者新的一列(作为下拉菜单,子菜单或快捷菜单)
2. 对于一个下拉菜单,子菜单或者快捷菜单,新列与旧列之间有没有竖线分隔
|
|
MFT_OWNERDRAW
(0x00000100L)
|
1. 将绘制菜单项的任务分配给菜单项所在窗口
2. 窗口在菜单第一次显示之前收到 WM_MEASUREITEM 消息或者 WM_DRAWITEM 消息,无论何时都必须更新菜单项的显示
3. 如果该标识被指定,成员 dwTypeData 将包含一个程序定义的值
|
|
MFT_RADIOCHECK
(0x00000200L)
|
如果 hbmpChecked 成员是 NULL,则用单选按钮代替选中标记来实现选中的菜单项
|
|
MFT_RIGHTJUSTIFY
(0x00004000L)
|
1. 右对齐菜单项和后边所有的项
2. 仅当菜单项在菜单栏中时这个值才有效
|
|
MFT_RIGHTORDER
(0x00002000L)
|
1. 指定那个级联菜单右至左(默认的是左至右)
2. 这是支持习惯右至左的语言,例如阿拉伯和希伯来语
|
|
MFT_SEPARATOR
(0x00000800L)
|
1. 指定菜单项为分隔符
2. 菜单项分隔符显示水平分割线
3. 成员 dwTypeData 和 cch 被忽略
4. 该值在下拉菜单,子菜单和快捷菜单中才有效
|
|
MFT_STRING
(0x00000000L)
|
1. 用字符串显示菜单项
2. 成员 dwTypeData 指向一个空字符结尾的字符串,成员 cch 保存字符串的长度
3. MFT_STRING 被 MIIM_STRING 代替
|
|
|
fState
|
菜单项的状态。该成员可以是一个或多个下列值
当 fMask 设置为 MIIM_STATE 时使用 fState 成员
|
值
|
含义
|
|
MFS_CHECKED
(0x00000008L)
|
1. 选中菜单项
2. 查看更多的菜单选中的信息,参考 hbmpChecked 成员
|
|
MFS_DEFAULT
(0x00001000L)
|
1. 指定默认的菜单项
2. 一个菜单只能包含一个默认菜单项,该菜单项加粗显示
|
|
MFS_DISABLED
(0x00000003L)
|
1. 菜单项失效并灰化导致其无法被选中
2. 该标识等效于 GRAYED
|
|
MFS_ENABLED
(0x00000000L)
|
1. 菜单项变为有效,使其可以被选中
2. 这是默认的状态
|
|
MFS_GRAYED
(0x00000003L)
|
1. 菜单项失效并灰化,导致其无法被选中
2. 该标识等效于 MFS_DISABLED
|
|
MFS_HILITE
(0x00000080L)
|
菜单项高亮显示
|
|
MFS_UNCHECKED
(0x00000000L)
|
1. 取消菜单项的选中
2. 查看更多的关于清除菜单项选中信息,参考 hbmpChecked 成员
|
|
MFS_UNHILITE
(0x00000000L)
|
1. 去除菜单项高亮显示
2. 这是默认的状态
|
|
|
wID
|
1. 应用程序定义的辨识菜单项的值
2. 成员 fMask 为 MIIM_ID 时使用
|
|
hSubMenu
|
1. 指向菜单项所关联的下拉菜单或子菜单的句柄
2. 如果该菜单项不是打开下拉菜单或子菜单的菜单项,该成员则为 NULL
3. 成员 fMask 为 MIIM_SUBMENU 时使用
|
|
hbmpChecked
|
1. 如果菜单项被选中,则指向菜单项显示的图像的句柄
2. 如果成员值为 NULL 则使用一个默认的图像
3. 如果指定 MFT_RADIOCHECK 类型的值,默认图像是一个黑点;否则,是一个选中标记
4. 成员 fMask 为 MIIM_CHECKMARKS 时使用
|
|
hbmpUnchecked
|
1. 如果菜单项没有被选中,则指向菜单项显示的图像的句柄
2. 如果成员值为 NULL 则不用使用图像
3. 成员 fMask 为 MIIM_CHECKMARKS 时使用
|
|
dwItemData
|
1. 应用程序定义的与菜单项关联的值
2. 成员 fMask 为 MIIM_DATA 时使用
|
|
dwTypeData
|
1. 菜单项的内容
2. 该值的含义取决于 fType 的值,并且仅当 fMask 中设置了 MIIM_TYPE 标识时才被使用
3. 想要获取一个 MFT_STRING 类型的菜单项,首先要通过设置 dwTypeData 成员为 NULL 来取得字符串的长度,调用 GetMenuItemInfo 函数,cch+1 这个值就是我们需要的;然后分配 cch+1 大小的缓冲区,将 dwTypeData 成员设置为指向该缓冲区的指针,cch 自增,在此调用GetMenuItemInfo 函数利用字符串填充该缓冲区。如果获取到的菜单项是其他类型,调用GetMenuItemInfo 函数获得的成员 dwTypeData 将是 fType 指定类型的值
4. 当使用 SetMenuItemInfo 函数的时候,该成员必须包含一个有 fType 指定类型的值
5. 只有当 fMask 成员设置 MIIM_STRING 标识时,dwTypeData 成员才会被使用
|
|
cch
|
1. 包含菜单项文字的长度,字符为单位,当菜单项为 MFT_STRING 类型时收到该项菜单项信息
2. 仅当 fMask 成员包含 MIIM_TYPE 标识且其他标识为 0 时使用
3. 当菜单项通过调用 SetMenuItemInfo 函数设置时,cch 成员将被忽略
4. 注意,在调用 GetMenuItemInfo 函数之前,必须设置 cch 为 dwTypeData 成员指向的缓冲区的长度。如果获取到的菜单项为 MFT_STRING(由 fType 成员指定)类型,cch 成员将会指向菜单项文本的长度;如果获取到的菜单项是其他类型,cch 成员将会被设置为 0
5. cch 成员会在 fMask 成员包含 MIIM_STRING 时使用
|
|
hbmpItem
|
指向显示的图像句柄,或者可以是下表值中的一个:
当 fMask 成员包含 MIIM_BITMAP 标识时使用
|
值
|
含义
|
|
HBMMENU_CALLBACK
((HBITMAP) -1)
|
1. 菜单所属窗口绘制一幅位图
2. 应用程序必须处理 WM_MEASUREITEM 和 WM_DRAWITEM 消息
|
|
HBMMENU_MBAR_CLOSE
((HBITMAP) 5)
|
菜单栏的关闭按钮
|
|
HBMMENU_MBAR_CLOSE_D
((HBITMAP) 6)
|
菜单栏关闭按钮失效
|
|
HBMMENU_MBAR_MINIMIZE
((HBITMAP) 3)
|
菜单栏的最小化按钮
|
|
HBMMENU_MBAR_MINIMIZE_D
((HBITMAP) 7)
|
菜单栏的最小化按钮失效
|
|
HBMMENU_MBAR_RESTORE
((HBITMAP) 2)
|
菜单栏的恢复按钮
|
|
HBMMENU_POPUP_CLOSE
((HBITMAP) 8)
|
子菜单的关闭按钮
|
|
HBMMENU_POPUP_MAXIMIZE
((HBITMAP) 10)
|
子菜单的最大化按钮
|
|
HBMMENU_POPUP_MINIMIZE
((HBITMAP) 11)
|
子菜单的最小化按钮
|
|
HBMMENU_POPUP_RESTORE
((HBITMAP) 9)
|
子菜单的恢复按钮
|
|
HBMMENU_SYSTEM
((HBITMAP) 1)
|
系统图标或者成员dwItemData指定的图标
|
|
备注:
1. MENUITEMINFO 结构体用于 GetMenuItemInfo, InsertMenuItem 和 SetMenuItemInfo 函数。
2. 菜单可以支持文字、图像或者两者共存的方式显示菜单项。
需求:
|
Minimum supported client
|
Windows 2000 专业版 [仅桌面应用程序]
|
|
Minimum supported server
|
Windows 2000 服务器版 [仅桌面应用程序]
|
|
Header
|
Winuser.h (包含于 Windows.h)
|
|
Unicode and ANSI names
|
MENUITEMINFOW (Unicode) 和 MENUITEMINFOA (ANSI)
|