默认 CListCtrl 数据即将排序
Posted
技术标签:
【中文标题】默认 CListCtrl 数据即将排序【英文标题】:Default CListCtrl data is coming sorted 【发布时间】:2013-11-13 06:45:19 【问题描述】:我正在逐行读取文件中的数据,并将每一行的标记放入向量 tmpstrArr。然后在 CListCtrl 中为每一行添加标记,但 CListCtrl 以降序显示排序数据。我很困惑,因为在调试元素时正在按照与文件中可用的相同的正确顺序进行。我希望我的 CListCtrl 数据以文件中的原始形式而不是排序形式。我还检查了 CListCtrl 的属性窗口,其中选择了 sort=None。
LVITEM lvi;
CString strItem;
m_listctrl.InsertColumn(0, _T("col 1"), LVCFMT_LEFT, 100);
m_listctrl.InsertColumn(1, _T("col 2"), LVCFMT_LEFT, 100);
for(int i=0;i<tmpstrArr.size();i++)
strItem=tmpstrArr.at(i).c_str();
lvi.iItem = 0;
lvi.iSubItem = i;
lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
//lvi.iImage = i%8;// There are 8 images in the image list
if(i==0)
lvi.mask = LVIF_IMAGE | LVIF_TEXT;
m_listctrl.InsertItem(&lvi);
else
m_listctrl.SetItem(&lvi);
【问题讨论】:
所以删除您在未显示的创建代码中设置的LVS_SORTASCENDING
样式位?或者至少向我们展示这段代码。
【参考方案1】:
您正在添加项目位置为 0 的每个项目。因此,您刚刚插入的最后一个项目始终是列表中的第一个。 见docs。
如果你想得到和数组中一样的顺序,你需要添加带有
的item lvi.iItem = m_listCtrl.GetItemCount();
// or use INT_MAX (see docu)
lvi.iItem = INT_MAX;
【讨论】:
以上是关于默认 CListCtrl 数据即将排序的主要内容,如果未能解决你的问题,请参考以下文章