CListCtrlCl实现根据不同列排序列表

1,首先定义要调用的排序函数

//********************************
//lsit排序调用函数(排序的规则方法自己定义)
//********************************
int CALLBACK  MyCompareProc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort) 
{ 
	CString &lp1 = *((CString *)lParam1);
	CString &lp2 = *((CString *)lParam2);
	int &sort = *(int *)lParamSort;
	if (sort == 0)
	{
		return lp1.CompareNoCase(lp2);
	}
	else
	{
		return lp2.CompareNoCase(lp1);
	}
}
2,在重载的CListCtrl类中响应LVN_COLUMNCLICK消息
void CListCtrlCl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	//获得点击列的名称
	CString strColumnName;//列名
	LVCOLUMN lvcol;
	TCHAR  lpBuffer[256];
	lvcol.mask = LVCF_TEXT|LVCF_SUBITEM;
	lvcol.pszText = lpBuffer;
	lvcol.cchTextMax = 256;
	this->GetColumn(pNMLV->iSubItem, &lvcol);
	strColumnName= lvcol.pszText;
	if (strColumnName  ==  _T("列的值"))
	{
		int Length = this->GetItemCount();
		CArray<CString,CString> ItemData;
		ItemData.SetSize(Length);
		for (int i = 0; i < Length; i++)
		{
			ItemData[i] = this->GetItemText(i,pNMLV->iSubItem);
			this->SetItemData(i,(DWORD_PTR)&ItemData[i]);//设置排序关键字
		}
		this->SortItems(MyCompareProc,(DWORD_PTR)&pNMLV->iSubItem);//排序
	}
	*pResult = 0;
}
(如果是控件的话,在控件所在的窗口中响应LVN_COLUMNCLICK消息,this换成CListCtrl对应的变量)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值