0
我已經實現了wxListCtrl
,並且想按字母順序對列表進行排序。雖然這聽起來與here的問題類似,但它與一個主要區別有所不同:我使用SetItemData()
和GetItemData()
來存儲矢量的索引。按字母順序排序wxListCtrl而不使用SetItemData
提供的代碼here很好地工作,但需要GetItemData()
。即使比較函數沒有引用任何項目數據,但如果省略它,排序也不完整。
static int wxCALLBACK MyCompareFunction(long item1, long item2, long sortData) {
wxSortedListCtrl *ctrl = (wxSortedListCtrl*) sortData;
wxString a, b;
a = ctrl->GetItemText(item1, ctrl->GetSortedColumn());
b = ctrl->GetItemText(item2, ctrl->GetSortedColumn());
if(ctrl->IsSortedAscending())
return a.CmpNoCase(b);
return b.CmpNoCase(a);
}
bool wxSortedListCtrl::SortItems(void) {
long item = -1;
for (;;) {
item = GetNextItem(item);
if (item == -1)
break;
SetItemData(item, item);
//this is needed even though MyCompareFunction doesn't use it AT ALL.
//however it overwrites the data that I use myself...
}
return wxListCtrl::SortItems(MyCompareFunction, (long)this);
}
我將如何使用這種功能,同時保持我給自己定下了與SetItemData()
項目數據?