首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在wxwidget中实现虚拟滚动

如何在wxwidget中实现虚拟滚动
EN

Stack Overflow用户
提问于 2022-07-03 14:09:00
回答 1查看 116关注 0票数 0

我使用wxScrolledWindow来显示数据(以行和列形式显示)。例如,我有4列和大约1200行(它们都有相同的高度)。例如,第一列代表名称,第二列代表电话号码,等等。这很好,但问题是,由于我已经将所有的1200行添加到wxScrolledWindow中,程序正在消耗大量的内存。

因此,我希望只有用户可以看到的行应该在给定的时间出现在wxScrollWindow中,并且当用户开始滚动时,应该动态地创建其他行。对此进行搜索后,我了解到这被称为虚拟滚动wxWidgets使用wxLC_VIRTUAL样式在wxListCtrl中提供了这个功能。但问题是,我无法自定义wxListCtrl的外观。例如,假设我的自定义滚动列表中的第3列包含一个带有文本的按钮,第4列包含一些wxStaticText,我希望在保持虚拟滚动的同时更改每一行的高度、背景颜色。

所以,我的问题是:

  1. 有没有一些文档可以让我读到虚拟滚动理论(wxListCtrl的虚拟滚动是基于这个理论的),这样我就可以自己实现它了。请注意,我读过wxWidgets的github回购,但从那里我无法弄清楚,而且我也感到那里缺少文档。
  2. 是否有为wxScrollWindow或任何其他窗口在wxwidget中实现虚拟滚动的工作演示。我的意思是,这样我就可以把它作为一个参考和起点。

PS:我也在网上搜索过同样的东西,但是找不到任何文章来展示我们如何在wxwidget中实现虚拟滚动,所以我决定自己问它。

EN

回答 1

Stack Overflow用户

发布于 2022-07-03 17:09:31

没有所谓的“虚拟滚动”,这就是为什么你没有找到任何解释如何去做的原因。wxLC_VIRTUAL标志重用旧的微软术语来调用控件,而不是完全存储它们的数据“虚拟”,但这只是与滚动相关的。

滚动本身就是通过绘制“逻辑画布”来实现的,它可能比它的“物理视图”(即窗口)要大得多,其偏移量由滚动条位置决定。因此,唯一要做的就是正确地设置这个偏移量,这是由PrepareDC()函数wxScrolledCanvaswxScrolledWindow完成的,这两个函数实际上都是wxScrolled<>模板的专门化。在将wxPaintDC传递给这个函数之后,您应该像往常一样使用它(嗯,也许可以通过不绘制可见区域以外的部分来优化),而根本不关心滚动--但是它会工作,都是独立的。您应该查看滚动示例,以了解这到底是如何工作的。

注意,wxScrolled<>假定您的所有行都具有相同的高度。如果不是这样的话,您可以使用wxVScrolledWindow ("V“表示”变量“,如可变高度行)或继承自它的已经提到的wxVListBox

允许合理定制的最简单的类是wxSimpleHtmlListBox

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72847148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档