用SetMenuInfo 为菜单添加更多特性

用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_MENUDRAGWM_MENUGETOBJECT消息。

MNS_MODELESS :菜单是非模式的

MNS_NOCHECK :不显示CHECK标记

MNS_NOTIFYBYPOS 当产生一条菜单命令时,属主窗口不再收到WM_COMMAND而是收到WM_MENUCOMMAND

 

cyMax

菜单的最大高度,当菜单的高度超过这个值时将会在上下自动出现滚动栏。默认值(0)是整个屏幕的高度。

 

hbrBack

菜单的背景画刷

 

dwContectHelpID

上下文帮助ID,可以使用GetMenuContextHelpIdSetMenuContextHelpId获取/设置此值。

 

dwMenuData

应用程序自定义的值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(struct,command)