wxWidget方法创建多级动态菜单

wxWidget中创建动态菜单及动态创建其它控件和动态事件关联 wxWidget中创建动态菜单及动态创建其它控件和动态事件关联 #@ wxWidget中创建动态菜单及动态创建其它控件和动态事件关联 1.先创建一个初始化函数,preInit();比如: 在main.h中 class MainFrame : public MainFrameBase { public: MainFrame( wxWindow *parent ); virtual ~MainFrame(); wxTimer* m_timer;//创建一个timer指针,放在public里,成为全局 阅读详情

得先有一个菜单配置文件menu.cfg

[menu](&Aquisition){}
	[menu](Tool Control)
		[menu](OCTselect)
			[exec](sysa[K]...	F1){sysa}<./file_selection.sh> 
			[exec](sysb[K]...	F2){sysb}<ls -l> //这里面写执行路径
			[exec](RDR...	F3){RDR}<ls -l> 
		[end]
	[end]
	[exec](&Seismic Logging Software...){Seismic Logging Software}<ls -l> 
	[exec](&Toolcmd......){Toolcmd}<ls -l> 
	[exec](&Communication Utils...){Communication Utils}<ls -l> 
[end]

程序里这样写

if(file.Open(wxT("menu.cfg"))) {
		size_t i;
		size_t x,y,z,u,w;

		wxString line;
		wxString* execCmd;

		for(i = 0; i<file.GetLineCount(); i++) {
			line = file.GetLine(i);
			if(line.Length() < EMPTYLINE_LEN )
				continue;

			x = line.Find(wxT("[menu]"));
			if(x != wxNOT_FOUND) {
				if(ident == 0) {
					m[0] = new wxMenu();
					y = line.Find(wxT('(')) + 1;
					z = line.Find(wxT(')')) - 1;
					m_menubar->Append( m[0], line.SubString(y,z));
					ident = 1;
				} else {
					m[ident] = new wxMenu();
					y = line.Find(wxT('(')) + 1;
					z = line.Find(wxT(')')) - 1;
					m[ident-1]->Append(-1, line.SubString(y,z), m[ident]);
					ident = ident + 1;
				}
			} else {
				x = line.Find(wxT("[exec]"));
				if(x != wxNOT_FOUND ) {
					y = line.Find(wxT('(')) + 1;
					z = line.Find(wxT(')'), true) - 1;
					u = line.Find(wxT('{')) + 1;
					w = line.Find(wxT('}')) - 1;

					//menuExec = m[ident-1]->Append(-1, line.SubString(y,z), line.SubString(u,w), wxITEM_NORMAL);
					menuExec = m[ident-1]->Append(-1, line.SubString(y,z), line.SubString(u,w), wxITEM_NORMAL);
					wxString aa = line.SubString(u,w);
					//std::cout<<aa.ToUTF8()<<"这是menuItem名"<<std::endl;

					u = line.find(wxT('<')) + 1;
					w = line.find(wxT('>')) - 1;
					this->Connect( wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(EclipsFrame::OnExec), menuExec );//OnExec()里根据不同的menuitemID执行不同的代码
					//execCmd = &line.SubString(u,w);
					execCmd = new wxString(line.SubString(u,w));
					//std::cout<<"item名:"<<aa.ToUTF8()<<"  命令:"<<execCmd->ToUTF8()<<std::endl;
					m_execCmd->Put(menuExec->GetId(), (wxObject *)execCmd);
					m_menuItemHash[line.SubString(y,z).BeforeFirst(wxT('.'))] = menuExec->GetId();
//std::cout << menuExec->GetId() << ":" << line.SubString(y,z).BeforeFirst(wxT('.')).mb_str() << std::endl;
				} else {
					x = line.Find(wxT("[end]"));
					if(x != wxNOT_FOUND)
						ident = ident - 1;
					x = line.Find(wxT("[space]"));
					if(x != wxNOT_FOUND)
						m[ident-1]->AppendSeparator();
				}
			}
		}
	}
wxWidgets实战:在CodeBlocks中创建带Notebook和右键菜单的GUI应用 本文详细介绍了如何使用wxWidgets框架在CodeBlocks中开发带Notebook和右键菜单的C++ GUI应用。从环境配置到主窗口设计,再到多页签管理和上下文菜单实现,提供了完整的代码示例和最佳实践,帮助开发者快速构建跨平台的窗口界面程序。 阅读详情

相关推荐

第一个wxWidgets程序

设置开发环境在创建应用程序前,需要设置Visual Studio开发环境和WxWidgets的相关变量,具体包括: 包含目录:包含WxWidgets头文件。在项目“属性→配置属性→C++目录→包含目录”项中,添加C:\wxWidgets-3.0.2\include\msvc和C:\ wxWidgets-3.0.2\include。 库目录:包含WxWidgets库文件。在项目“属性→配置属性→C++

penny_hardaway的专栏 3559

wxWidgets:菜单

和菜单有关的类主要有两个:wxMenuItem和wxMenu。wxMenuItem用于表示一个菜单项,而wxMenu是wxMenuItem的弹出或下拉列表。 现在让我们看看如何给我们的框架类加上菜单: MyFrame::MyFrame : wxFrame { // 新建下拉菜单 // 该下拉菜单将显示在MyFrame的MenuBar上 // 所以我...

weixin_33763244的博客 723

wxWidgets:如何在C++中添加菜单栏

以上代码定义了一个名为MyFrame的窗口类,包含了一个wxMenuBar对象和两个wxMenu对象。在构造函数中,将wxMenu对象添加到wxMenuBar对象中,并设置到窗口中。本文将介绍如何在C++中使用wxWidgets实现菜单栏的添加和使用。首先,需要在窗口类中定义一个wxMenuBar对象和若干个wxMenu对象,然后将wxMenu对象加入到wxMenuBar对象中。通过使用wxWidgets提供的丰富功能,可以轻松创建出美观、易用的菜单栏,为用户提供更好的体验。

. 583

wxWidgets-动态事件,自定义事件

wxEvtHandler::Connect frame->Connect(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MyFrame::OnQuit)); frame->Connect(wxID_ABOUT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MyFram

lalala003的专栏 1001

wxWidgets:wxMenu类用法

wxWidgets:wxMenu类用法wxWidgets:wxMenu类用法用法详细说明 wxWidgets:wxMenu类用法 用法详细说明 #include <wx/menu.h> wxMenu的继承图 菜单是一个弹出(或下拉)项目列表,其中一个可以在菜单消失之前选择(点击别处关闭菜单)。 菜单可用于构建菜单栏或弹出菜单。 菜单项有一个与之关联的整数 ID,可用于标识选择或以某种方式更改菜单项。具有特殊标识符wxID_SEPARATOR 的菜单项是一个分隔符项,它没有关联的命令,只是在菜单

希望我的博客,能帮上你解决学习中工作中所遇到的问题 882

基于wxwidgets实现的自定义菜单

基于wxbutton使用自定义Button创建菜单按钮,基于wxpopupwindow实现下拉菜单,定制菜单栏的高度和背景颜色,外观还是蛮美观的。

wxWidgets动态事件表爱好者备查手册

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34381666的博客 315

中兴问天 BE7200MAX SFP 光口用华为猫棒替代光猫完整配置教程

PPPoE 账号密码:若原光猫为 Route 模式,在宽带设置页可见用户名,密码需按 F12 打开浏览器开发者模式,点击密码输入框,查看代码中 “value=” 后的内容即为明文密码。若仍失败,核对 PON 类型是否与运营商网络匹配。PON 认证信息:LOID(逻辑 ID,部分地区含密码)、设备 SN 码(标签或设备信息页)、PON 类型(GPON/EPON,运营商网络类型)。电脑保持与路由器连接,访问路由器管理地址(默认通常为 192.168.5.1,可参考路由器说明书),登录后台。

Gulper_Eel的博客 3331

21、wxWidget对话框之wxFileDialog

#include <wx/wx.h> #include <wx/wfstream.h> class MyFileDialog:public wxFrame { public: MyFileDialog(const wxString& title); protected: wxTextCtrl* tc; void OnOpen(wxCommandEvent& event); void OnOpenStream(wxCommandEve...

sq8706的专栏 679

绕过ROS2!在RDK X5上直接用Python调用海康相机C++ SDK的避坑指南

本文详细介绍了在RDK X5上绕过ROS2,直接使用Python调用海康相机C++ SDK的轻量化方案。通过Cython构建Python绑定,提取海康相机SDK核心组件,实现高效图像采集。文章涵盖环境准备、Cython接口设计、编译系统配置及性能优化技巧,特别适合ARM64平台开发者。

weixin_33712987的博客 248

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

MFC多语言方式——wxWidget多语言移植

此前移植了wxWidget代码,将其编写成动态库,可用在MFC中!相关代码在博客资源中,与文章同名。 1.移植wxWidget部分代码,生成DLL。在wxLocale.h中定义了宏_(),目的是为了使用Poedit可以将_()中包含的内容搜索出来,利用了wxWidget制作多语言的方便。http://d.download.youkuaiyun.com/down/3418287/songly1  2.将生成的w

songly1的专栏 5619

基于 FPGA Vivado 信号发生器设计(附源工程)

今天给大侠带来基于 FPGA Vivado 信号发生器设计,开发板实现使用的是Digilent basys 3,如有想要入手basys3开发板的,可以联系牛总:18511371833。话不多说,上货。 本篇掌握基于 FPGA Vivado 信号发生器设计(附源工程),掌握基于添加文件和IP的Vivado工程设计流程,掌握基于Tcl的Vivado工程设计流程,学习信号发生器的基本组成结构。获取本篇相关源工程代码,可在公众号内回复“信号发生器设计源工程”。 设计原理 信号发生器...

7990

Wxwidget 动态加载资源文件

一.创建自己的资源文件 你可以从一个xml文件中加载对话框,frame窗口,菜单条,工具条等等。不用c++代码去实现,这符合代码界面和代码分离的原则。我们可以使用DialogBlocks,XRCed和wxGlade还有wxDesigner工具去绘制我们界面保存在xxx.xrc格式的文件中 二.加载资源文件 要使用rXRC文件,在代码中包含wx/xrc/xmlres.h头文件。如果你打

一璐有你的专栏 1925

11、频率响应与伯德图详解

本文详细介绍了电子电路分析中的频率响应与伯德图,涵盖分贝的定义与计算、带宽与3dB点、放大器反馈机制、倍频程与十倍频程概念,并系统讲解了基于实数和复数零极点的伯德图构建方法。通过具体示例分析了传递函数的渐近近似、幅度与相位响应,并结合MATLAB工具展示了伯德图的绘制过程。文章旨在帮助读者深入理解电路在不同频率下的行为特性,为电路设计与优化提供理论支持。

white的博客 172

ECU诊断功能测试:从理论到实践

ECU诊断功能是指通过特定的诊断协议与ECU进行通信,以获取ECU的状态信息、故障码、数据流等,并执行特定的诊断操作。诊断功能的主要目的是帮助开发人员和维修人员快速定位和解决ECU中的问题,确保车辆的安全性和可靠性。UDS协议是ISO 14229标准的一部分,定义了一系列的诊断服务,如读取故障码、清除故障码、读取数据流等。UDS协议基于CAN(Controller Area Network)总线,具有较高的灵活性和扩展性。读取故障码是诊断功能中最基本的操作之一。通过读取故障码,可以快速定位ECU中的问题。

闲人编程的博客 1806

wxwidget编译安装_MSW下wxWidgets的安装与编译

教程摘自网上各大博客、贴吧、论坛,结合自己的实践做了一些实质性的修改。一、安装建议将其安装某个驱动器的根目录下,比如:E:\ wxWidgets-2.8.12 目录下(尾部数字以您所使用的wxWidgets版本为准)。二、编译上一步安装wxWidgets,仅得到源代码文件及一些说明。我们还需要将其中的源代码编译成“库”文件。今天我们将把wxWidgets编译译成四种形式:动态链接库 + 调试版动态...

weixin_39732866的博客 874

电化学-论文分享-NanoStat: An open source, fully wireless potentiostat

本文主要分享论文NanoStat: An open source, fully wireless potentiostat,并记录学习笔记。如果有条件,建议看原文最好。

分享技术笔记,希望对大家能够有一定的帮助,同时也通过归纳总结提升自己的个人能力。 2873

学习wxWidgets的笔记一

<br />2010-7-17<br />一:关于一个wxWidgets的一个小例子<br /> <br />1.       wxT这个宏让你的代码兼容Unicode模式,这和另外一个宏_T的作用完全一样<br />2.       IMPLEMENT_APP(MyApp);//告诉wxWidget,我创建了一个MyApp的应用程序,wxWidget创建MyApp的类.<br />这个宏除了上述的功能以外,还会检查编译应用程序使用的库文件是否和当前的库文件的版本相匹配,如果没有这种检查,由此而产生的一些运

Big data enthusiast 2057

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 105

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++GUI之wxWidgets(8)-编写应用涉及的类和方法(4)-事件处理(2)

这个宏在类声明的某处。 它出现在哪里并不重要,但通常会将它放在末尾,因为宏在内部更改访问类型,所以如果后面没有任何内容,这是最安全的。完整的类声明可能如下所示: 接下来,必须定义事件表,并且与任何定义一样,必须将其放置在实现文件中。 事件表告诉wxWidgets如何将事件映射到成员函数,在我们的示例中,它可能如下所示: 注意,必须在事件表定义中提到要用于事件处理的方法;仅仅在MyFrame类中定义它是不够的。现在让我们来看看这个定义的细节:最后,需要实现事件处理程序。 如前所述,所有事件处理程序都采用一个w

The research on computer technolog 841

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Code::Blocks + wxWidget构造C++开发环境

1. 下载并安装Code::Blocks   下载地址 http://www.codeblocks.org/,为了方便注意要下载codeblocks-8.02mingw-setup.exe   我用的安装路径为:C:/Program Files/CodeBlocks/2. 下载并安装wxWidget   下载地址 http://www.wxwidget.org/   我用的安装路径为:C:/wx/

fengzixue的专栏 2045

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

wxWidgets入门--HelloWorld

参考wxWidgets官方Hello World in wxWidgets编写一个简单的wxWidgets入门。 从小的成功积累到大的成功 控制台/终端 #define WXUSINGDLL #define __WXMSW__ #define _UNICODE #include int main(){ wxPrintf(wxT("Hello")); } 对话框

jdzhangxin的博客 1415
上一篇: linux里${}的用法
下一篇: wxWidget动态控件
杨小乐coder
博客等级 码龄7年 11粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值