CListCtrl排序摘要

       列表控制有一个非凡的功能,当以具体资料方式显示时,列表顶部的表头可以当作按钮来使用,这可以通过列表控制创建时的风格来控制。当鼠标点击列表头名称时,列表控制就会向其父窗口发送一个LNV_COLUMNCLICK消息,利用类导向中列表控制IDC_LISTCTRL对应的LNV_COLUMNCLICK消息加入相应处理函数,就可将表列按照特定顺序进行排列。其函数使用方法见程序,其中iSort为排序的表列索引号,(PFNLVCOMPARE)CompareFunc为进行具体排序的回调函数,也就是说,通过鼠标点击表头实现的排序过程是由第三方开发的专用排序函数来实现的,排序函数只是实现表项的具体比较操作,而整个排序过程是由SortItemS属性通过不断调用这个函数来实现的。正常的排序过程是升序方式,通过调换排序函数中的参数值,就可实现降序排列,即将PARAM1与PARAM2调换位置。这个回调函数的前两个参数为表列中表项的索引号,第三个参数为排序的表列索引号。 

  
 void CVCLISTDlg::OnColumnclickListctrl(NMHDR* pNMHDR, LRESULT* pResult)    
{

//鼠标左键单击表头处理函数   

  NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;  

static int iSorted=-1;
//排列序号   
if (pNMListView->SubItem==iSorted)
     return;   

 
     iSorted=pNMListView->;iSubItem;   
    m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,iSorted);   
   *pResult = 0;   

}
  
//排序时比较表项的回调函数   
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSort)   
{ char *text1,*text2;   
switch (lParamSort)
{    case 0L:text1=Sps[lParam1].szPm;   
             text2=Sps[lParam2].szPm;break;   
     case 1L:text1=Sps[lParam1].szSl;   
             text2=Sps[lParam2].szSl;break;   
     case 2L:text1=Sps[lParam1].szDj;   
             text2=Sps[lParam2].szDj;break;   
     case 3L:text1=Sps[lParam1].szJe;   
             text2=Sps[lParam2].szJe;break;   

}  
    return (strcmp(text1,text2)); 

}  
 同样,也可以通过专用按钮来实现排序功能,如本文的排序按钮对应的功能代码如下:    void CVCLISTDlg::OnSort()    
{ m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,0);

}    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值