来源网站:http://blog.csdn.net/hgy413/article/details/6719908
列表控件(CList
·CListCtrl
函数原型为:
BOOL CListCtrl:
其中第一个参数为全局
第二个参数为用户数据
该函数返回-1,代表
返回1代表第一项排应
返回0代表两项相等。
int CALLBACK ListCompar
其中第三个参数为调用
第一和第二个参数为用
BOOL CListCtrl:
·我们什么时候需要排
实现这点可以在父窗口
例子:
//排序回调函数实现
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
<span style="white-space:pre"> </span>// lParamSort contains a pointer to the list view control.
<span style="white-space:pre"> </span>// The lParam of an item is just its index.
<span style="white-space:pre"> </span>//以第一列为根据排序
<span style="white-space:pre"> </span>CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
<span style="white-space:pre"> </span>CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
<span style="white-space:pre"> </span>CString strItem2 = pListCtrl->GetItemText(lParam2, 0);
//比较两个数
<span style="white-space:pre"> </span>LPCTSTR s1=(LPCTSTR)strItem1;
<span style="white-space:pre"> </span>LPCTSTR s2=(LPCTSTR)strItem2;
<span style="white-space:pre"> </span>int n1=atoi(s1);
<span style="white-space:pre"> </span>int n2=atoi(s2);if (n1>n2)
<span style="white-space:pre"> </span>return -1;
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>return 1;
}
<span style="white-space:pre"> </span>void C***::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
<span style="white-space:pre"> </span>NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
<span style="white-space:pre"> </span>// TODO: Add your control notification handler code here //调用排序函数
<span style="white-space:pre"> </span>m_ShowData.SortItems( MyCompareProc, (DWORD)&m_ShowData );
<span style="white-space:pre"> </span>*pResult = 0;}
整个过程是这样的: 当你点击列表控件的表
首先,要让CList
for(int i = 0; i < listCtrl.G
{
SetItemDat
}
这样写的原因下面马上
接下来就是调用CLi
int CALLBACK listCompar
这里的lParam1
最后就是实现那个回调
///
//按第六列排序
int CALLBACK listCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*)lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1,5);
CString strItem2 = pListCtrl->GetItemText(lParam2,5);
LVCOLUMN Vol;
CString csStr("");
TCHAR szCol[MAX_PATH];
Vol.pszText = szCol;
Vol.mask=LVCF_TEXT;
Vol.cchTextMax=sizeof(szCol);
pListCtrl->GetColumn(0,&Vol);
csStr = CString(Vol.pszText);
if (csStr.Right(1) == CString("▼"))
{
return _tcscmp(strItem2.GetBuffer(MAX_PATH),strItem1.GetBuffer(MAX_PATH));
}
else if (csStr.Right(1) == CString("▲"))
{
return _tcscmp(strItem1.GetBuffer(MAX_PATH),strItem2.GetBuffer(MAX_PATH));
}
else
{
return _tcscmp(strItem1.GetBuffer(MAX_PATH),strItem2.GetBuffer(MAX_PATH));
}
}
///
void CManageView::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CListCtrl &m_ListCtrl = GetListCtrl();for(int i = 0; i < m_ListCtrl.GetItemCount(); ++i)
m_ListCtrl.SetItemData(i,i);
m_ListCtrl.SortItems(listCompare,(LPARAM)&m_ListCtrl);*pResult = 0;
}