MFC CListCtrl排序问题

定义一个全局变量记录记录点击的列数

int g_Column;

添加点击表头消息响应函数

void ListSort::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
    // TODO:  在此添加控件通知处理程序代码
    int count = GetItemCount();
    for (int i = 0; i < count; i++)
    {

        SetItemData(i, i);//这里一定要加

    }
    g_Column = pNMLV->iSubItem;
    SortItems(Compare, reinterpret_cast(this));//第二个参数是传递给回调函数的指针

    *pResult = 0;
}

添加回调函数

int CALLBACK ListSort::Compare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    //ListSort* pListCtrl = reinterpret_cast(lParamSort);

    // 从参数中提取所需比较lc的两行数据    
    int row1 = (int)lParam1;//这里的参数实际是SetItemData函数设置的值,比较的第一列
    int row2 = (int)lParam2;//这里的参数实际是SetItemData函数设置的值,比较的第二列
    CListCtrl* lc = (CListCtrl*)lParamSort;
    CString lp1 = lc->GetItemText(row1, g_Column);
    CString lp2 = lc->GetItemText(row2, g_Column);
    //LPCTSTR s1 = (LPCTSTR)lp1;
    //LPCTSTR s2 = (LPCTSTR)lp2;   
    if (lp1>lp2)
    {
        return 1;
    } 
    else if (lp1     {
        return -1;
    }
    else
    {
        return 0;
    }
}

 

你可能感兴趣的:(MFC笔记)