当前位置: 首页 > news >正文

Win32---->菜单和其他资源

目录

  • 1,菜单栏
    • 1.1,程序添加菜单栏的方法
    • 1.2,WM_COMMAND 命令
    • 1.3,加速键,也称快捷键
  • 2,菜单的查询,创建,添加,修改和删除

1,菜单栏

1.1,程序添加菜单栏的方法

  • 方法1:WNDCLASSEX结构的 lpszMenuName 字段。
WNDCLASSEXWwcex;wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW|CS_VREDRAW;wcex.lpfnWndProc=WndProc;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;wcex.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_WINDOWSPROJECT1));wcex.hCursor=LoadCursor(nullptr,IDC_ARROW);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName=MAKEINTRESOURCEW(IDR_MENU1);//添加菜单栏wcex.lpszClassName=szWindowClass;wcex.hIconSm=LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_SMALL));
  • 方法2:在创建窗口的 CreateWindowEx 函数中指定 hMenu 参数。
HMENUhMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1));HWNDhWnd=CreateWindowW(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW|WS_HSCROLL,CW_USEDEFAULT,0,CW_USEDEFAULT,0,nullptr,hMenu,hInstance,nullptr);
  • 方法3:利用 SetMenu 函数为指定窗口设置菜单
caseWM_CREATE:{HMENUhMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1));SetMenu(hWnd,hMenu);}

Windows 提供了各种函数对资源进行加载,例如 LoadmENU,LoadIcon,LoadCursor,LoadAccelerators 等。
这些函数加载的资源通常不需要释放,程序退出时由系统释放,程序自己创建的对象在不需要的时候通常需要释放,而程序或系统中定义的资源通常不需要释放。

1.2,WM_COMMAND 命令

当你点击 菜单栏的某个选项时,就会触发 WM_COMMAND 消息
示例:

caseWM_COMMAND:{int wmId=LOWORD(wParam);switch(wmId){caseID_FILE_NEW://菜单栏的 “新建” 选项{MessageBox(hWnd,_T("New Document"),_T("Notepad"),MB_OK);break;}caseID_FILE_EXIT://菜单栏的 “退出” 选项{DestroyWindow(hWnd);break;}}}

1.3,加速键,也称快捷键


如上图所示,用来设计快捷键。比如上面的图就是,设置 ID 为 ID_FILE_NEW 的菜单栏选项的快捷键为 Ctrl + N 当我点击 Ctrl + N 时就触发了 点击 ID_FILE_NEW 的效果。

在一个资源脚本中,可以定义多个主菜单或多个加速键表,也可以定义其他各种各样的资源,例如图标,光标,位图等。

要处理用户按下的加速键,程序需要在消息循环中调用 TranslateAccelerator 函数。该函数会监视消息队列中的 WM_KEYDOWN 和 WM_KEYUP 消息,以检查是否有与加速键表相匹配的击键组合。如果有,就会将其转换为 WM_COMMAND 或 WM_SYSCOMMAND 消息,然后将该消息发送到窗口过程中。

2,菜单的查询,创建,添加,修改和删除

http://www.jsqmd.com/news/578774/

相关文章:

  • ESP8266模组开发与AT指令实战指南
  • Memfit AI 渗透测试智能体,到底能不能打?
  • Linux 系列从多节点的catalina 日志中统计设备调用频次
  • Arduino I2C LCD库深度解析:printf支持与HD44780驱动优化
  • RNN,LSTM,BiLSTM算法的具体细节
  • OpenClaw调试技巧:千问3.5-27B任务失败的根本原因分析
  • STM32电位器驱动库:轻量级ADC封装与中值滤波实现
  • 海口上门做饭哪个靠谱
  • 森利威尔SL3073替代RT2862 4-65V超宽压3A降压芯片
  • 基于Matlab的多自由度轴承静刚度计算之旅
  • 【网络安全】入侵检测系统IDS
  • Vodafone K4606 USB调制解调器Linux内核驱动适配
  • 解决网易云音乐NCM格式限制的ncmdump:技术原理与高效解密实践指南
  • LABVIEW写入Excel的函数:应用程序目录、创建路径、写入带分隔符电子表格、for循环、条件结构、按名称解除捆绑、创建数组
  • 企微第三方应用开发避坑指南:从回调服务到内网穿透的实战经验
  • 5分钟用OpenClaw连接SecGPT-14B:网络安全自动化初体验
  • Docker环境下SEEDLab BGP实验全流程避坑指南(附DNS/HTTP超时解决方案)
  • 独立站建站过程中的SEO要点是什么
  • LeetCode知识点总结 - 537
  • OpenClaw技能开发入门:为Phi-3-mini-128k-instruct定制自动化插件
  • 稳健的独热编码
  • 2026 年真正必备的 10 个 Claude 插件(以及它们的作用)
  • SwartNinjaPIR:嵌入式高可靠PIR运动检测驱动库
  • 社交媒体应用的安全策略与用户屏蔽机制
  • 嵌入式开发中的模块化编程与驱动分离实践
  • 【OpenClaw 安全部署与使用指南:从零构建可信赖的 AI 助手】
  • 物流园区灵活用电计量物联网解决方案
  • 跨国系统避坑:IANA 时区与夏令时(DST)完美处理方案
  • LSM303DLH六轴传感器原理与嵌入式驱动开发
  • 茶叶工艺能耗监测系统方案