CListCtrl排序问题
时间:2011-12-14
来源:互联网
int CListCtrlDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
int row1=(int)lParam1;
int row2=(int)lParam2;
CListCtrl *lc=(CListCtrl*)lParamSort;
CString lp1=lc->GetItemText(row1,sort_column);
CString lp2=lc->GetItemText(row2,sort_column);
if(sort_column<2)
{
if(method)
{
method=FALSE;
return strcmp((char*)(LPCTSTR)lp1,(char*)(LPCTSTR)lp2);
}
else
{
method=TRUE;
return strcmp((char*)(LPCTSTR)lp1,(char*)(LPCTSTR)lp2);
}
}
return 0;
}
为什么只是排序前2项,觉得if中应该来个循环,我想全部排序,应该怎么做,求解?
{
int row1=(int)lParam1;
int row2=(int)lParam2;
CListCtrl *lc=(CListCtrl*)lParamSort;
CString lp1=lc->GetItemText(row1,sort_column);
CString lp2=lc->GetItemText(row2,sort_column);
if(sort_column<2)
{
if(method)
{
method=FALSE;
return strcmp((char*)(LPCTSTR)lp1,(char*)(LPCTSTR)lp2);
}
else
{
method=TRUE;
return strcmp((char*)(LPCTSTR)lp1,(char*)(LPCTSTR)lp2);
}
}
return 0;
}
为什么只是排序前2项,觉得if中应该来个循环,我想全部排序,应该怎么做,求解?
作者: tixisong 发布时间: 2011-12-14
C/C++ code
void CClistSortDlg::ListSort(void) { int listcount = m_list.GetItemCount(); int nColumn =m_list.GetHeaderCtrl()->GetItemCount(); CString temp0,temp1,temp2; for(int j = 1;j <listcount;j++) { for(int i=0;i <listcount-j;i++) { temp1 = m_list.GetItemText(i,0); //m_list为控件绑定的变量,根据自己的修改 temp2 = m_list.GetItemText(i+1,0); //int nRe = StrCmpLogicalW(temp1,temp2); // int nRe = StrCmpI(temp1,temp2); // if (m_bSort) { if (nRe < 0) { for(int n=0;n <nColumn;n++) { temp1 = m_list.GetItemText(i,n); temp2 = m_list.GetItemText(i+1,n); m_list.SetItemText(i,n,temp2); m_list.SetItemText(i+1,n,temp1); } } } if (!m_bSort) { if (nRe > 0) { for(int n=0;n <nColumn;n++) { temp1 = m_list.GetItemText(i,n); temp2 = m_list.GetItemText(i+1,n); m_list.SetItemText(i,n,temp2); m_list.SetItemText(i+1,n,temp1); } } } } } }
作者: shen_wei 发布时间: 2011-12-14
引用 1 楼 shen_wei 的回复:
C/C++ code
void CClistSortDlg::ListSort(void)
{
int listcount = m_list.GetItemCount();
int nColumn =m_list.GetHeaderCtrl()->GetItemCount();
CString temp0,temp1,temp2;
for(int j……
C/C++ code
void CClistSortDlg::ListSort(void)
{
int listcount = m_list.GetItemCount();
int nColumn =m_list.GetHeaderCtrl()->GetItemCount();
CString temp0,temp1,temp2;
for(int j……
有没有简单一点的?
作者: tixisong 发布时间: 2011-12-15
代码复制了就能使用了。。
o(︶︿︶)o 唉。
o(︶︿︶)o 唉。
作者: shen_wei 发布时间: 2011-12-15
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
这个函数如果是CListCtrl用来排序的回调函数,这样写是对的。
CListCtrl会针对每行记录调用这个函数来排序。不是用来你自己在对话框中调用的。得加上这个
C/C++ code
然后点击列表头,就对其中记录按MyCompareProc中的规则,排序了。
这个函数如果是CListCtrl用来排序的回调函数,这样写是对的。
CListCtrl会针对每行记录调用这个函数来排序。不是用来你自己在对话框中调用的。得加上这个
C/C++ code
void CListCtrlDlg::OnColumnClickDGrid(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR; m_lstctlTable.SortItems((PFNLVCOMPARE)MyCompareProc, &m_lstctlTable); *pResult=0; }
然后点击列表头,就对其中记录按MyCompareProc中的规则,排序了。
作者: ddszhan 发布时间: 2011-12-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28