C++面向对象语言自制多级菜单功能实现代码C语言

因为要做一个小应用,需要一个菜单类,在网上找了许久,也没有找到一款心仪的菜单类,索性用C++语言,自制一个命令行级别的菜单类,并制作成库,现记录下来,供以后借鉴。

菜单类主要负责菜单的创建、修改、删除,是包含菜单结构组织和响应函数的模型,用户拥有充分的自主性,可根据需要自定义菜单显示和响应函数。其中菜单项使用vector容器数据结构,根据用户命令可进行菜单创建、修改、删除,而显示和响应函数则利用函数指针进行保存,体现了回调函数的特性。

菜单浏览器类主要负责菜单结构的浏览导航。私有变量是2个菜单类指针,1个是根目录指针,1个是当前目录指针。

网上的资料有很多了,在此仅简单记录。

主要有2种方法实现用户自定义的菜单类,共同点是attachDisplay和attachAction所带的参数均为用户自定义的函数。

主要利用菜单类parseMenu函数实现,写了1个解析器,可以实现菜单类的自动生成。

/*脚本生成菜单*/void(*p_display[])(string&,vector&,unsignedint&)={/*root*/display_root,/*log*/display,/*operate*/display,/*menu*/display,/*constrast*/display_compare,/*adjust*/display,/*about*/display};void(*p_action[])()={/*root*/action_root,/*log*/action,/*operate*/action_operate,/*menu*/action,/*constrast*/action_compare,/*adjust*/action_adjust,/*about*/action};HeleMenu*m1=HeleMenu::parseMenu("{历史{},操作{save,unsave},菜单{对比度{1,2,3,4},clearAll,rePower,shutdown,校准{confirm},关于{(c)hele2024,这是一个菜单}}}",p_display,p_action);HeleMenuViewer::init(m1);HeleMenuViewer::gotoRoot();//到达根菜单while(true){//启动system("cls");HeleMenuViewer::display();HeleMenuViewer::action();}parseMenu所带的参数共3个,第1个是菜单结构字符串,也就是生成菜单结构的脚本,后面2个参数分别是显示函数指针数组和响应函数指针数组。为便于理解,下面我将用户自定义菜单结构展开:

主要使用上、下、左、右、空格、回车、退出这些按键,只实现部分功能。

运用C++面向对象思维进行编程,代码体积大,效率低;

利用脚本生成菜单是个新颖的思路,但容错性不好,没有对脚本进行规范化的检查,对用户不友好;

可以利用ArduinoSTL库,将此库移植进Arduino系列单片机项目中;

使用了动态分配内存技术,对于RAM较小的单片机,容易内存溢出。

THE END
1.c++的基本语法使用c++语法>>文章浏览阅读114次。思维导图。_c++语法 >>https://blog.csdn.net/w9791028/article/details/144335423
2.vscodedebugC++请根据你的项目结构和工具链做相应调整。确保正确设置 `"program"` 为你的 C++ 可执行文件路径,并根据需要添加其他配置。 4. 编译你的 C++ 项目: 在.vscode文件夹下创建一个名为 tasks.json的文件,并配置构建任务。根据你的项目类型和编译器选择合适的构建任务,比如 g++ 或 clang++。 https://zhuanlan.zhihu.com/p/644821555
3.蓝因子教育C++二维数组二维数组输出06下标整型arrayC++的二维数组是指具有两个下标的数组,有些数据要依赖于两个因素才能惟一地确定,因此才会引入二维数组。 C++二维数组的定义 C++中定义二维数组的一般格式: 类型标识符 数组名[常量表达式] [常量表达式] 例如: int array[3][4]; 表示数组名为array,类型为整型数组,有3行4列,12个元素。 https://www.163.com/dy/article/JIVUL8OS05566XY7.html
4.菜单编辑器(C++)MicrosoftLearn使用C++ 进行 Windows 编程 使用英语阅读 保存 添加到集合 添加到计划 通过 Facebookx.com 共享LinkedIn电子邮件 打印 项目 2023/10/18 8 个参与者 反馈 本文内容 操作方式 弹出菜单 要求 另请参阅 使用菜单,可以按照逻辑方式和易于查找的方式排列命令。 使用“菜单编辑器”,可以通过直接使用与已完成应用程序中非https://learn.microsoft.com/zh-cn/cpp/windows/menu-editor
5.c++怎样做一个漂亮的软件窗口菜单图标外观GetMenu()-GetSubMenu(0)-SetMenuItemBitmaps(0,MF_BYPOSITION, &bitmap, &bitmap);//具体哪个菜单项https://ask.zol.com.cn/x/4491010.html
6.如何在c++程序里添加菜单该菜单没有ID号,为popup类型 1.使用快捷键:ctrl+alt+回车键,全屏2.右击底部空白区域——>添加到面板 如果遇到dev c++菜单栏以及选项栏等其字体变为菱形问号的问题,解决方法如下:控制面板——时钟和区域——管理——更改系统区域设置——beta版:使用unicode UTF8提供全球语言支持,把打勾去掉就正常https://wen.baidu.com/question/145110973479717485.html
7.UnrealEngine4游戏开发入门经典Gameplay框架是一个C++或蓝图类集,它们管理着每个项目中游戏的规则、用户的输入和化身、摄像机、以及玩家的HUD。 注意:不仅仅是游戏 不要让术语愚弄了你。UE4最初是用来做游戏的,就有了许多与游戏相关的术语,后来也被用来制作许多不同类型的应用程序。例如,一个3D美工可以制作一个在专辑网站上显示3D模型的模型查看https://labs.epubit.com/bookDetails?id=N6999
8.软件开发流程之炒菜篇你点的每一个赞,我都认真的当成了喜欢~ Hello Everyone~ 小爱又双叒叕给大家送知识啦~ 今天一起看看 软件开发流程之炒菜篇 已关注关注重播分享赞关闭观看更多更多退出全屏视频加载失败,请刷新页面再试刷新视频详情 建议Wi-Fi 下观看 今天的分享到这里就要结束啦! https://mp.weixin.qq.com/s?__biz=MzAxMDU3OTMxMg==&mid=2648838210&idx=1&sn=a1619bcb359c7bca02a7f2f9b3c64aeb&chksm=8257786262328e15c78dba2a7535c35836030a2d1b3c4b24bbb492b058a14f88c31b60aaaf2b&scene=27
9.利用C++Builder定制系统菜单学习C++Builder的资料真的很少,下面是从一本书中学到的,不知对大家有没有帮助,拿出来给大家看看: 通常在应用程序的主窗体中,利用鼠标左键点击左上角的图标,会弹出一个菜单,称之为“系统菜单”。 在窗体中并没有系统菜单对应的组件,所以有时我们需要定制系统菜单时就比较麻烦。具体可以能过下面的步骤实现: http://m.it168.com/articleq_180998.html
10.使用C++WinForm如何创建菜单栏问答在C++ WinForm 中创建菜单栏,可以按照以下步骤操作:1. 打开 Visual Studio,创建一个新的 C++ WinForm 应用程序项目。2. 在 WinForm 窗体设计器https://www.yisu.com/ask/82824471.html
11.C++技巧:右键弹出菜单C++技巧:右键弹出菜单 void CLeftView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CTreeView::OnRButtonDown(nFlags, point); CMenu PopMenu; CMenu *pMenu; CPoint pthttps://www.51test.net/show/451825.html
12.剖析C++Builder中制作简单的功能按钮介绍中文版翻译质量太差,看的英文原版,内容不深,看看大师是怎么理解C++思想的,顺便提高英文阅读水平。 C++ Builder功能按钮菜单,如工具菜单(ToolMenu)。 在C++Builder中和C++中的菜单一样,使用它可以进一步增强应用程序的菜单界面,一般来说,功能按钮菜单和下来菜单密不可分。功能按钮菜单中含有功能按钮,功能是对于应用程序https://www.51cto.com/article/177113.html
13.devc++中文乱码怎么解决「devc++中文乱码怎么解决UTF8」DevC++是一款非常实用的C/C++编程工具,它支持Windows平台,具有简单易用、功能强大的特点,在使用过程中,有些用户可能会遇到中文乱码的问题,本文将详细介绍如何解决DevC++中文乱码的问题。 我们需要了解中文乱码的原因,中文乱码通常是由于编码方式不匹配导致的,在计算机中,文本是以字节的形式存储的,不同的字符可能对应着https://www.kdun.com/ask/8742.html
14.实验指导C语言程序设计教学运行与管理2.进入Visual C++,并新建一个C++源程序文件。 3.熟悉Visual C++的集成环境,了解各菜单项有哪些子菜单。 4.输入下面的程序(教材中的例1.1),注意区分大小写。 #include void main() { printf("This is a C program.\n"); } 编译并运行程序。 https://www.gxtcmu.edu.cn/ggxy/jysjs1/xxglyxxxtjysyxxxgcjyshs/jxyhygl2/cyycxsj/content_29231
15.WindowsAPI函数大全二C++MFC6. API之菜单函数 AppendMenu 在指定的菜单里添加一个菜单项 CheckMenuItem 复选或撤消复选指定的菜单条目 CheckMenuRadioItem 指定一个菜单条目被复选成"单选"项目 CreateMenu 创建新菜单 CreatePopupMenu 创建一个空的弹出式菜单 DeleteMenu 删除指定的菜单条目 http://www.jzxx.wj.czedu.cn/html/article4420823.html
16.官方给出了地平线5不启动闪退等问题的解决方法重新安装 Microsoft Visual C++ 程序 1.按 Windows 键 + R,输入“appwiz.cpl”,然后按 Enter。 2.在列表中找到 Microsoft Visual C++ 程序。 3.选择每个相关的条目,然后单击卸载。 从下方的链接下载并安装 Microsoft Visual C++ Runtime 的新版本。 http://club.gamersky.com/m/activity/480364