分清几个概念
<1>“主菜单” 和 “顶层菜单” 是一个意思。
<2>主菜单中的项目叫做 “弹出菜单” 或者 “子菜单”。
<3>弹出菜单的项目可以是另外一个弹出菜单。
<4>菜单的状态:启用,禁用,无效化,无效化跟前两者的区别是灰色显示文字。
(1)菜单消息
<1>WM_INITMENU
wParam, // handle to menu (HMENU)
lParam // not used
<2>WM_MENUSELECT
菜单项被选中的时候
wParam, // menu item (UINT) and flags (UINT)
lParam //handle to menu (HMENU)
其中
LOWORD(wParam) //被选中项目:菜单ID或者弹出式菜单句柄
HIWORD(wParam) //选择旗标
旗标是MF_GRAYED、MF_DISABLED、MF_CHECKED、MF_BITMAP、MF_POPUP、MF_HELP、MF_SYSMENU和MF_MOUSESELECT的集合。
<3>WM_INITMENUPOPUP
当下拉菜单被激活的时候就会发出这样的消息
WPARAM wParam, // handle to menu (HMENU)
LPARAM lParam // item position and indicator
LOWORD(lParam)代表的是菜单项索引,HIWORD(lParam)表示的是TRUE,或者FALSE,菜单是系统菜单的时候表示的TRUE,非系统菜单的时候表示的是FALSE。
<4>WM_COMMAND
表示使用者已经从菜单中选择了一个被启用的菜单项,
LOWORD (wParam):菜单命令ID
HIWORD(wParam):0
lParam:0
<5>WM_MENUCHAR
(2)菜单项中的字母的下划线
把字母前面加&字符,就可以出现字母下划线的效果,当用Alt键+ 字符,可以快捷的弹出子菜单,或者执行菜单项命令。
对应属性
(3)菜单项的选中和去选中状态
CheckMenuItem(hMenu, iSelection, MF_UNCHECKED) ;
CheckMenuItem(hMenu, iSelection, MF_CHECKED) ;
(4)关于Menu的函数
关于菜单的操作从大体方向上看无外乎增删改查四种操作。
4.1 HMENUCreateMenu(VOID);
4.2 BOOL AppendMenu( HMENU hMenu, // handle to menu
UINT uFlags, //menu-item options
UINT_PTR uIDNewItem, // identifier, menu, or submenu
LPCTSTR lpNewItem //menu-item content);
其中uFlags 可以是:
MF_BITMAP,MF_OWNERDRAW,MF_STRIN