win32编程 -- 系统菜单及右键菜单
她开玩笑地说了句:挺可惜的,我的青春平平淡淡,站在她身旁的男生红着眼眶:你惊艳了我至少三年。。。
----网易云热评
一、修改系统菜单项
1、在create消息中处理
case WM_CREATE:
获取系统菜单(hWnd);
break;
2、系统菜单的修改
AppendMenu添加
DeleteMenu删除
void 获取系统菜单(HWND hWnd)
{
//获取系统菜单句柄,false表示现在的句柄
HMENU 系统菜单句柄 = GetSystemMenu(hWnd, FALSE);
//删除或增加菜单项
for (int i = 0; i < 6; i++)
{
DeleteMenu(系统菜单句柄, 0, MF_BYPOSITION);//根据索引删除
}
AppendMenu(系统菜单句柄, MF_SEPARATOR, 0, L"");
AppendMenu(系统菜单句柄, MF_STRING, 1001, L"哎呦");
}
3、系统菜单命令响应
WM_SYSCOMMAND响应菜单命令
WPARAM的LOWORD是命令ID
case WM_SYSCOMMAND:
系统菜单消息处理(hWnd, wParam);
break;
void 系统菜单消息处理(HWND hWnd,WPARAM wParam)
{
switch (LOWORD(wParam))//获取被点击系统菜单项id
{
case 1001:
MessageBox(hWnd, L"哎呦", L"aiaiaiyoyo", MB_OK);
break;
}
}
二、右键弹出菜单
1、创建菜单右键菜单是一个弹出式菜单,使用CreatePopupMenu创建。
HMENU 菜单句柄 = CreatePopupMenu();
2、增加菜单项
AppendMenu(菜单句柄,MF_STRING,1002,L"哎");
AppendMenu(菜单句柄, MF_SEPARATOR, 0, L"");
AppendMenu(菜单句柄, MF_STRING, 1003, L"呦");
3、显示弹出式菜单
TrackPopupMenu(菜单句柄, TPM_CENTERALIGN | TPM_VCENTERALIGN, LOWORD(lParam), HIWORD(lParam), 0, hWnd, NULL);
BOOL TrackPopupMenu(
HMENU hMenu, //菜单句柄
UINT uFlags, //显示方式
int x, //水平位置,屏幕坐标系
int y, //垂直位置,屏幕坐标系
int nReserved, //保留,必须0
HWND hWnd, //处理菜单消息的窗口句柄
CONST RECT* prcRect //NULL,忽略
); TrackPopupMenu是阻塞函数
4、命令处理WM_COMMAND,与窗口菜单一致 如果TrackPopupMenu设置了TPM_RETURNCMD选项,那么点击的菜单项ID通过函数的返回值获取。
不设置的情况
case WM_COMMAND:
右键消息处理(hWnd,wParam);
break;
void 右键消息处理(HWND hWnd,WPARAM wParam)
{
switch (LOWORD(wParam))
{
case 1002:
MessageBox(hWnd, L"aiaiaiaiia", L"youyouyou", MB_OK);
break;
}
}
设置情况
BOOL ret=TrackPopupMenu(菜单句柄, TPM_CENTERALIGN | TPM_VCENTERALIGN|TPM_RETURNCMD, pt.x, pt.y, 0, hWnd, NULL);
switch (ret)
{
case 1002:
MessageBox(hWnd,L"没有command消息",L"aa",MB_OK);
break;
}
4、菜单项的状态 WM_INITMENUPOPUP,按照弹出菜单处理
三、菜单处理位置
1、鼠标右键抬起
WM_RBUTTONUP 鼠标右键消息窗口坐标系坐标,要使用需要转换成屏幕坐标系
ClientToScreen 客户端坐标转屏幕坐标
ScreenToClient
POINT pt = {0};
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hWnd, &pt);
2、鼠标右键抬起后,不用坐标转换
WM_CONTEXTMENU
WParam - 右键点击的窗口句柄
LPARAM - LOWORD X坐标,屏幕坐标系
HIWORD Y坐标,屏幕坐标系
WM_CONTEXTMENU消息是在WM_RBUTTONUP消息之后产生。
void 右键抬起后(HWND hWnd,LPARAM lParam)
{
//1、创建右键菜单
HMENU 菜单句柄 = CreatePopupMenu();
//2、增加菜单项
AppendMenu(菜单句柄, MF_STRING, 1002, L"哎");
AppendMenu(菜单句柄, MF_SEPARATOR, 0, L"");
AppendMenu(菜单句柄, MF_STRING, 1003, L"呦");
//3、显示右键菜单
//坐标出现在垂直水平中央
BOOL ret = TrackPopupMenu(菜单句柄, TPM_CENTERALIGN | TPM_VCENTERALIGN | TPM_RETURNCMD, LOWORD(lParam), HIWORD(lParam), 0, hWnd, NULL);
switch (ret)
{
case 1002:
MessageBox(hWnd, L"没有command消息", L"aa", MB_OK);
break;
}
}
欢迎关注公众号:顺便编点程
win32编程 -- 系统菜单及右键菜单相关推荐
- win10系统如何删除右键菜单中的上传到百度网盘
win10系统如何删除右键菜单中的上传到百度网盘 https://jingyan.baidu.com/article/e4d08ffde65bb44fd3f60d45.html
- 创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜单 快捷方式...
{================================================================= 功 能: 创建 桌面.发送到 ...
- Win32_16来看看标准菜单和右键菜单的玩法
日常应用中,菜单主要分为两种:(1) 标准菜单(处于应用程序菜单栏处的菜单) (2)右键快捷菜单 几乎你所见过或使用过的软件中,都有它俩儿 为应用程序添加它们的基本步骤: (1)用代码或者IDE ...
- 右键菜单_右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项
有些人的电脑桌面看起来很整洁有序,结果点一下右键要卡 2秒,弹出来的菜单比脸都长,新建一个文件夹都要找半天. 右键菜单一直是各大软件刷存在感的好地方,因为比起桌面.任务栏和开始菜单,右键菜单使用频 ...
- DIY福音:Firefox菜单及右键菜单ID大全
每一个折腾Firefox的Diyer都是上辈子折翼的天使,致自己! 打磨Firefox界面的时候最多的就隐藏一些平常根本用不上的一些菜单,常规的做法就是安装DOM Inspector扩展右键查找大法寻 ...
- Win11将右键菜单改回Win10右键菜单样式(右键菜单默认展开)
1,首先用鼠标右键点击"开始"按钮(或者按Win+X键),点击 Windows 终端(管理员) 2,在终端应用程序里粘贴下面的代码 win10右键菜单(展开) reg add &q ...
- Windows7系统下为右键菜单设置背景
昨天为自己的电脑重新装了一次系统(windows7),然后下载了一个Win7优化大师优化一下系统,其间发现了一个了可以为右键设置背景的功能,于是试了试,效果还不错,拿出来和大家分享一下: 这个功能设置 ...
- Win10系统怎么在右键菜单中添加命令提示符
大家都知道,说到命令提示符,在最早的图形化Windows系统就开始有了,对于一些技术控用户来说,平时经常会使用到命令提示符功能.那么我们要如何将桌面右键菜单添加命令提示符选项呢?下面分享一下Win10 ...
- win11系统恢复Win10右键菜单的方法
恢复Win10右键菜单的方法: 1.Win+R运行CMD 2.输入: reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c9 ...
最新文章
- java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!
- mysql 5.6 并行复制_MySQL 5.6并行复制架构
- python常用命令大全-Python常用命令之集合
- Android学习笔记之Intent
- vmware esxi的安装
- python读取word中后缀名docx的文件的表格
- linux 内存泄漏 定位,一种内存泄露检查和定位的方法
- 你所不知道的 JavaScript
- java swing界面工具_Java GUI swing 工具包使用总结
- C语言:编写函数,通过一个指针将一个字符串反向
- 关于系统响应函数OnSysCommand
- 细说文件读写操作(读写锁)
- win10应用程序无法启动因为应用程序的并行配置不正确解决思路
- excel减法函数_在excel中进行减法7个例子,包括公式中带条件的减法
- Unity Shader通过菲涅尔反射和散射实现玻璃效果
- 奥鹏计算机基础18秋在线作业答案,1056《 计算机基础》20秋西南大学在线作业答案答案...
- 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息
- sprd 11 隐藏桌面apk图标
- html鼠标滚轮监听,js鼠标滑轮滚动监听触发事件
- asp.net中引用System.Web.UI.DataVisualization.Charting命名空间