Win32学习笔记——菜单和加速键资源的使用

本文介绍了Windows应用程序中菜单和加速键资源的定义与使用方法,包括如何在资源描述文件中定义菜单和加速键,如何加载菜单资源,如何操作菜单项,以及如何动态创建菜单等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 菜单和加速键资源的使用
一、菜单资源的使用
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);
  }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值