2013-10-07 20 views
1

這是我的回調函數:列Uncorrect分類的CListCtrl

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 我沒有在標題排序箭頭。 如果我使用我上面可以看到的方法,那麼在排序時會出現一些空白。 我點擊它排序,下次不會排序,一次又一次 請幫我

+0

您調用SortMeAscending頭控制是升序或不 - 這是故意的嗎? – mungflesh

+0

這沒關係。它無論如何排序一次,然後跳過 – user1711993

回答

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

+0

謝謝你很多cha) – user1711993