10.2菜单
当使用者选择一个菜单项时,Windows给您的程序发送包含该ID的WM_COMMAND消息。
菜单概念
窗口的菜单列紧接在标题列的下方显示,这个菜单列有时被称为「主菜单」或「顶层菜单」。
菜单结构
顶层菜单有一个菜单句柄,在顶层菜单中的每一个弹出式菜单也有它自己的菜单句柄。
系统菜单(也是一个弹出式菜单)也有菜单句柄。
菜单中的每一项都有三个特性
1.菜单中显示什么,它可以是字符串或位图
2.第二个特性是WM_COMMAND消息中Windows发送给程序的菜单ID,或者是在使用者选择
菜单项时Windows显示的弹出式菜单的句柄。
3.是菜单项的属性,包括是否被禁用、无效化或被选中。
定义菜单
为菜单中的项目键入文字时,可以键入一个「&」符号,指出后面一个字符在Windows显示菜单时要加底线。
Checked选项在菜单项边上放置一个选中标记。Separator选项在弹出式菜单上产生一个分栏的横线。
Grayed选项,菜单项是否启动的时候灰掉。 ID值是Windows发送给窗口消息处理程序中菜单消息中的数值。
在菜单中ID值应该是唯一的。按照惯例,我使用以IDM( 「ID for a Menu」 )开头的标识符。
在程序中引用菜单
如果在资源描述档中为菜单使用了名称,叙述如下:hMenu = LoadMenu (hInstance, TEXT ("MyMenu")) ;
如果使用了数值,那么LoadMenu呼叫采用如下的形式:hMenu = LoadMenu (hInstance, MAKEINTRESOURCE (ID_MENU)) ; 可以将这个菜单句柄作为CreateWindow的第九个参数
窗口被建立后再给窗口指定一个菜单SetMenu (hwnd, hMenu);
当窗口被清除时,与窗口相关的所有菜单都将被清除。
菜单和消息
WM_INITMENU这一类的消息,wParam值是您的主菜单句柄.WM_MENUSELECT是一个菜单追踪消息
HIWORD (wParam):选择旗标. wParam的高字组中的「选择旗标」可以是下列这些旗标的组合:MF_GRAYED、MF_DISABLED、MF_CHECKED、MF_BITMAP、MF_POPUP、MF_HELP、MF_SYSMENU和MF_MOUSESELECT。
当Windows准备显示一个弹出式菜单时,它给窗口消息处理程序发送一个WM_INITMENUPOPUP消息
最重要的菜单消息是WM_COMMAND, 它表示使用者已经从菜单中选中了一个被启用的菜单项。
WM_MENUCHAR:如果使用者按下Alt和一个与菜单项不匹配的字符时或者在显示弹出式菜单而使用者按下一个与弹出式菜
单里的项目不匹配的字符键时。 Windows会把这个消息发送到窗口消息处理程序。
MENUDEMO.rc