用SetMenuInfo 为菜单添加更多特性
FAQ1:如何改变菜单的背景颜色
FAQ2:当鼠标离开菜单时,如何让菜单自动关闭
FAQ3:如何让菜单支持拖拽
FAQ4:如何设置菜单的最大高度(一但菜单超过这个高度时将自动出现滚动栏)
相关的消息:
WM_MENUDRAG
当用户拖拽菜单项时,菜单的属主窗口收到该消息。
参数:
wParam :指定被拖拽的菜单项位置
lParam : 包含该项的菜单句柄
返回值:
MND_CONTINUE 菜单仍然激活。如果鼠标被释放,它将被忽略
MND_ENDMENU 菜单结束
说明:
应用程序在响应该消息时可以调用DoDragDrop函数。
为了创建一个支持拖拽的菜单,要用MNS_DRAGDROP风格调用SetMenuInfo
关于SetMenuInfo函数的使用:
BOOL SetMenuInfo( HMENU hmenu , LPCMENUINFO lpcmi )
MENUINFO结构定义如下:
typedef struct tagMENUINFO {
DWORD cbSize;
DWORD fMask;
DWORD dwStyle;
UINT cyMax;
HBRUSH hbrBack;
DWORD dwContextHelpID;
ULONG_PTR dwMenuData;
} MENUINFO, FAR *LPMENUINFO;
typedef MENUINFO CONST FAR *LPCMENUINFO;
fMask 可以是以下值的组合:
MIM_APPLYTOSUBMENUS :仅SetMenuInfo用到这个标志,表示设置将对菜单的所有子菜单有效,GetMenuInfo忽略该标志;
MIM_BACKGROUND :允许获取/设置 hbrBack成员;
MIM_HELPID : 允许获取/设置dwContextHelpID成员;
MIM_MAXHEIGHT :允许获取/设置cyMax成员;
MIM_MENUDATA : 允许获取/设置dwMenuData成员;
MIM_STYLE : 允许获取/设置dwStyle成员;
dwStyle
菜单的风格,可以是以下值的组合:
MNS_AUTODISMISS :当鼠标在菜单外停留大约10秒钟后菜单自动结束
MNS_CHECKORBMP 在相同的位置留给CHECK标记和位图。如果绘制了CHECK标记,就不绘制位图。
MNS_DRAGDROP :菜单项可以是OLE DROP目标或DRAG源。菜单属主会收到WM_MENUDRAG和WM_MENUGETOBJECT消息。
MNS_MODELESS :菜单是非模式的
MNS_NOCHECK :不显示CHECK标记
MNS_NOTIFYBYPOS : 当产生一条菜单命令时,属主窗口不再收到WM_COMMAND而是收到WM_MENUCOMMAND
cyMax
菜单的最大高度,当菜单的高度超过这个值时将会在上下自动出现滚动栏。默认值(0)是整个屏幕的高度。
hbrBack
菜单的背景画刷
dwContectHelpID
上下文帮助ID,可以使用GetMenuContextHelpId和SetMenuContextHelpId获取/设置此值。
dwMenuData
应用程序自定义的值