资源——菜单(Menu)与快捷键(Keyboard Accelerators)

来源:互联网 发布:windows7 apache下载 编辑:程序博客网 时间:2024/06/11 01:17

创建载入菜单

wndcls.lpszMenuName=MAKEINTRESOURCE(IDM_MENU),也可用LoadMenu(hInstance,MAKEINTreSOURCE(IDM_MENU)),后者要在CreateWindow中传入菜单句柄或者在窗口创建后调用SetMenu(hwnd,hMenu)。挂在窗口上的菜单在结束时都会被销毁,所有没有挂在窗口的菜单在程序结束前都要用DestroyMenu销毁。

 

菜单消息

WM_INITMENU:在选择菜单前发送的消息,一般不做修改。wParam是主菜单句柄。

WM_MENUSELECT:当鼠标移过菜单项发送。wParam低字是菜单项ID或弹出菜单索引,高字是选项标志,与MF_宏使用;lParam是菜单所在菜单栏句柄。这个消息用在当鼠标移动过菜单时在状态栏提示菜单功能。

WM_INITMENUPOPUP:弹出菜单显示前发送。如果要在菜单显示前禁用或允许一些菜单,这个消息很重要。

WM_COMMAND:最重要的一条消息。wParam低字是菜单ID,其他都为0。lParam可以区分菜单命令消息和换件命令消息。

WM_SYSCOMMAND:和WM_COMMAND很像,是点系统菜单产生的消息,lParam是鼠标的系统坐标(低x高y)。

WM_MENUCHAR:当快捷键没有对应的菜单时发送。wParam低位是字符的ASCII或Unicode码,高位是标志,lParam是菜单句柄。

 

系统菜单

创建窗口时使用WS_SYSMENU就会有系统菜单,它在窗口标题栏左侧,鼠标单击显示。用GetSysMenu(hwnd,FALSE)得到菜单句柄并允许修改菜单,第二个参数为TRUE则恢复系统菜单且不允许修改。系统菜单命令消息是WM_SYSCOMMAND,菜单ID大于0XF000,因而

自定义ID应小于0XF000,避免混淆。

 

函数

GetMenu(hwnd);

CheckMenuItem(hMenu,iSelection,MF_CHECKED/MF_UNCHECKED);

CheckMenuItem(hMenu,iPos,iCheck | MF_BYPOSTION):第二参数为菜单项索引。

EnableMenuItem(hMenu,ID/iPos,MF_GRAYED/MF_ENABLED | MF_BYPOSTION):对禁用/允许弹出菜单操作只能用索引。

CreateMenu():与AppendMenu动态创建菜单

AppendMenu(hMenu,MF_STRING,IDM_MENUITEM,"&TEXT");

LoadMenuIndirect:接受MENUITEMTEMPLATE结构体指针,把参数保存在结构体数组中,直接创建菜单,比CreateMenu方便一些。

GetSubMenu(hMenu,iPos):返回弹出菜单句柄。

TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,pt.x,pt.y,0,hwnd,NULL):创建鼠标右键菜单。hMenu必须是一个弹出菜单句柄。pt是屏幕坐标。

InsertMenu(hMenu,uPos,uFlag,uIDItem,lpNewItem)

ModifyMenu(hMenu,uPos,uFlag,uIDNew,lpNewItem)

DeleteMenu

RemoveMenu:不能销毁弹出菜单。

DrawMenuBar(hwnd):当顶级菜单修改后,Windows不会立刻显示改变的内容,可以用这个函数重绘菜单栏。

GetMenuItemCount(hMenu)

GetMenuItemID(hMenuPopup,iPos):返回菜单项ID

GetMneuString(hMenu,id,pString,iMaxString,iFlag):iFlag是MF_BYCOMMAND(ID)或MF_BYPOSTION(索引)

GetMenuState(hMenu,id,iFlag):iFlag同上。

 

快捷键

LoadAccelerators(hInstance,TEXT("MYACCELERATORS"));

TranslateAccelerator(hwnd,hAccel,&msg):快捷键消息转换,使用方法: 。菜单名称后加/t快捷键提示。

如果快捷键ID对应系统菜单的菜单项,TranslateAccelerator转换成的是WM_SYSCOMMAND,否则转换为WM_COMMAND消息。快捷键消息与菜单消息的区别在于wParam的高字为1,与控件的区别在与lParam是0。

原创粉丝点击