目录1菜单栏1.1程序添加菜单栏的方法1.2WM_COMMAND 命令1.3加速键也称快捷键2菜单的查询创建添加修改和删除1菜单栏1.1程序添加菜单栏的方法方法1WNDCLASSEX结构的 lpszMenuName 字段。WNDCLASSEXWwcex;wcex.cbSizesizeof(WNDCLASSEX);wcex.styleCS_HREDRAW|CS_VREDRAW;wcex.lpfnWndProcWndProc;wcex.cbClsExtra0;wcex.cbWndExtra0;wcex.hInstancehInstance;wcex.hIconLoadIcon(hInstance,MAKEINTRESOURCE(IDI_WINDOWSPROJECT1));wcex.hCursorLoadCursor(nullptr,IDC_ARROW);wcex.hbrBackground(HBRUSH)(COLOR_WINDOW1);wcex.lpszMenuNameMAKEINTRESOURCEW(IDR_MENU1);//添加菜单栏wcex.lpszClassNameszWindowClass;wcex.hIconSmLoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_SMALL));方法2在创建窗口的 CreateWindowEx 函数中指定 hMenu 参数。HMENUhMenuLoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1));HWNDhWndCreateWindowW(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW|WS_HSCROLL,CW_USEDEFAULT,0,CW_USEDEFAULT,0,nullptr,hMenu,hInstance,nullptr);方法3利用 SetMenu 函数为指定窗口设置菜单caseWM_CREATE:{HMENUhMenuLoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1));SetMenu(hWnd,hMenu);}Windows 提供了各种函数对资源进行加载例如 LoadmENULoadIconLoadCursorLoadAccelerators 等。这些函数加载的资源通常不需要释放程序退出时由系统释放程序自己创建的对象在不需要的时候通常需要释放而程序或系统中定义的资源通常不需要释放。1.2WM_COMMAND 命令当你点击 菜单栏的某个选项时就会触发 WM_COMMAND 消息示例caseWM_COMMAND:{int wmIdLOWORD(wParam);switch(wmId){caseID_FILE_NEW://菜单栏的 “新建” 选项{MessageBox(hWnd,_T(New Document),_T(Notepad),MB_OK);break;}caseID_FILE_EXIT://菜单栏的 “退出” 选项{DestroyWindow(hWnd);break;}}}1.3加速键也称快捷键如上图所示用来设计快捷键。比如上面的图就是设置 ID 为 ID_FILE_NEW 的菜单栏选项的快捷键为 Ctrl N 当我点击 Ctrl N 时就触发了 点击 ID_FILE_NEW 的效果。在一个资源脚本中可以定义多个主菜单或多个加速键表也可以定义其他各种各样的资源例如图标光标位图等。要处理用户按下的加速键程序需要在消息循环中调用 TranslateAccelerator 函数。该函数会监视消息队列中的 WM_KEYDOWN 和 WM_KEYUP 消息以检查是否有与加速键表相匹配的击键组合。如果有就会将其转换为 WM_COMMAND 或 WM_SYSCOMMAND 消息然后将该消息发送到窗口过程中。2菜单的查询创建添加修改和删除