win32编程 -- 菜单使用
  TEZNKK3IfmPf 2023年11月13日 62 0

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

----  网易云热评

一、窗口的顶层菜单 

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编程 -- 菜单使用

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

TEZNKK3IfmPf