16,471
社区成员
发帖
与我相关
我的任务
分享
char ListStr[][20]=
{
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四"
};
int CALLBACK ListSortCompare(LPARAM lp1,LPARAM lp2,LPARAM Check)
{ // lp1,lp2 are the 'ID' original oders. the iItem will changes
// 不使用 ListStr
CListCheckDlg* pDlg=(CListCheckDlg* )AfxGetMainWnd();
CString str1 = pDlg->m_List.GetItemText((int)lp1,1);
CString str2 = pDlg->m_List.GetItemText((int)lp2,1);
afxDump << str1 << "\n";
afxDump << str2 << "\n\n";
// 使用 ListStr
if((strcmp(ListStr[(int)lp1],(char *)Check)==0) && ((strcmp(ListStr[(int)lp2],(char *)Check)==0))) return 0;
else if((strcmp(ListStr[(int)lp1],(char *)Check)==0)) return -1;
else if((strcmp(ListStr[(int)lp2],(char *)Check)==0)) return 1;
else return 0;
}
//
int CALLBACK ListSortCompare(LPARAM lp1,LPARAM lp2,LPARAM subItem)
{ // lp1,lp2 are the original oders. the iItem will changes
CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd();// m_pMainWnd;
if(pMain->m_bRevSort)
return (pMain->m_szListData[subItem][lp2].CompareNoCase(
pMain->m_szListData[subItem][lp1]));
else
return (pMain->m_szListData[subItem][lp1].CompareNoCase(
pMain->m_szListData[subItem][lp2]));
}
m_szListData 是 :LisCtrl 的 副本 填充 ListCtrl 时 同时 保存。
//表一 次数排序
int CALLBACK CAnalyseDlg::CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
//通过传递的参数来得到CSortList对象指针,从而得到排序方式
DATA* MyData = (DATA*)lParamSort;
int col = MyData->col;//点击的列项传递给col,用来判断点击了第几列
//取项的字符串
CString strItem1, strItem2;
strItem1 = MyData->plist->GetItemText((int)lParam1,col);
strItem2 = MyData->plist->GetItemText((int)lParam2,col);
CAnalyseDlg * dlg = (CAnalyseDlg *)MyData->pDlg;
int nf = 0;
int nb = 0;
if(col == 1)
{
//对比整型数
nf = _wtoi(strItem1);
nb = _wtoi(strItem2);
if(fav)
return (nf - nb);
else
return (nb - nf);
}
}
//点击坐标列表 次数 表头 排序
void CAnalyseDlg::OnLvnColumnclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
//NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
DATA data;
data.col = pNMLV->iSubItem; //取列
data.plist = &m_FirstList; //取列表指针
data.pDlg = this;
if(data.col == 1)
{
fav = !fav; //排序每点一次列就变一次,若想固定排序,那就去掉这句
//设置列表项相关项,以便于排序
int len = m_FirstList.GetItemCount();
for(int i = 0;i < len;i ++)
{
m_FirstList.SetItemData(i,(DWORD_PTR)i); //列表项相关项设为项号
}
m_FirstList.SortItems(CompareFunc,(LPARAM)&data);
}
*pResult = 0;
}