[wxWidgets]为wxListCtrl增加函数,给定行数列数获取字符串
来源:互联网 发布:python入门教程视频 编辑:程序博客网 时间:2024/05/17 20:30
Get wxString from wxListCtrl by index and column number.(Need to modify the source code of wxWidgets)
想直接用的可以跳过代码前的中文,直接参考改动便是
此改动的起因是我继承wxListCtrl写了一个新类,想要做出表头点击排序的效果,但是通过外部vector数据绑定带来的问题是,数据过多的时候,点击另一个列的表头排序,需要重新填装数据,才能确定每行原本的顺序,然后再用wxListCtrl::SetItemData填装排序数据,然后再wxListCtrl::SortItem,这样明显速度会比较慢。
合理的办法是:需要切换到另一列排序时,直接通过给定行数和列数读取wxListCtrl中的当前字串,按照需要的规则转成数据,然后用wxListCtrl::SetItemData填装,事实上,这样的确速度快了很多,但是中间遇到的问题是,我们亲爱的wxWidgets没有赋予wxListCtrl这个功能! wxListCtrl::GetItemText这些我看了半天文档,貌似都是直接返回第一列的值,所以只好自己动手丰衣足食了。。。
再啰嗦两句解释下改动,wxListCtrl是继承自wxGenericListCtrl这个类,而wxListMainWindow是wxGenericListCtrl这个类中的一个成员,我们其实是通过这个成员wxListMainWindow::GetLine()获取的某一行的wxListLineData,然后用wxListLineData::GetText(int col)获取的莫列上的字串。
改动示例采用版本是2.8.10,其他版本如有变更,照样子
New function:
wxListCtrl::GetTextByIndexCol(long index, int col)
For getting the text by given index and column number.
[xxx@dev01 wxWidgets-2.8.10]$ diff -c ../wx/wxWidgets-2.8.10/src/generic/listctrl.cpp src/generic/listctrl.cpp *** ../wx/wxWidgets-2.8.10/src/generic/listctrl.cpp 2009-03-06 20:10:57.000000000 +0800--- src/generic/listctrl.cpp 2011-08-05 21:47:54.267411851 +0800****************** 505,510 ****--- 505,512 ---- virtual ~wxListMainWindow(); + wxString GetTextByIndexCol(long index, int col) const; + bool HasFlag(int flag) const { return m_parent->HasFlag(flag); } // return true if this is a virtual list control****************** 4668,4673 ****--- 4670,4682 ---- return wxNOT_FOUND; } + + wxString wxListMainWindow::GetTextByIndexCol(long index, int col) const+ {+ wxListLineData *line = this->GetLine((size_t)index);+ return line->GetText( col );+ }+ long wxListMainWindow::FindItem(long start, wxUIntPtr data) { long pos = start;****************** 4995,5000 ****--- 5004,5014 ---- delete m_imageListState; } + wxString wxGenericListCtrl::GetTextByIndexCol(long index, int col) const+ {+ return m_mainWin->GetTextByIndexCol(index, col);+ }+ void wxGenericListCtrl::CalculateAndSetHeaderHeight() { if ( m_headerWin )
[xxx@dev01 wxWidgets-2.8.10]$ diff -c ../wx/wxWidgets-2.8.10/include/wx/generic/listctrl.h include/wx/generic/listctrl.h*** ../wx/wxWidgets-2.8.10/include/wx/generic/listctrl.h 2009-03-06 20:10:58.000000000 +0800--- include/wx/generic/listctrl.h 2011-08-05 21:48:19.279480048 +0800****************** 52,57 ****--- 52,59 ---- } virtual ~wxGenericListCtrl(); + wxString GetTextByIndexCol(long index, int col) const;+ bool Create( wxWindow *parent, wxWindowID winid = wxID_ANY, const wxPoint &pos = wxDefaultPosition,
改动不多,就两个文件,改完以后记得再make和make install一下。(前提是你原来就用源代码自己编译安装的。)
然后就可以使用新添加的函数wxListCtrl::GetTextByIndexCol(long index, int col),参数就是行列,返回就是wxString
- [wxWidgets]为wxListCtrl增加函数,给定行数列数获取字符串
- JS获取表格行数和列数
- 获取ResultSet的行数和列数
- java获取ResultSet的行数列数
- java获取ResultSet记录行数 、 列数
- JS获取表格行数列数单元格
- Excel获取行数和列数
- javascript获取表格行数和列数
- 获取文本框的行数和列数
- 获取ResultSet的行数和列数
- 获取ResultSet的行数和列数
- Resultset获取行数和列数
- C# 获取当前文件名、执行函数、执行代码行数和列数
- C# 获取当前文件名、执行函数、执行代码行数和列数
- C# 获取当前文件名、执行函数、执行代码行数和列数
- matlab-基础 size函数获取一个矩阵的行数与列数
- NOPI获取行数,列数,自动调整列宽
- 获取二维数组行数列数,获取数组维度
- openSUSE超级用户密码修复一例
- Java 中的 ClassPath 和 Package
- sed 用法介绍及小节【转自网络】
- linux 查找命令
- HelloWorld问题集精华 --错误集锦
- [wxWidgets]为wxListCtrl增加函数,给定行数列数获取字符串
- TechNet中文广播之IT职业规划
- Spring 注解@Component,@Service,@Controller,@Repository
- ssh1的各个xml配置和功能说明
- CreateWindow
- linux文件目录
- poj 2299 Ultra-QuickSort
- PHP开发工具ZendStudio_6.1乱码解决终极方法
- 系统架构搭建要考虑的因素