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 检索或设置hbmpCheckedhbmpUnchecked成员


         MIIM_DATA 检索或设置dwItemData成员 


         MIIM_ID 检索或设置wID成员


         MIIM_STATE 检索或设置fState成员


         MIIM_SUBMENU 检索或设置hSubMenu成员


         MIIM_TYPE 检索或设置fTypedwTypeData成员

 

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 指定那个菜单项是一个分隔条.一个分隔条菜单项显示为一条水平分隔线.

                                        dwTypeDatecch成员被忽视这个值在一个下拉菜单,子菜单,或快捷菜单才是有效的

 

     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前应设置了fMaskMIIM_STATE标记。

wID
           
应用程序定义的16位的值用来标识菜单项只有在设置了fMaskMIIM_ID时才能使用

 
hSubMenu
          
菜单项相关联的下拉菜单或子菜单的的句柄。如果菜单项不是一个打开的下拉菜单或子菜单,那这个成员是NULL, 该项只有在设置了fMaskMIIM_SUBMENU时才能使用

 

hbmpChecked
         
菜单项被选中时显示在一侧的位图的句柄.如果这个成员是NULL,使用一个默认的位图.如果为fType指定了

          MFT_RADIOCHECK,这个默认的图片是子弹一样的图片。否则它是复选标记,该项只有在设置了fMaskMIIM_CHECKMARKS时才能使用。

 hbmpUnchecked

菜单项没有被选中时显示在一侧的位图的句柄.如果这个成员是NULL,没有位图被使用,该项只有在设置了fMaskMIIM_CHECKMARKS时才能使用。

 

dwItemData 
             
应用程序定义的菜单项相关联的值,该项只有在设置了fMaskMIIM_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_MEASUREITEMWM_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 函数使用

posted on 2013-05-20 15:18  一个人的天空@  阅读(1820)  评论(0编辑  收藏  举报