【问题标题】:Uncorrect sorting of columns ClistCtrl列 ClistCtrl 的不正确排序
【发布时间】:2013-10-07 15:53:23
【问题描述】:

这是我的回调函数:

int CALLBACK SortMeAscending(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
        int nRetVal = 0;

        PITEMDATA pData1 = (PITEMDATA)lParam1;
        PITEMDATA pData2 = (PITEMDATA)lParam2;

        switch(lParamSort)
        {
        case 0:
            if(pData1->iSeq < pData2->iSeq)
                nRetVal = -1;
            else if(pData1->iSeq > pData2->iSeq)
                nRetVal = 1;
            else
                nRetVal = 0;
            break;

        case 1:
            nRetVal = lstrcmp(pData2->pszCueName, pData1->pszCueName);
            break;
        case 2: 
            nRetVal = lstrcmp(pData2->pszTags, pData1->pszTags);
            break;

        default:
            break;
        }

        return nRetVal;
    }

    int CALLBACK SortMeDescending(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
        int nRetVal = 0;

        PITEMDATA pData1 = (PITEMDATA)lParam1;
        PITEMDATA pData2 = (PITEMDATA)lParam2;

        switch(lParamSort)
        {
        case 0:
            if(pData1->iSeq > pData2->iSeq)
                nRetVal = -1;
            else if(pData1->iSeq < pData2->iSeq)
                nRetVal = 1;
            else
                nRetVal = 0;
            break;

        case 1:
            nRetVal = lstrcmp(pData1->pszCueName, pData2->pszCueName);
            break;
        case 2: 
            nRetVal = lstrcmp(pData1->pszTags, pData2->pszTags);
            break;

        default:
            break;
        }

        return nRetVal;
    }

这是我的 OnCompareItems:

int CTest::OnCompareItems(LPARAM lParam1, LPARAM lParam2, int iColumn)
{  
    CMFCHeaderCtrl &headerCntrl = GetHeaderCtrl();

    BOOL b = 0;
    if(headerCntrl.IsAscending())
    {
        return SortItems(SortMeDescending, iColumn);
    }
    else
    {
        return SortItems(SortMeAscending, iColumn);
    }
}

如果我关注这个帖子http://support.microsoft.com/kb/250614 我没有在标题中排序的箭头。 如果我使用您在上面看到的方法,我会在排序方面遇到一些差距。 我点击它排序,下次它不会一次又一次地排序 请帮帮我

【问题讨论】:

  • 无论标题控件是否为升序,您都调用 SortMeAscending - 这是故意的吗?
  • 没关系。无论如何,它会一次排序,然后跳过

标签: c++ mfc clistctrl


【解决方案1】:

我认为您需要使用CMFCHeaderCtrl::SetSortColumn 来设置列的排序顺序。每次你排序。除此之外,还应从 HDN_ITEMCLICK 处理程序中调用实际的排序函数。

所以,假设你已经指定了这个:

ON_NOTIFY(HDN_ITEMCLICK, 0, OnItemclickList1)

在 OnItemclickList1 方法中写下这段代码:

void CTest::OnItemclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{  
    NMLISTVIEW *pLV = (NMLISTVIEW *) pNMHDR;
    CMFCHeaderCtrl &headerCntrl = GetHeaderCtrl();

    BOOL b = 0;
    if(headerCntrl.IsAscending())
    {
        headerCntrl.SetSortColumn(pLV->iItem, FALSE);
        SortItems(SortMeDescending, pLV->iItem);
    }
    else
    {
        headerCntrl.SetSortColumn(pLV->iItem, TRUE);
        SortItems(SortMeAscending, iColumn);
    }
    *pResult = 0;
}

放弃你的OnCompareItems

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多