在 MFC 的 CMFCListCtrl 类中,确实没有 Sort 这个具体的公共方法。排序操作通常是通过调用 SortItems 方法来完成的,该方法允许你指定一个比较函数,以实现自定义的排序逻辑。

以下是一个简单的例子,演示如何使用 SortItems 方法进行排序:
// 在你的 CMyListCtrl 类中

// 比较函数,用于排序
int CALLBACK CMyListCtrl::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CMyListCtrl* pListCtrl = reinterpret_cast<CMyListCtrl*>(lParamSort);

    // 在这里实现你的比较逻辑
    // 例如,你可以根据排序列和排序顺序进行比较

    // 获取两行的数据
    // 例如:
    CString strItem1 = pListCtrl->GetItemText(lParam1, pListCtrl->m_nSortColumn);
    CString strItem2 = pListCtrl->GetItemText(lParam2, pListCtrl->m_nSortColumn);

    // 比较字符串
    int nResult = strItem1.Compare(strItem2);

    // 根据排序顺序调整结果
    return pListCtrl->m_bSortAscending ? nResult : -nResult;
}

// 在需要排序的地方调用这个方法
void CMyListCtrl::SortList()
{
    // 使用 SortItems 进行排序
    SortItems(CompareFunc, reinterpret_cast<DWORD_PTR>(this));

    // 更新表头显示排序箭头等
    UpdateHeaderSortState();
}

在这个例子中,SortList 方法调用了 SortItems 方法,并传递了比较函数 CompareFunc,该函数负责实际的比较逻辑。在比较函数中,你可以根据你的需要定义自己的比较规则。

请注意,SortItems 方法会对列表控件的所有项进行排序,而不是仅限于当前显示的项。如果需要对当前显示的项进行排序,你可能需要在排序之前筛选出需要排序的项。


转载请注明出处:http://www.zyzy.cn/article/detail/19316/MFC/CMFCListCtrl