CListCtrl::SortItems排序的用法

#define LIST_DVS_NVSNAME_COL    0 //CListCtrl列表的第1
#define LIST_DVS_CHANNEL_COL 1 //CListCtrl列表的第2
#define LIST_DVS_IP_COL 3 //CListCtrl列表的第4项


static int   m_Sorted = 0  ;//排列序号 
static bool  m_Asc    = true;//排列方式


1 为CListCtrl控件添加消息:ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_DVS, OnColumnclickListDvs)

2 在void CSearchDVSDlg::OnColumnclickListDvs(NMHDR* pNMHDR, LRESULT* pResult) 这个函数中进行实现,如:

void CSearchDVSDlg::OnColumnclickListDvs(NMHDR* pNMHDR, LRESULT* pResult) 
{


// TODO: Add your control notification handler code here
for ( int i = 0; i < m_ListDVS.GetItemCount(); ++i)
{
m_ListDVS.SetItemData(i, i); 
}
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // 获取一项值

if (pNMListView->iSubItem==m_Sorted)
{
m_Asc = !m_Asc;
}
m_Sorted=pNMListView->iSubItem; 
m_ListDVS.SortItems(CompareFunc,(LPARAM)&m_ListDVS); // 排序函数  只能为类的静态成员函数或者是全局函数

// 刷新NVS的(添加)状态
// RefreshListDVSItemData();
   
*pResult = 0;
}

3排序函数:int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)

4 排序函数的实现:


// 如果排序函数返回值 >0 升序排序, <0 降序排序, =0则不排序
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 

if( m_Sorted < 0 )//排列序号 
return 0 ;
//通过传递的参数来得到CSortList对象指针,从而得到排序方式
CListCtrl * pV=(CListCtrl *)lParamSort;
//通过ItemData来确定数据
CString szComp1,szComp2;
int iCompRes,iCompRes2=0;
szComp1=pV->GetItemText(lParam1,m_Sorted);
szComp2=pV->GetItemText(lParam2,m_Sorted);

    if(m_Sorted==LIST_DVS_IP_COL)
{
unsigned long Ip1 = ntohl(inet_addr(szComp1)) ;
unsigned long Ip2 = ntohl(inet_addr(szComp2)) ;
if(Ip1 == Ip2)
iCompRes = 0;
if(Ip1 < Ip2)
iCompRes = -1;
if(Ip1 > Ip2)
iCompRes = 1;

}
else
{
iCompRes=szComp1.Compare(szComp2);
if(iCompRes==0 )
{
if(m_Sorted==LIST_DVS_NVSNAME_COL || m_Sorted==LIST_DVS_CHANNEL_COL)
{
szComp1=pV->GetItemText(lParam1,LIST_DVS_IP_COL);
szComp2=pV->GetItemText(lParam2,LIST_DVS_IP_COL);
unsigned long Ip1 = ntohl(inet_addr(szComp1)) ;
unsigned long Ip2 = ntohl(inet_addr(szComp2)) ;
if(Ip1 == Ip2)
iCompRes2 = 0;
if(Ip1 < Ip2)
iCompRes2 = -1;
if(Ip1 > Ip2)
iCompRes2 = 1;
}
}
}

if(iCompRes2!=0) // 复合比较
return iCompRes2;

if( m_Asc )  //对设备的ip进行排序,是升序排序还是降序排序
return  iCompRes;
else
return -iCompRes;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值