编程学习
💻Win32编程(3)- 菜单消息
00 分钟
2023-4-12
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email

😙系统菜单

获得系统菜单

bRevert
  • false:返回正在使用的菜单的句柄,可以对其进行修改。
  • true: 销毁菜单窗口,重置为默认状态。

增加菜单项

hMenu:需要修改的菜单栏句柄。
uFlags:控制新菜单项的外观和行为,比较常用的有:
  • MF_STRING:添加一个指定文本的菜单项。
  • MF_SEPARATOR:添加一条水平分割线(这也算一个菜单项)。
  • MF_POPUP:指定菜单的下拉菜单,即子菜单。
  • MF_GRAYED:使得菜单项为灰色,无法选择。
uIDNewItem:菜单项的标识符。
lpNewItem:新菜单项的内容。

删除菜单项

uPosition:要删除的菜单项。
uFlags:指明如何解释uPosition,它必须是以下两个参数之一(默认为第一个参数)
  • MF_BYCOMMAND:指明uPosition需要传递一个菜单的标识符。
  • MF_BYPOSITION:指明uPosition是一个下标的值(类似于数组的下标)。

示例如下:
将会增加一个 标识符 为0x0001的菜单项,菜单项的值为 “新增菜单”。
并且将会删除下标为4的菜单(编号为0开始)。
结果如下:
notion image

响应系统菜单

WM_SYSCOMMAND 消息:
当点击我们新建的新增菜单的时候,便会弹出这样的一个Box。
注意:wParam的低16位存储的是菜单标识符的信息

😧右键菜单

创建右键菜单

返回的就是我们的右键菜单的句柄,直接接受即可,这个函数很简单。

跟踪右键

uFlags:指定右键菜单的显示方式。
  • TPM_RIGHTALIGN:右侧与 x 参数指定的坐标对齐。
  • ..….
x,y:弹出的坐标位置
需要:如果我们想要在鼠标右键的地方弹出菜单我们需要获得正确的屏幕坐标
获得窗口坐标,进行窗口坐标到屏幕坐标的转换:
当然也可以使用 WM_CONTEXTMENU 可以直接获得屏幕坐标:

响应右键菜单

WM_COMMAND 消息可以响应右键菜单。
notion image
notion image

😘顶层菜单

创建顶层菜单

我们获得的就是顶层菜单的句柄,并且不必是全局变量。
创建弹出式菜单可以作为其他菜单的子菜单
显示顶层菜单
测试如下:
notion image

弹出式菜单增加子菜单栏

循环嵌套即可。
我们上一步的 p1 表示的是一个顶层菜单的子菜单,因此我们要想为 p1 再次增加子菜单,只需要对 p1进行创建菜单 AppendMenu() 操作即可。
notion image

再次增加子菜单!!
 
notion image

🙇‍♂️
总结:当我们创建需要在一个菜单上创建子菜单时,我们只需要在 AppendMenu() 的第一个参数指定父菜单,第三个参数上指定子菜单。
点击更多即可看到pSon的内容。

评论
  • Twikoo
  • Valine