CListCtrl::SortItemsEx

可以使用应用程序定义的比较函数,排序当前列表视图控件中的项。

BOOL SortItemsEx(
     PFNLVCOMPARE pfnCompare, 
     DWORD_PTR dwData
);

参数

Parameter

说明

[in] pfnCompare

应用程序定义的比较函数的地址。

每次相对顺序两个列表项需要将确定,排序操作调用比较函数。 比较函数必须是选件类的静态成员或不是任何选件类成员的独立功能。

[in] dwData

应用程序定义的值传递给比较函数。

返回值

true,则此方法成功;否则,false。

备注

此方法将每一项的索引反映新的序列。

比较函数,pfnCompare,具有以下形式:

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); 

此消息与 LVM_SORTITEMS,只不过信息的类型传递给比较函数。 在 LVM_SORTITEMS,lParam1 和 lParam2 是比较的项的值。 在 LVM_SORTITEMSEX,lParam1 是比较的第一项的当前索引,然后 lParam2 是第二个项目的当前索引。 您可以发送 LVM_GETITEMTEXT 信息检索有关项的更多信息。

比较函数必须返回负值,如果第一项应位于第二,一个正整数值,如果第一项应遵循第二,或者零,如果两个项目相等。

备注

在排序过程中,列表视图内容不稳定。除了 LVM_GETITEM外,如果回调函数发送任何信息到列表视图控件,结果是不可预知的。

此方法发送 LVM_SORTITEMSEX 信息,在 Windows SDK所述。

要求

标头: afxcmn.h

此方法在Windows 2000上,使用Internet Explorer 5,Windows 98的Windows NT 4.0和更高版本支持。

示例

下面的代码示例定义一个变量,m_listCtrl,用于访问当前列表视图控件。 此变量在下一个示例。

public:
    // Variable used to access the list control.
    CListCtrl m_listCtrl; 

下面的代码示例演示 SortItemEx 方法。 此代码示例的早期节中,我们创建了显示两列标题为“ClientID”和“层”在"报告"视图中的列表视图控件。 通过在“层”列,的值下面的代码示例对表进行排序。

// The ListCompareFunc() method is a global function used by SortItemEx().
int CALLBACK ListCompareFunc(
                             LPARAM lParam1, 
                             LPARAM lParam2, 
                             LPARAM lParamSort)
{
    CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
    CString    strItem1 = pListCtrl->GetItemText(static_cast<int>(lParam1), 1);
    CString    strItem2 = pListCtrl->GetItemText(static_cast<int>(lParam2), 1);

    int x1 = _tstoi(strItem1.GetBuffer());
    int x2 = _tstoi(strItem2.GetBuffer());
    int result = 0;
    if ((x1 - x2) < 0)
        result = -1;
    else if ((x1 - x2) == 0)
        result = 0;
    else
        result = 1;

    return result;
}

void CCListCtrl_s2Dlg::OnBnClickedButton1()
{
    // SortItemsEx
    m_listCtrl.SortItemsEx( ListCompareFunc, (LPARAM)&m_listCtrl );
}

请参见

参考

CListCtrl选件类

层次结构图

LVM_SORTITEMSEX

CListCtrl::SortItems

LVM_SORTITEMS

LVM_GETITEM