菜单分类
- 窗口的顶层菜单
- 弹出式菜单(鼠标右键的那些选项,记事本窗口左上角点击“文件”弹出的这些)
- 系统菜单(记事本左上角的图标)
HMENU类型表示菜单,ID表示菜单项
资源相关
- 资源脚本文件:*.rc文件
- 编译器:rc.exe
菜单资源使用
- 添加菜单资源(不需要写代码)
- 加载菜单资源
1.注册窗口类时设置菜单
2.创建窗口传参设置菜单
3.在主窗口WM_CREATE消息中利用SetMenu函数设置菜单
加载菜单资源:
LoadMenu函数的主要作用是从与应用程序实例关联的可执行文件(.EXE)中加载指定的菜单资源
HMENU LoadMenu(
HINSTANCE hInstance, //handle to module
LPCTSTR lpMenuName //menu name or resource identifier
);
参数说明
- hInstance: 包含要加载的菜单资源的模块的句柄。
- lpMenuName: 菜单资源的名称。这个参数可以是资源标识符或者使用 MAKEINTRESOURCE 宏创建的值。
返回值
- 如果函数成功,返回菜单资源的句柄(HMENU)。
- 如果函数失败,返回值为NULL。可以调用 GetLastError 获取详细的错误信息。
看看硬盘上的变化
加载菜单资源
注册窗口类时设置菜单
创建窗口传参设置菜单
在主窗口WM_CREATE消息中利用SetMenu函数设置菜单
在主窗口WM_CREATE消息中利用SetMenu函数设置菜单。
BOOL SetMenu(
HWND hWnd,
HMENU hMenu
);
参数说明
- hWnd: 要设置菜单的窗口句柄。
- hMenu: 要分配给窗口的菜单句柄。如果此参数为NULL,则会移除窗口当前的菜单。
返回值
- 如果函数成功,返回非零值。
- 如果函数失败,返回零。可以使用GetLastError函数获取更多错误信息。
功能描述
- SetMenu函数的主要作用是将指定的菜单分配给一个窗口。这个操作会替换窗口当前的菜单(如果有的话)。通过这个函数,你可以动态地更改窗口的菜单,实现菜单的动态管理和更新。
命令消息处理
WM_COMMAND消息
-
下情况下发送:
1.用户从菜单中选择一个命令项。
2.控件向其父窗口发送通知消息。
3.加速键(快捷键)被转换时。 -
附带信息
wPARAM:
HIWORD - 对于菜单为0
LOWORD - 菜单项的ID
lPARAM - 对于菜单为0