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++是一种功能强大的编程语言,也可以用于开发图形界面应用程序。本文将介绍通过C++开发图形界面应用程序的基本步骤,并以一个简单的计算器应用程序为例进行演示。 https://blog.csdn.net/fb98237834/article/details/144331183
2.MicrosoftC/C++文档MicrosoftLearn了解如何使用 C++ 针对平台和设备开发应用程序、服务和工具。https://docs.microsoft.com/zh-cn/cpp
3.C++制作的网页浏览器程序源代码使用vs2005 MFC制作的个人浏览器,其中有自己制作的地址栏、工具栏和菜单栏,遗憾的是标题栏与网页地址同步的功能没有实现。 上传者:qq_43031949时间:2020-06-14 自己的浏览器(c++builder) 自己制作浏览器实例。实例程序,带有源码,直接可用,c++builder的精彩编程!! https://www.iteye.com/resource/amandinelaura-11022692
4.剖析C++Builder中制作简单的功能按钮介绍剖析C++Builder中制作简单的功能按钮介绍 中文版翻译质量太差,看的英文原版,内容不深,看看大师是怎么理解C++思想的,顺便提高英文阅读水平。 C++ Builder功能按钮菜单,如工具菜单(ToolMenu)。 在C++Builder中和C++中的菜单一样,使用它可以进一步增强应用程序的菜单界面,一般来说,功能按钮菜单和下来菜单密不可分。功能https://www.51cto.com/article/177113.html
5.C语言制作超级玛丽菜单模块源码分享C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。 C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取https://www.jianshu.com/p/4eda6014053b
6.[TC学堂]8.界面美化与定制::shanny只包含ICO图标的ICL图标库可以用图标工具Axialis IconWorkshop 或 Microangelo Creation生成,另外还包含BMP图片或CUR光标的DLL资源文件则需要用Visual C++制作,事实上我们也可以把这三种不同的资源(主程序及文件图标,驱动器栏图标以及鼠标光标)都打包在同一个DLL资源文件里。 https://xbeta.info/studytc/tc008.htm
7.C++实例菜单操作pythonschoolC++实例 菜单操作 #include <afxwin.h>#include"menu.h"//载入资源文件所使用之标头文件classMyFrame :publicCFrameWnd {private: CMenu MainMenu,*SysMenu, *PopMenu, *SubMenu; COLORREF color;public: MyFrame()//建构符{ Create(NULL,//产生标准视窗"Menu",//视窗标题WS_OVERLAPPEDWINDOW|WS_VISIBLE,//视窗https://www.cnblogs.com/pythonschool/archive/2013/03/12/2956156.html
8.VS项目详解C/C++三步制作超简单进度条【VS项目详解】C/C++ 三步 制作超简单进度条 技术标签:VSC/C++进度条简单详解 文章目录 【1/7】项目效果 【2/7】项目环境 【3/7】步骤摘要 【4/7】步骤详解 ①创建一个窗口 ②绘画一个矩形 ③填充该矩形 【5/7】 其它修饰 1)显示文字 2)窗口最顶层 3)按键循环 【6/7】 完整代码 【7/7】一些补充https://www.pianshen.com/article/4269403388/
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++创建桌面快捷方式开始菜单的实现代码复制代码 代码如下: void CInstall_ProgressDlg::CreateShortCut(CString csLinkPath, CString csExePath, CString csIconPath) { HRESULT hres; hres = ::CoInitialize(NULL); if(S_OK == hres) { //delete old link CFileFind cfind; if(cfind.Findhttps://www.xiuzhanwang.com/a1/Cyuyan/4348.html
12.Wix打包系列(七)添加系统必备组件的安装程序在使用ClickOnce发布时,vs自带了一个系统必备的列表(包括.Net Framework 和c++运行库等),列表中的必备程序我们是可以用上面的方法制作引导程序;但是这种方法只适用于将系统必备列表中的组件打包,而且需要编写一些xml代码,更好的方法是使用BMG(Bootstrapper Manifest Generator)工具,用它可以不用写任何代码为系统必备列表https://developer.aliyun.com/article/265818