在 MFC 的 CListBox 类中,有一个名为 CompareItem 的公共方法,用于处理列表框的 LBN_COMPAREITEM 消息。

LBN_COMPAREITEM 消息在用户试图选择或取消选择列表框中的项时发送。当列表框的 LBS_SORT 样式启用时,该消息用于确定在列表框中插入新项的位置。

下面是一个简单的示例,演示如何使用 CompareItem 方法:
// 假设你有一个 CListBox 对象 myListBox
CListBox myListBox;

// 在你的消息映射函数中处理 LBN_COMPAREITEM 消息
void CYourDialog::OnCompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
    if (lpCompareItemStruct->CtlType == ODT_LISTBOX) {
        CListBox* pListBox = (CListBox*)CWnd::FromHandle(lpCompareItemStruct->hwndItem);
        int nIndex1 = lpCompareItemStruct->itemID1;
        int nIndex2 = lpCompareItemStruct->itemID2;
        CString strItem1, strItem2;

        // 获取要比较的两个项的文本
        pListBox->GetText(nIndex1, strItem1);
        pListBox->GetText(nIndex2, strItem2);

        // 在这里进行自定义比较逻辑
        // 返回负数表示 strItem1 应该在 strItem2 之前
        // 返回正数表示 strItem1 应该在 strItem2 之后
        // 返回零表示 strItem1 和 strItem2 相等
        lpCompareItemStruct->result = strItem1.Compare(strItem2);
    }
}

在上述示例中,我们在对话框类中处理 LBN_COMPAREITEM 消息,获取要比较的两个项的文本,并使用 CString::Compare 方法进行比较。你可以根据具体的比较逻辑返回相应的结果。

请注意,在使用 CompareItem 方法时,你需要确保列表框的样式中包含 LBS_SORT,以启用自动排序。


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