菜单和加速键资源的使用
一、菜单资源的使用
1.在资源描述文件中定义菜单资源
菜单名 MENU [,选项,选项…]
{
//菜单项列表
}
1)选项
选 项 说 明
DISCARDABLE 当不再需要菜单时可丢弃
FIXED 将菜单保存在内存中的固定位置
LOADONCALL 需要时加载菜单
MOVEABLE 菜单在内存中可移动
PRELOAD 立即加载菜单
2)菜单选项
弹出式菜单(OPUP)格式:POPUP "菜单项名" [,选项,选项…]
非弹出式菜单(MENUITEM)格式:MENUITEM"菜单项名"菜单项标识(ID)" [,选项]
水平分隔符:MENUITEM SEPARATOR
2.加载菜单资源
1) 方法1:在窗口类中加载菜单
在窗口类的定义中加载菜单资源通过下列语句实现:wndclass.lpszMenuName=lpszMenuName;
2) 方法2:在创建窗口时加载菜单
在调用函数CreateWindow创建窗口时前调用函数LoadMemu加载菜单:
HMENU LoadMemu
(
hInstance, // hInstance为当前程序的实例句柄
lpszMenuName // lpszMenuName为窗口菜单名
);
3) 方法3:动态加载菜单
在程序中先调用函数LoadMenu获取菜单句柄后,再调用函数SetMenu动态地加载菜单:
BOLL SetMenu
(
HWND hwnd, // Hwnd为窗口句柄
HMENU hmenu // hmenu为菜单句柄
);
3.菜单中菜单项的操作
1)禁止或激活菜单项
DWORD EnableMenuItem(HMENU hmenu, UlNT wIDEnableItem,UINT dwEnable);
dwEnable标识:
MF_BYCOMMAND 以ID标识菜单项
MF_BYPOSITION 以位置标识菜单项
MF_ENABLE 激活菜单项
MF_DISABLE 禁止菜单项
MF_GRAYED 禁止菜单项并使其变黑显示
2)设置或取消选中标志
DWORD CheckMenultem(HMENU hmen,UINT wIDCheckItem,UINT dwCheck);
dwCheck标识:
MF_BYCOMMAND 以ID标识菜单项
MF_BYPOSITION 以位置标识菜单项
MF_CHECKED 添加选中标志
MF_UNCHECKED 取消选中标志
3)增加菜单项
在菜单的尾部增加菜单项:
BOOL AppendMenu(HMENU hmenu,UINT dwFlags,UINT dwIDNewItem,LPCTSTR lpNewItem);
在菜单中插入菜单项:
BOOL lnsertMenu(HMENU hmenu,UINT wPosition, UINT dwFlag, UINT dwIDNweltem,LPCTSTR lpNewltem)
dwFlag标识:
MF_BYCOMMAND 以ID标识菜单项
MF_BYPOSITION 以位置标识菜单项
4)删除菜单项
BOOL DeleteMenu(HMENU hmenu,UINT wPosition,UINT dwFlag);
5)修改菜单项
BOOL ModifyMenu(HMENU hmenu,UINT wPosition,UINT dwFlag,UINT dwIDNweItem,LPCTSTR lpNewItem);
4.动态地创建菜单
步骤一、调用函数Create Menu创建空的弹出式菜单:
HMENU CreateMenu (void);
步骤二、调用函数AppendMenu或InsertMenu在该菜单中加入菜单项:
AppendMenu(hmenu,MF_POPUP,(UINT )hmenuPopup,lpszTitie);
二、加速键资源的使用
1.在资源描述文件中定义加速键资源
键名 ACCELERATORS [,选项,选项…]
{
//加速键的定义
}
加速键定义的格式为:
键名,加速键标识(ID),[类型][NOINVERT][ALT][SHIFT][CONTROL]
2.加载加速键资源
HACCEL hAccel;
hAccel=LoadAccelerators(hInstance,lpAcceIName);
3.翻译加速键
int TranslateAccelerators(HWND hwnd,HACCEL hAccel,lpMSG lpMsg)
应用:
while(GetMessage(&Msg,NULL,0,0))
{
if(!TranslateAccelerators (hwnd,hAccel,&Mag))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}