15,980
社区成员
发帖
与我相关
我的任务
分享
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);
return lp1.CompareNoCase(lp2);
}
CHeaderCtrl *pHeardCtrl = GetHeaderCtrl();
HDITEM hdi;
hdi.mask = HDI_LPARAM;
pHeardCtrl->GetItem(pNMLV->iSubItem, &hdi);
BOOL bASC = (hdi.lParam == 0 ? TRUE : FALSE); //当前排序方式和上次相反
hdi.lParam = bASC; //保存当前的升降序状态
pHeardCtrl->SetItem(pNMLV->iSubItem, &hdi);
void CListCtrlDlg::OnColumnClickDGrid(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
m_lstctlTable.SortItems((PFNLVCOMPARE)MyCompareProc, &m_lstctlTable);
*pResult=0;
}
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);
}
}
}
}
}
}