每当我们使用菜单的时候,面对着只有文字,是不是很枯燥?是不是也想贴张图上去秀一下?好,我们来实现它!
首先,如果我们创建一个主菜单和弹出菜单
HMENU MemBar,PopupMenu;
MemBar=CreateMenu();
PopupMenu=CreatePopupMenu();
这时候,我们就需要设定所添加菜单项的内容了,一个数据结构闪亮登场MENUITEMINFO,在MSDN上定义如下:
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 为该数据结构的大小,
fMask 为对该数据结构里成员的设置,可以有MIIM_BITMAP(对hbmpItem的设置)、MIIM_ID(对wID成员的设置)等等
fType 是对菜单选项类型的设置,可以是MFT_BITMAP、MFT_RIGHTORDER等等
fState 是对菜单项状态的设置,比如MFS_CHECKED、MFS_DISABLED等等
wID 只要我们在fMask上设置了MIIM_ID,就可以使用
还有一些在这里就不一一详述了,毕竟MSDN上可以很清楚的查阅
接着我们所关心的怎样在菜单上显示图片的问题,这时候,我们就需要为这些参数设定需要的值了
MENUITEMINFO menuItem={0};//初始化
menuItem.cbSize =sizeof(MENUITEMINFO); //大小
menuItem.fMask =MIIM_BITMAP | MIIM_STRING | MIIM_ID | MIIM_FTYPE;//指示所需要使用的成员
menuItem.fType =MFT_RIGHTORDER; //类型设置
menuItem.dwTypeData =L"我的菜单"; //菜单项的名字,就是像 “文件”、“帮助”
menuItem.cch =lstrlen(L"我的菜单"); //所显示的名字长度
menuItem.hbmpItem =LoadBitmap((HINSTANCE)GetModuleHandle(0), IDB_BITMAP_MY);//加载图片
menuItem.wID =IDM_MY; //菜单项的ID
然后,我们就需要插入这个菜单项了
InsertMenuItem(PopupMenu, NULL, NULL, &menuItem);
最后,设定我们所修改过的菜单
SetMenu(hWnd,MemBar);
大功告成!好了,试试吧!