3.05 菜单资源

菜单分类

  • 窗口的顶层菜单(最上面的菜单)
  • 弹出式菜单(右键 以及顶层菜单的下拉菜单)
  • 系统菜单(软件小图标)

HMENU 类型表示菜单.ID 表示菜单项

资源相关

资源脚本文件: *.rc 编译器: RC.EXE

菜单资源使用

添加菜单资源

加载菜单资源

1>注册窗口类时设置菜单

2>创建窗口传参设菜单

3>在主窗口 WM_CREATE 消息中利用 SetMenu 函数设置菜单

  1. #include"resource.h"
  2. // 注册窗口类时设置菜单
  3. wc.lpszMenuName = (char*)IDR_MENU1;
  4. // 在创建窗口时设置菜单
  5. HMENU hMenu = LoadMenu(hIns, (char*)IDR_MENU1); // 获取菜单句柄
  6. HWND hWnd = CreateWindow( // 返回句柄
  7. "Main",
  8. "window",
  9. WS_OVERLAPPEDWINDOW, // 风格
  10. 100, 100, 500, 500,
  11. NULL, // 父窗口
  12. hMenu, // 菜单
  13. hIns,
  14. NULL
  15. );
  16. // 在 WM_CREATE 时创建菜单 GetModuleHandle(NULL)可以获取本进程句柄
  17. case WM_CREATE:
  18. {HMENU hMenu = LoadMenu(GetModuleHandle(NULL), (char*)IDR_MENU1); // 获取菜单句柄
  19. SetMenu(hWnd, hMenu);
  20. break;}

加载菜单资源

  1. HMENU LoadMenu(
  2. HINSTANCE hInstance,// handle to module
  3. LPCTSTRIpMenuName //menu name or resource identifier
  4. );

命令消息处理

附带信息:

  • WPARAM:
    • HIWORD: 对于菜单为 O
    • LOWORD: 菜单项的 ID
  • lParam: 对于菜单为 0
  1. {
  2. case WM_COMMAND:
  3. OnCommand(hWnd, wParam);
  4. break;
  5. }
  6. void OnCommand(HWND hWnd, WPARAM wParam) {
  7. switch (LOWORD(wParam)) {
  8. case ID_NEW:
  9. MessageBox(hWnd,"新建","命令窗口",MB_OK);
  10. break;
  11. }
  12. }