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;
}
}
这样就好了