win32编程 -- 菜单使用

简介: win32编程 -- 菜单使用

一、窗口的顶层菜单


1、创建菜单HMENU CreateMenu(VOID); //创建成功返回菜单句柄


2、增加菜单项


BOOL AppendMenu(     
HMENU hMenu, //菜单句柄     
UINT uFlags, //菜单项风格     
UINT_PTR uIDNewItem, //菜单项ID或下拉菜单的句柄     
LPCTSTR lpNewItem //菜单项的名称 
);


3、设置到窗口


BOOL SetMenu(     
HWND hWnd,  //窗口句柄    
 HMENU hMenu //菜单句柄 );


4、三种常见风格


MF_POPUP:点击菜单弹出下拉菜单,必须填写下拉菜单的句柄


MF_STRING:被点击时发出WM_COMMAND消息,必须填写菜单项ID


MF_SEPARATOR:菜单项的分割线,一般给0


5、相关代码


case WM_CREATE:


    创建顶层菜单(hWnd);


     break;


void 创建顶层菜单(HWND hWnd) {
     
       //1、创建顶层菜单
       HMENU hMenu= CreateMenu();//返回菜单句柄
       //2、增加菜单项
       AppendMenu(hMenu, MF_STRING, 1001, L"哎呦");
       AppendMenu(hMenu, MF_STRING, 1001, L"不错");
       //3、设置(显示)菜单
       SetMenu(hWnd, hMenu);
}


0a2653c851af460fa595bd959398a8f1.png


二、弹出式菜单


1、下拉式菜单


//1.1创建弹出菜单
       HMENU hFile = CreatePopupMenu();
       //在弹出菜单中添加菜单项
       AppendMenu(hFile, MF_STRING, 1003, L"哎");
       AppendMenu(hFile, MF_SEPARATOR, 0,L"");//分割线
       AppendMenu(hFile, MF_STRING, 1004, L"呦");
AppendMenu(hMenu, MF_POPUP,(UINT)hFile,L"哎呦");


2、菜单命令处理


case WM_COMMAND:
              菜单命令处理(hWnd,wParam);
              break;
void 菜单命令处理(HWND hWnd,WPARAM wParam)
{
       switch (LOWORD(wParam))
       {
       case 1003:
              MessageBox(hWnd, L"哎哎哎哎我哎哎哎哎哎哎",L"呦",MB_OK);
              break;
       case 1004:
              MessageBox(hWnd, L"呦呦呦呦呦呦呦呦呦呦呦",L"哎",MB_OK);
              break;
       default:
              break;
       }
}


三、菜单项状态


1、直接在前面加√


AppendMenu(hFile, MF_STRING|MF_CHECKED, 1003, L"哎");


2、菜单另起一列


AppendMenu(hFile, MF_STRING|MF_MENUBARBREAK, 1004, L"呦");


3、默认灰色,不能选择


AppendMenu(hFile1, MF_STRING|MF_GRAYED, 1005, L"不");


4、检查菜单栏


CheckMenuItem:是否被选中


EnableMenuItem:是否可用


case 1006:
              if (勾选状态==0)
              {
                     //按菜单id值判断是否勾选
                     CheckMenuItem(菜单句柄, 1006, MF_BYCOMMAND | MF_UNCHECKED);
              }
              else
              {
                     //按菜单索引取值
                     CheckMenuItem(菜单句柄, 1, MF_BYPOSITION | MF_CHECKED);
              }
              勾选状态 = !勾选状态;
              break;


5、WM_INITMENUPOPUP


在菜单被激活但是未显示,窗口会收到这个消息    


WPARAM:即将显示的菜单句柄    


LPARAM


LOWORD:是被点击的菜单项索引                      


HIWORD:是窗口菜单标识 0/1    


窗口菜单:顶层菜单和系统菜单属于窗口菜单,弹出式菜单不属于窗口菜单


case WM_INITMENUPOPUP:
              菜单激活未显示(hWnd,wParam,lParam);
              break;
void 菜单激活未显示(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
       wchar_t s[256] = { 0 };
       swprintf_s(s,L"未显示菜单句柄:%d\n被点击菜单id:%d\n是否是窗口菜单:%d\n",wParam,LOWORD(lParam),HIWORD(lParam));
     
       WriteConsole(输出句柄, s, wcslen(s), NULL, NULL);
}

0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
7月前
win32编程 -- 系统菜单及右键菜单
win32编程 -- 系统菜单及右键菜单
90 1
|
7月前
win32编程 -- 菜单资源
win32编程 -- 菜单资源
40 1
|
7月前
win32编程 -- 模式对话框
win32编程 -- 模式对话框
41 1
|
7月前
win32编程 -- 无模式对话框
win32编程 -- 无模式对话框
39 0
|
索引
win32编程 -- 菜单使用
win32编程 -- 菜单使用
170 0
win32编程 -- 菜单使用
|
Python
Python高级进阶#019 pyqt5菜单menu应用,新建多窗体
Python高级进阶#019 pyqt5菜单menu应用,新建多窗体
234 0
|
Windows
Win11(2):Win11有必要更新么?和Win10差别大么?它的右键菜单很不习惯(三)
今天同事问,Win11推送了,升级没。右键菜单很不习惯。 其实Win11还在预览版的时候就开始试用了。至于右键菜单,不习惯可以改呀。打回原形!
768 0
Win11(2):Win11有必要更新么?和Win10差别大么?它的右键菜单很不习惯(三)
|
Windows
Win11(2):Win11有必要更新么?和Win10差别大么?它的右键菜单很不习惯(一)
今天同事问,Win11推送了,升级没。右键菜单很不习惯。 其实Win11还在预览版的时候就开始试用了。至于右键菜单,不习惯可以改呀。打回原形!
639 0
Win11(2):Win11有必要更新么?和Win10差别大么?它的右键菜单很不习惯(一)
|
Windows
Win11(2):Win11有必要更新么?和Win10差别大么?它的右键菜单很不习惯(二)
今天同事问,Win11推送了,升级没。右键菜单很不习惯。 其实Win11还在预览版的时候就开始试用了。至于右键菜单,不习惯可以改呀。打回原形!
789 0
Win11(2):Win11有必要更新么?和Win10差别大么?它的右键菜单很不习惯(二)
VC如何打开代码对应的界面编辑窗口
VC如何打开代码对应的界面编辑窗口
158 0
VC如何打开代码对应的界面编辑窗口