VS2013 MFC list control空间点击表头排序

VS2013 MFC list control空间点击表头排序

直接从代码中理解


//全局变量
int sort_column; // 记录点击的列
bool method=true; // 记录比较方法
// 比较函数
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	// 从参数中提取所需比较lc的两行数据
	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 == 1)//sort_column 表示哪一列,比如这里等于1表示第2列,用CString类型
	{
		// 文字型比较
		if (method)
			return lp1.CompareNoCase(lp2);
		else
			return lp2.CompareNoCase(lp1);
	}
	else if (sort_column == 6)//第6列用double类型排序
	{
		// double型比较
		if (method)
			return _tstof(lp1) > _tstof(lp2);
		else
			return _tstof(lp2) > _tstof(lp1);
	}
	else
	{
		// int型比较
		if (method)
			return _ttoi(lp1) - _ttoi(lp2);
		else
			return _ttoi(lp2) - _ttoi(lp1);
		
	}
//建议数字类型的转换为int,道理都明白,字符串是一位一位比较大小的
	return 0;
	
}
void CZFBRankInfoDlg::OnLvnColumnclickList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码
	sort_column = pNMLV->iSubItem;//点击的列
	int count = m_list.GetItemCount();//m_list是你控件的名字
	for (int i = 0; i < count; i++)
		m_list.SetItemData(i, i); // 每行的比较关键字,此处为列序号(点击的列号),可以设置为其他 比较函数的第一二个参数
	m_list.SortItems(MyCompareProc, (DWORD_PTR)&m_list);//排序 第二个参数是比较函数的第三个参数
	method = !method;
	*pResult = 0;
}

以上代码亲测可行 …


  • created on Fri 2020/10/2 20:21
  • lasted update on Fri 2020/10/2 22:06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值