在 MFC(Microsoft Foundation Classes)中,CMenu::SetMenuItemInfo 是 CMenu 类的一个公共方法,用于设置菜单项的信息。

以下是该方法的一般语法:
BOOL SetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL bByPos = FALSE);

参数说明:
  •  uItem:菜单项的标识符(ID)或相对位置,具体取决于 bByPos 参数。

  •  lpMenuItemInfo:指向 MENUITEMINFO 结构的指针,该结构包含了要设置的菜单项的信息。

  •  bByPos:一个布尔值,指示 uItem 参数的类型。如果为 TRUE,表示 uItem 是相对位置;如果为 FALSE,表示 uItem 是菜单项的 ID。


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;
} MENUITEMINFO, *LPMENUITEMINFO;

参数具体含义如下:
  •  cbSize:结构的大小,以字节为单位,用于指定结构的大小。

  •  fMask:用于指定 MENUITEMINFO 结构中哪些成员包含有效信息的标志。

  •  fType:菜单项的类型标志。

  •  fState:菜单项的状态标志。

  •  wID:菜单项的标识符(ID)。

  •  hSubMenu:菜单项包含的子菜单的句柄。

  •  hbmpChecked:选中状态下的位图句柄。

  •  hbmpUnchecked:未选中状态下的位图句柄。

  •  dwItemData:菜单项的自定义数据。

  •  dwTypeData:指向包含菜单项文本的缓冲区的指针。

  •  cch:dwTypeData 缓冲区的大小(字符数)。


返回值:
  •  如果成功设置菜单项的信息,则返回 TRUE;否则,返回 FALSE。


使用示例:
CMenu myMenu;
myMenu.LoadMenu(IDR_MYMENU);

MENUITEMINFO menuItemInfo;
menuItemInfo.cbSize = sizeof(MENUITEMINFO);
menuItemInfo.fMask = MIIM_BITMAP | MIIM_DATA | MIIM_ID | MIIM_STATE | MIIM_SUBMENU | MIIM_TYPE;
menuItemInfo.fType = MFT_STRING;
menuItemInfo.fState = MFS_ENABLED;
menuItemInfo.wID = IDM_MY_MENU_ITEM;
menuItemInfo.hSubMenu = NULL;
menuItemInfo.hbmpChecked = NULL;
menuItemInfo.hbmpUnchecked = NULL;
menuItemInfo.dwItemData = 0;
menuItemInfo.dwTypeData = _T("My Menu Item");
menuItemInfo.cch = _tcslen(menuItemInfo.dwTypeData);

myMenu.SetMenuItemInfo(IDM_MY_MENU_ITEM, &menuItemInfo, TRUE);

通过调用这个方法,你可以在运行时设置菜单项的各种信息,包括文本、状态、位图、子菜单等。


转载请注明出处:http://www.zyzy.cn/article/detail/18966/MFC/CMenu