int CALLBACK CSortListCtrl::CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData ) { CSortListCtrl* pListCtrl = reinterpret_cast<CSortListCtrl*>( lParamData ); ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CListCtrl ) ) ); ItemData* pid1 = reinterpret_cast<ItemData*>( lParam1 ); ItemData* pid2 = reinterpret_cast<ItemData*>( lParam2 ); ASSERT( pid1 ); ASSERT( pid2 ); LPCTSTR pszText1 = pid1->arrpsz[ pListCtrl->m_iSortColumn ]; LPCTSTR pszText2 = pid2->arrpsz[ pListCtrl->m_iSortColumn ]; ASSERT_VALID_STRING( pszText1 ); ASSERT_VALID_STRING( pszText2 ); if( IsNumber( pszText1 ) ) return pListCtrl->m_bSortAscending ? NumberCompare( pszText1, pszText2 ) : NumberCompare( pszText2, pszText1 ); else if( IsDate( pszText1 ) ) return pListCtrl->m_bSortAscending ? DateCompare( pszText1, pszText2 ) : DateCompare( pszText2, pszText1 ); else // text. return pListCtrl->m_bSortAscending ? lstrcmp( pszText1, pszText2 ) : lstrcmp( pszText2, pszText1 ); }
int CALLBACK CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData ) { CListCtrl *pListCtrl = (CListCtrl *)lParamData; fi.lParam = lParam1; int iItem1 = pListCtrl->FindItem(&fi); fi.lParam = lParam2; int iItem2 = pListCtrl->FindItem(&fi); if ((-1 == iItem1) || (-1 == iItem2)) return 0; CString strItem1 = pListCtrl->GetItemText(iItem1, s_iSortColumn); CString strItem2 = pListCtrl->GetItemText(iItem2, s_iSortColumn); if (_gbColumnNumber[s_iSortColumn]) return s_bSortAscending ? NumberCompare( strItem1, strItem2 ) : NumberCompare( strItem2, strItem1 ); else // text. return s_bSortAscending ? lstrcmp( strItem1, strItem2 ) : lstrcmp( strItem2, strItem1 ); }