一个函数,用于交换Report样式的CListCtrl列表控件的两个列表项,包括列表项的图标,列表项显示的内容都能交换成功,唯独图标交换不成功,在CListCtrl::GetItem函数的调用上可能存在一些问题,请熟悉CListCtrl控件的大虾们帮忙看看。以下是函数代码:// 交换CListCtrl控件两个列表项的内容
void ExchangeListCtrlItem(CListCtrl *pListCtrl, int iItem1, int iItem2)
{
    if (NULL == pListCtrl
        || iItem1 == iItem2
        || iItem1 < 0
        || iItem2 < 0
        || iItem1 >= pListCtrl->GetItemCount()
        || iItem2 >= pListCtrl->GetItemCount())
    {
        return;
    }    DWORD_PTR ItemData1 = pListCtrl->GetItemData(iItem1);
    DWORD_PTR ItemData2 = pListCtrl->GetItemData(iItem2);    // 交换图标
    LVITEM Item1 = {0};
    LVITEM Item2 = {0};
    Item1.mask = LVIF_IMAGE | LVIF_TEXT;
    Item1.iItem = iItem1;
    Item1.iSubItem = 1;
    if (pListCtrl->GetItem(&Item1)) // 问题在这里:GetItem后Item1.iImage依旧是0
    {
        Item2.mask = LVIF_IMAGE;
        Item2.iItem = iItem2;
        if (pListCtrl->GetItem(&Item2))
        {
            Item1.iItem = iItem2;
            pListCtrl->SetItem(&Item1);
            Item2.iItem = iItem1;
            pListCtrl->SetItem(&Item2);
        }
    }    // 交换ItemData
    pListCtrl->SetItemData(iItem1, ItemData2);
    pListCtrl->SetItemData(iItem2, ItemData1);    // 交换两个列表项的各列
    CString sTemp;
    for (int i = 0; i < pListCtrl->GetHeaderCtrl()->GetItemCount(); i++)
    {
        sTemp = pListCtrl->GetItemText(iItem1, i);
        pListCtrl->SetItemText(iItem1, i, pListCtrl->GetItemText(iItem2, i));
        pListCtrl->SetItemText(iItem2, i, sTemp);
    }
}