我们首先来认识什么是自定菜单,以及他的用途和重要性。

抖音PC客户端,红框部份就是自定菜单

这是阿里卖家中心,红框部份就是自定菜单

这是腾讯游戏中心,同样使用了自定菜单

在我们日常工作和娱乐中所见到的顶流软件都使用了这种自定菜单的布局,他的使用率和交互性就不言而喻了吧?可是我们在使用C++软件开发时默认是没有这种布局的,C++开发的窗口默认就只有最小化、最大化、关闭这几种选项,所以今天我们就来讲解如何使用C++开发在标题栏添加自定菜单。

常规C++窗口

首先来展示下我已经做好的成品,然后再讨论开发过程。自定菜单鼠标移上去支持显示文本也支持显示图片,鼠标点击以后会有对应的事件发送到主窗口,主窗口响应之后根据菜单编号做出相应业务处理。

已经开发好的自定导航菜单

开发环境:VS2019

界面库:酷宝-001-先驱者 下载地址:库来帮 www.kulb.cn

解压出来后里面有库文件和导入方法,头文件和库文件都加载好以后我们打开演示程序,找到自定菜单,打开以后里面有配置方法,我们配置好以后他会生成对应的代码和参数,我们只须要把这些代码复制到窗口初始化模块即可。如果仍然不会的可以去B站搜库来帮会有对应教程。

添加菜单,所见即所得

通过这里添加成功后所用的参数会输出到右边文本框,我们只需要直接复制粘贴即可,须要注意的是这里输出的路径是单斜杆放到C++代码中是会报错的,我们须要把单斜杆手动改成双斜杆。如果需要使用HICON或者HBITMAP句柄作为图片也是支持的请自行查看代码解译。

比如:

item.uamDef.pData = L"C:\Users\Administrator\Desktop\MenuIcon\qqu.ico";

改后:

item.uamDef.pData = L"C:\\Users\\Administrator\\Desktop\\MenuIcon\\qqu.ico";

还有就是这里用到的是绝对路径,而通常情况下我们的可执行文件和资源文件都会是一起的,所以还须要把这个绝对路径改成图片和可执行文件所在的相对路径。

比如

item.uamDef.pData = L"C:\\Users\\Administrator\\Desktop\\MenuIcon\\qqu.ico";

改后:

item.uamDef.pData = L"MenuIcon\\qqu.ico";

这个相对路径要根据自己的实际情况做调整。粘贴到OnInitDialog()窗口初始化模块里面。

自定菜单初始化

添加完成后还需要使用函数KB_OpenUserMenu(m_hWnd, TRUE);来开启菜单,因为默认是不会显示的,所以需要手动开启。

以下是添加源码。

{

KB_UserMenuItem item;

item.uamDef.pData = L"MenuIcon\\webu.ico";

item.uamDef.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.uamMove.pData = L"MenuIcon\\webm.ico";

item.uamMove.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.nMenuWidth = 32;

item.nMenuHeigth = 32;

item.nSpaceX = 10;

item.nSpaceY = 0;

item.lpTooltipText = L"官网:www.kulb.cn";

KB_AddUserMenuItem(m_hWnd, item);

}

//----------------------------

{

KB_UserMenuItem item;

item.uamDef.pData = L"MenuIcon\\qqu.ico";

item.uamDef.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.uamMove.pData = L"MenuIcon\\qqm.ico";

item.uamMove.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.nMenuWidth = 32;

item.nMenuHeigth = 32;

item.nSpaceX = 10;

item.nSpaceY = 0;

item.uapPopup.pData = L"MenuIcon\\popup.bmp";

item.uapPopup.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.uapPopup.nPopupWidth = 300;

item.uapPopup.nPopupHeigth = 300;

KB_AddUserMenuItem(m_hWnd, item);

}

{

KB_UserMenuItem item;

item.uamDef.pData = L"MenuIcon\\wxu.ico";

item.uamDef.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.uamMove.pData = L"MenuIcon\\wxm.ico";

item.uamMove.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.nMenuWidth = 32;

item.nMenuHeigth = 32;

item.nSpaceX = 10;

item.nSpaceY = 0;

item.uapPopup.pData = L"MenuIcon\\popup.bmp";

item.uapPopup.BImageType = KB_USER_MENU_IMAGE_TYPE_PATH;

item.uapPopup.nPopupWidth = 300;

item.uapPopup.nPopupHeigth = 300;

KB_AddUserMenuItem(m_hWnd, item);

}

KB_OpenUserMenu(m_hWnd, TRUE);

Demo源码我已经上传,大家可自行下载源码研究。

更多推荐