wxWidgets学习笔记:wxListCtrl使用详解
使用案例
wxListCtrl中放21个item,每一行放两个item,每个item显示图标和名字,点击某个图标,该图标呈现响应状态并响应对应的事件
以下是使用wxListCtrl实现放置21个item,每一行放两个item,每个item显示图标和名字,点击某个图标,该图标呈现响应状态并响应对应的事件的代码:
cpp
Copy
// 定义图标的状态
enum IconState {Normal,Selected,Focused
};
// 定义每个项目的数据结构
struct ItemData {wxString name;wxBitmap normalIcon;wxBitmap selectedIcon;IconState state; // 图标状态
};
// 创建列表控件
wxListCtrl* ComponentList = new wxListCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_SINGLE_SEL);
ComponentList->InsertColumn(0, wxT("Name"));
ComponentList->InsertColumn(1, wxT("Name"));
// 创建项目数据
std::vector<ItemData> itemData = {{ wxT("Item 1"), wxBitmap(wxT("icon1.png"), wxBITMAP_TYPE_PNG), wxBitmap(wxT("icon1_selected.png"), wxBITMAP_TYPE_PNG), Normal },{ wxT("Item 2"), wxBitmap(wxT("icon2.png"), wxBITMAP_TYPE_PNG), wxBitmap(wxT("icon2_selected.png"), wxBITMAP_TYPE_PNG), Normal },// ...
};
// 插入项目
for (int i = 0; i < itemData.size(); i += 2) {int row = ComponentList->GetItemCount();ComponentList->InsertItem(row, itemData[i].name, 0);if ((i + 1) < itemData.size()) {ComponentList->InsertItem(row, itemData[i + 1].name, 1);}
}
// 设置图标
for (int i = 0; i < itemData.size(); i++) {wxListItem item;item.SetMask(wxLIST_MASK_IMAGE);item.SetColumn(i % 2);item.SetId(i / 2);item.SetImage(itemData[i].normalIcon);ComponentList->SetItem(item);
}
// 绑定事件处理函数
ComponentList->Bind(wxEVT_LIST_ITEM_SELECTED, [=](wxListEvent& event) {int index = event.GetIndex();int column = event.GetColumn();if (column >= 0 && index >= 0) {// 获取项目数据ItemData& data = itemData[index * 2 + column];// 更新图标状态data.state = Selected;wxListItem item;item.SetMask(wxLIST_MASK_IMAGE);item.SetColumn(column);item.SetId(index);item.SetImage(data.selectedIcon);ComponentList->SetItem(item);// 处理事件wxLogMessage(wxT("Selected: %s"), data.name);}
});
ComponentList->Bind(wxEVT_LIST_ITEM_DESELECTED, [=](wxListEvent& event) {int index = event.GetIndex();int column = event.GetColumn();if (column >= 0 && index >= 0) {// 获取项目数据ItemData& data = itemData[index * 2 + column];// 更新图标状态data.state = Normal;wxListItem item;item.SetMask(wxLIST_MASK_IMAGE);item.SetColumn(column);item.SetId(index);item.SetImage(data.normalIcon);ComponentList->SetItem(item);// 处理事件wxLogMessage(wxT("Deselected: %s"), data.name);}
});
// 创建组合框架并添加控件
wxStaticBoxSizer* CompGroupLayout = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Components"));
CompGroupLayout->Add(ComponentList, 1, wxEXPAND | wxALL, 5);SetSizerAndFit(CompGroupLayout);
在这个例子中,我们定义了一个IconState枚举用于表示图标的状态,以及一个ItemData结构体用于存储每个项目的数据。然后我们创建了一个列表控件,并插入了两列。接着,我们创建了一个包含21个项目数据的数组,并使用循环插入了这些项目到列表中。同时,我们也使用循环设置了每个项目的图标。接下来,我们绑定了wxEVT_LIST_ITEM_SELECTED和wxEVT_LIST_ITEM_DESELECTED事件,并在事件处理函数中更新了所选项目的图标状态,并输出对应的事件信息。
值得注意的是,在本例中我们使用了wxLC_SINGLE_SEL样式来设置列表控件的选择模式为单选模式。这意味着用户只能选择一个项目。如果你希望用户可以选择多个项目,请使用wxLC_MULTIPLE_SEL样式。
相关文章:
wxWidgets学习笔记:wxListCtrl使用详解
使用案例 wxListCtrl中放21个item,每一行放两个item,每个item显示图标和名字,点击某个图标,该图标呈现响应状态并响应对应的事件 以下是使用wxListCtrl实现放置21个item,每一行放两个item,每个item显示图…...
酷炫的python日志库-loguru
Loguru是一个python的日志库,比logging更简单,好用,功能丰富。 GitHub - Delgan/loguru: Python logging made (stupidly) simple 安装 pip install loguru 特征 开箱即用,补样板没有处理程序,没有清理程序ÿ…...
html根据图片变换背景色
html根据图片变换背景色 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.item {width: 50%;height: 80vh;margin: 0 auto;border: 1px solid red;}</style> </head><body>…...
“深入探究JVM:揭秘Java虚拟机的工作原理“
标题:深入探究JVM:揭秘Java虚拟机的工作原理 摘要:本文将深入探究Java虚拟机(JVM)的工作原理,包括JVM的架构、内存管理、垃圾回收机制以及即时编译等关键概念。通过详细解释这些概念,读者将能够…...
小程序的api使用 以及一些weui组件实列获取头像 扫码等
今日目标 响应式单位rpx小程序的生命周期 【重点】20%小程序框架 weui 【重点】 50%内置API 【重点】30%综合练习 1. 响应式rpx 1.1 rpx单位 rpx是微信小程序提出的一个尺寸单位,将整个手机屏幕宽度分为750份,1rpx 就是 1/750,避免不同手…...
海思ss928部署手写数字识别模型
大致流程--------------------------------------------------------------------------------------------------------------------- 模型转换---------------------------------------------------------------------------------------------------- 1:准备MNI…...
组学知识速递(五)|ChIP-seq知多少?
近段时间来,我们合作的ChIP-Seq技术发表的高分成功案例一篇接一篇,您是否心动了呢?本篇文章,总结了ChIP-Seq实验部分重点知识点,开启ChIP-Seq的你绝不要错过! Q1 什么是ChIP-Seq? ChIP-Seq即染…...
2308C++内存序概略
参考 释放:在释放前的任意读写操作不能放在此操作之后. 获取:在获取后的任意读写操作不能放在此操作之前. 放松:只保证本操作的原子性,一般用于统计. 消费:在加载后的依赖本原子变量的,都不能重排在本操作之前. 获取释放:获取释放 序列一致,完全一致....
【C++】string的使用
1、string的使用 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;void Test1() {string s1;string s2("hello");cin >> s1;cout << s1 << endl;//strcat【字符串拼接】string ret1 s…...
Android 周期任务
AlarmManager使用 1.创建意图 // 创建意图,启动MonthlyTaskServiceIntent intent new Intent(getContext(), TimeTaskService.class); // 传递数据intent.putExtra(TimeTaskService.KEY_TITLE,userRemind.getTitle());intent.putExtra(TimeTaskService.KEY_DEC,u…...
修改第三方组件默认样式
深度选择器 修改el-input的样式: <el-input class"input-area"></el-input>查看DOM结构: 原本使用 /deep/ 但是可能不兼容 使用 :deep .input-area {:deep(.el-input__inner){background-color: blue;} }将 input 框背景色改为…...
【游戏客户端】制作你玩我猜Like玩法
【游戏客户端】制作你玩我猜Like玩法 大家好,我是Lampard猿奋~~ “你画我猜”相信大家都不陌生,当初这款小游戏可谓茶余饭后必玩之选,风头一时无二。今天要和大家分享如何实现一个你玩我猜Like的玩法。 我们可以简单的把需求拆成两个个部分&…...
分页查询从接口到实现,统一对日期类型进行格式化处理
编写Service实现类编写Mapper的sql,但复杂的sql语句需要写到mapper对应的xml文件中日期类型格式化处理 /*** 扩展springmvc框架的消息转换器* param converters*/Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> conve…...
栈和队列详解(1)
目录 一、什么是栈? 二、创建一个我们自己的栈 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化栈结构体 2.2尾插(压栈) 2.3栈存放的元素个数和判断栈是否为空 2.4获取栈顶元素 2.5出栈 2.6摧毁栈 2.7测试接口 三、…...
苏州OV泛域名RSA加密算法https
RSA加密算法是一种非对称加密算法,它被广泛应用于信息安全领域。与对称加密算法不同,RSA加密算法使用了两个密钥,一个公钥和一个私钥。公钥可以公开,任何人都可以使用它加密信息,但只有私钥的持有者才能解密信息。RSA加…...
凯迪正大—微机继电保护校验仪
一、继电保护测试仪产品概述 KDJB-802继电保护测试仪是在参照电力部颁发的《微机型继电保护试验装置技术条件(讨论稿)》的基础上,听取用户意见,总结目前国内同类产品优缺点,充分使用现代的微电子技术和器件实现的一种新…...
Linux文件属性与权限管理(可读、可写、可执行)
Linux把所有文件和设备都当作文件来管理,这些文件都在根目录下,同时Linux中的文件名区分大小写。 一、文件属性 使用ls -l命令查看文件详情: 1、每行代表一个文件,每行的第一个字符代表文件类型,linux文件类型包括&am…...
Centos7.9安装lrzsz进行文件传输---Linux工作笔记059
这里咱们lrzsz命令,需要用来进行文件传输,因为如果不安装这个命令的话,那么 传输安装包什么的就不方便因为只有少数传输工具,才支持,直接拖拽的.没有的时候就可以用这个工具,用命令来传输 直接就是: sz 文件名 就可以把文件下载下来 rz 选择一个文件, 就可以把文件上传到当…...
酒吧座位全解析 小白必看
相信还有很多第一次去酒吧的朋友们还不了解吧台、散台、卡座的区分,下面我简单解说一下,如有错漏,欢迎指正!一、吧台吧台是酒吧的核心部位,走进酒吧门,首先映入眼帘的就是吧台,一排人围着吧台几…...
DAY19
题目一 空间尝试模型 一个样本做行一个样本做列 范围尝试模型 以....做分隔 dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数) 这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
