首页 > 编程语言 >win32编程 -- 菜单使用

win32编程 -- 菜单使用

时间:2022-12-26 19:38:09浏览次数:40  
标签:菜单 -- 句柄 AppendMenu win32 MF hWnd 菜单项


不知道少了什么,总觉得没有以前快乐,不后悔遇见谁,只后悔变成现在的模样。。。

----  网易云热评

一、窗口的顶层菜单 

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);

}

win32编程 -- 菜单使用_菜单项

二、弹出式菜单 

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);

}

win32编程 -- 菜单使用_句柄_02

 

欢迎关注公众号:顺便编点程

win32编程 -- 菜单使用_菜单使用_03

 


标签:菜单,--,句柄,AppendMenu,win32,MF,hWnd,菜单项
From: https://blog.51cto.com/u_15288375/5970535

相关文章

  • 将将巴巴的九月
    这个9月似乎比前几个月份过得格外的快,但又不那么快。看见了“落叶知秋”的秋风起、感受到了“千姿百态、姹紫嫣红、百花齐放”的简单与美、体会了“错落有致”的逻辑。一、......
  • 数据库 -- 基础操作
    不知道少了什么,总觉得没有以前快乐,不后悔遇见谁,只后悔变成现在的模样。。。---- 网易云热评一、环境安装PHPstudy下载地址,一路下一步,安装的时候路径不要有中文或者空格​......
  • C#基础⑧——方法(函数、重载、out、ref)
    目录​​一、什么是方法(函数)?​​​​二、使用方法有什么好处呢?​​​​三、语法:​​​​四、实战演练​​     ​​五、ref和out传参的区别​​​​①、out的传参:​......
  • C#基础⑨——字符串(string str = null 与string str = ““的区别)
    一、字符串ToLower、Toupper:大小写字母转换str=str.ToLower():得到字符串的小写形式str=str.Toupper():得到字符串的大写形式sq.Equals(s2,StringComparison.OrdinallgnoreC......
  • win32编程 -- 系统菜单及右键菜单
    她开玩笑地说了句:挺可惜的,我的青春平平淡淡,站在她身旁的男生红着眼眶:你惊艳了我至少三年。。。----网易云热评一、修改系统菜单项1、在create消息中处理caseWM_CREATE:......
  • 向量带来的高维思维
    何为向量?向量从何而来?为什么说向量是高维思维的体现?为什么说学习向量就是我们认识世界的新角度? 学习向量对于我们来说是突然的,感觉我一直在经历“降维打击”,经过十几节课的......
  • 三层
    最近进入了三层的学习,刚开始实在是不明白三层是什么?为什么要分层?三层有哪些?1.UI(View),表示层。接收显示数据(接受用户输入数据、显示处理后的数据);2.BLL(BusinessLogicLayer),......
  • SqlCommand.ExecuteNonQuery 方法
    一、ExecuteNonQuery方法是什么?SqlCommand的一个类,用于包含update、insert、delete、select的Transact-sql语句中来修改数据库中的数据,并返回结果。 二、返回的结果是什......
  • 2020年——成长、感恩、幸运
    春去秋来、秋收冬藏,成长在悄然之中偷偷的来临,我的2020年似乎是个幸运的年份。 一、学习上硕果累累本来兴高采烈地回家过年,疫情的原因,没想到回去就回不来了,自然被困在廊坊的......
  • 《吴军硅谷来信第三季第021封信:孙悟空的紧箍咒究竟有什么用?》
    ......