win32编程 -- 菜单使用

简介: win32编程 -- 菜单使用

一、窗口的顶层菜单


1、创建菜单HMENU CreateMenu(VOID); //创建成功返回菜单句柄


2、增加菜单项


BOOL AppendMenu(     
HMENU hMenu, //菜单句柄     
UINT uFlags, //菜单项风格     
UINT_PTR uIDNewItem, //菜单项ID或下拉菜单的句柄     
LPCTSTR lpNewItem //菜单项的名称 
);


3、设置到窗口


BOOL SetMenu(     
HWND hWnd,  //窗口句柄    
 HMENU hMenu //菜单句柄 );


4、三种常见风格


MF_POPUP:点击菜单弹出下拉菜单,必须填写下拉菜单的句柄


MF_STRING:被点击时发出WM_COMMAND消息,必须填写菜单项ID


MF_SEPARATOR:菜单项的分割线,一般给0


5、相关代码


case WM_CREATE:


    创建顶层菜单(hWnd);


     break;


void 创建顶层菜单(HWND hWnd) {
       //1、创建顶层菜单
       HMENU hMenu= CreateMenu();//返回菜单句柄
       //2、增加菜单项
       AppendMenu(hMenu, MF_STRING, 1001, L"哎呦");
       AppendMenu(hMenu, MF_STRING, 1001, L"不错");
       //3、设置(显示)菜单
       SetMenu(hWnd, hMenu);
}


0a2653c851af460fa595bd959398a8f1.png


二、弹出式菜单


1、下拉式菜单


//1.1创建弹出菜单
       HMENU hFile = CreatePopupMenu();
       //在弹出菜单中添加菜单项
       AppendMenu(hFile, MF_STRING, 1003, L"哎");
       AppendMenu(hFile, MF_SEPARATOR, 0,L"");//分割线
       AppendMenu(hFile, MF_STRING, 1004, L"呦");
AppendMenu(hMenu, MF_POPUP,(UINT)hFile,L"哎呦");


2、菜单命令处理


case WM_COMMAND:
              菜单命令处理(hWnd,wParam);
              break;
void 菜单命令处理(HWND hWnd,WPARAM wParam)
{
       switch (LOWORD(wParam))
       {
       case 1003:
              MessageBox(hWnd, L"哎哎哎哎我哎哎哎哎哎哎",L"呦",MB_OK);
              break;
       case 1004:
              MessageBox(hWnd, L"呦呦呦呦呦呦呦呦呦呦呦",L"哎",MB_OK);
              break;
       default:
              break;
       }
}


三、菜单项状态


1、直接在前面加√


AppendMenu(hFile, MF_STRING|MF_CHECKED, 1003, L"哎");


2、菜单另起一列


AppendMenu(hFile, MF_STRING|MF_MENUBARBREAK, 1004, L"呦");


3、默认灰色,不能选择


AppendMenu(hFile1, MF_STRING|MF_GRAYED, 1005, L"不");


4、检查菜单栏


CheckMenuItem:是否被选中


EnableMenuItem:是否可用


case 1006:
              if (勾选状态==0)
              {
                     //按菜单id值判断是否勾选
                     CheckMenuItem(菜单句柄, 1006, MF_BYCOMMAND | MF_UNCHECKED);
              }
              else
              {
                     //按菜单索引取值
                     CheckMenuItem(菜单句柄, 1, MF_BYPOSITION | MF_CHECKED);
              }
              勾选状态 = !勾选状态;
              break;


5、WM_INITMENUPOPUP


在菜单被激活但是未显示,窗口会收到这个消息    


WPARAM:即将显示的菜单句柄    


LPARAM


LOWORD:是被点击的菜单项索引                      


HIWORD:是窗口菜单标识 0/1    


窗口菜单:顶层菜单和系统菜单属于窗口菜单,弹出式菜单不属于窗口菜单


case WM_INITMENUPOPUP:
              菜单激活未显示(hWnd,wParam,lParam);
              break;
void 菜单激活未显示(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
       wchar_t s[256] = { 0 };
       swprintf_s(s,L"未显示菜单句柄:%d\n被点击菜单id:%d\n是否是窗口菜单:%d\n",wParam,LOWORD(lParam),HIWORD(lParam));
       WriteConsole(输出句柄, s, wcslen(s), NULL, NULL);
}

0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
资源调度 搜索推荐 Shell
使用VitePress静态网站生成器创建组件库文档网站并部署到GitHub
本文介绍了如何使用 Vue3、TypeScript 和 Vite 开发组件库并将其发布到 npm。文章详细描述了安装依赖、配置项目、创建文档网站以及编写组件文档的步骤。通过使用 VitePress,可以轻松搭建组件库的文档站点,并实现 Algolia 搜索功能。此外,还提供了自动化脚本用于部署静态网站至 GitHub 以及发布组件库到 npm。最后,展示了完整的目录结构和网站效果。
651 1
使用VitePress静态网站生成器创建组件库文档网站并部署到GitHub
|
前端开发 JavaScript 小程序
技术经验解读:你所不知的十二个前端组件库
技术经验解读:你所不知的十二个前端组件库
|
安全 编译器 C++
Microsoft Visual C++ Redistributable的作用主要体现以及可以删除吗?
这些是Microsoft Visual C++不同版本的Redistributable安装包,用于32位系统,确保相关应用正常运行。它们提供C++运行时环境,简化部署流程,支持第三方库及框架,并确保应用兼容性。定期更新可修复问题并引入新功能。在空间有限或需解决程序冲突时可考虑删除,但需谨慎操作以防影响应用稳定性和兼容性。删除前请确认无应用依赖,并通过控制面板安全卸载。
3163 1
Microsoft Visual C++ Redistributable的作用主要体现以及可以删除吗?
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
【7月更文挑战第23天】在数据驱动时代,Python的Matplotlib、Seaborn与Plotly等库使数据可视化成为洞察信息的关键工具。不仅转化数字为图形,更是视觉传达故事。示例代码展示从基础图表到箱线图、小提琴图和热力图的创建过程,强调选择合适图表、简洁设计与色彩的重要性。Python赋能数据可视化,开启数据理解新视角,助于揭示模式、辅助决策。✨📊💡 (总计239字符)
253 7
|
人工智能 自动驾驶 开发者
人工智能伦理困境:机器自主性与人类责任
在人工智能技术迅猛发展的今天,我们面临着一个前所未有的伦理挑战。随着机器智能的不断提升,它们在决策过程中展现出越来越多的自主性。本文将探讨这一现象背后的伦理问题,特别是当AI系统的行为导致负面后果时,我们应如何界定人类的责任。我们将分析几个关键领域,包括自动驾驶汽车、医疗诊断以及军事应用,来揭示当前的法律和道德框架在应对这些挑战时的不足之处。通过提出一系列针对性的建议,本文旨在推动对AI伦理问题的深入讨论,并促进相关法规的完善。
|
关系型数据库 消息中间件 数据库
云大使推广可奖励返佣产品明细
阿里云云大使返利产品,战略产品返利25%-45%,核心返利产品按照15%返利,后付费产品返利25%-45%。具体明细查看当月详细规则 https://developer.aliyun.com/article/1007904
win32编程 -- 菜单资源
win32编程 -- 菜单资源
111 1
|
算法 安全 网络安全
【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-九宫格算法加密
手机九宫格键盘加密算法是一种在移动设备上使用的密码加密技术。它的基本原理是使用手机键盘上的九宫格来生成一组密钥,以保护用户数据的安全。
393 0
 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-九宫格算法加密
|
存储 人工智能 图形学
CDR24.0.0.301订阅版下载及功能介绍
CorelDRAW Graphics Suite 订阅版拥有配备齐全的专业设计工具包,可以通过非常高的效率提供令人惊艳的矢量插图、布局、照片编辑和排版项目。价格实惠的订阅就能获得令人难以置信的持续价值,即时、有保障地获得独家的新功能和内容、一流的性能,以及对最新技术的支持。获得 CorelDRAW Graphics Suite 订阅奖励,您将可以畅享其他版本无法享受的专属新功能和内容。
654 0
|
SQL 算法 安全
MD5加密漏洞(MD5绕过方式-0e绕过/数组绕过/MD5碰撞/MD5SQL注入)
MD5是一种散列函数,是哈希算法的一种,可以将任意长度的输入,通过散列算法变换成128位的散列值
2476 0