点击list控件排序的实现

来源:互联网 发布:asmr软件 编辑:程序博客网 时间:2024/06/06 13:07

1、响应鼠标点击事件LVN_COLOUMNCLICK事件

2、在头文件中增加一个结构体:
struct DATA   
{    
int subitem; // 点击表头的列数    
CListCtrl* plist;// listctrl的指针   
}; 

3、在响应事件函数中添加以下代码:

//点击主服务器列表表头排序void AutoSyncStorage::OnLvnColumnclickListMainsrv(NMHDR *pNMHDR, LRESULT *pResult){LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);for (int i = 0; i < m_listViewMain.GetItemCount(); ++i){m_listViewMain.SetItemData(i, i);}DATA data;//定义结构体对象data.subitem = pNMLV->iSubItem;data.plist = &m_listViewMain;g_bSort = !g_bSort;m_listViewMain.SortItems(listCompare,(LPARAM)&data);  *pResult = 0;}<pre name="code" class="cpp">4、写回调函数
<pre name="code" class="cpp">int CALLBACK listCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){DATA* pListCtrl = (DATA*)lParamSort;int ncol = pListCtrl->subitem;//点击的列项传给col,用来判断点击的是第几项CString strItem1, strItem2;//得到该列的前两项strItem1 = (pListCtrl->plist)->GetItemText(lParam1, 1);strItem2 = (pListCtrl->plist)->GetItemText(lParam2, 1);int nRet = strcmp(strItem1, strItem2);if (g_bSort){if(nRet > 0)return -1;else if(nRet < 0)return 1;}else{if(nRet > 0)return 11;else if(nRet < 0)return -1;}}


这样就好了

0 0