3.05 菜单资源
菜单分类
- 窗口的顶层菜单(最上面的菜单)
- 弹出式菜单(右键 以及顶层菜单的下拉菜单)
- 系统菜单(软件小图标)
HMENU 类型表示菜单.ID 表示菜单项
资源相关
资源脚本文件: *.rc 编译器: RC.EXE
菜单资源使用
添加菜单资源
加载菜单资源
1>注册窗口类时设置菜单
2>创建窗口传参设菜单
3>在主窗口 WM_CREATE 消息中利用 SetMenu 函数设置菜单
#include"resource.h"
// 注册窗口类时设置菜单
wc.lpszMenuName = (char*)IDR_MENU1;
// 在创建窗口时设置菜单
HMENU hMenu = LoadMenu(hIns, (char*)IDR_MENU1); // 获取菜单句柄
HWND hWnd = CreateWindow( // 返回句柄
"Main",
"window",
WS_OVERLAPPEDWINDOW, // 风格
100, 100, 500, 500,
NULL, // 父窗口
hMenu, // 菜单
hIns,
NULL
);
// 在 WM_CREATE 时创建菜单 GetModuleHandle(NULL)可以获取本进程句柄
case WM_CREATE:
{HMENU hMenu = LoadMenu(GetModuleHandle(NULL), (char*)IDR_MENU1); // 获取菜单句柄
SetMenu(hWnd, hMenu);
break;}
加载菜单资源
HMENU LoadMenu(
HINSTANCE hInstance,// handle to module
LPCTSTRIpMenuName //menu name or resource identifier
);
命令消息处理
附带信息:
- WPARAM:
- HIWORD: 对于菜单为 O
- LOWORD: 菜单项的 ID
- lParam: 对于菜单为 0
{
case WM_COMMAND:
OnCommand(hWnd, wParam);
break;
}
void OnCommand(HWND hWnd, WPARAM wParam) {
switch (LOWORD(wParam)) {
case ID_NEW:
MessageBox(hWnd,"新建","命令窗口",MB_OK);
break;
}
}