| Hi, this is the sort function used inside, e.g. Populate call int_cdecl CXTPCalendarEvents::CompareEvents_ForView(const CXTPCalendarEvent** ppEv1, const CXTPCalendarEvent** ppEv2) {if (*ppEv1 == NULL || *ppEv2 == NULL) { ASSERT(FALSE);return XTPCompare(*ppEv1, *ppEv2); }int nPeriodDays1 = (*ppEv1)->GetEventPeriodDays();
int nPeriodDays2 = (*ppEv2)->GetEventPeriodDays();
int nAllDayEvent1 = (*ppEv1)->IsAllDayEvent() ? 1 : 0;
int nAllDayEvent2 = (*ppEv2)->IsAllDayEvent() ? 1 : 0; BOOL bIsMultidayEvent = (nAllDayEvent1 && nAllDayEvent2 || nPeriodDays1 > 1 && nPeriodDays2 > 1);int nCmp = 0;
//---------------------------------------------------------------------------
if (bIsMultidayEvent) { nCmp = XTPCompare((*ppEv1)->GetStartTime(), (*ppEv2)->GetStartTime());if (nCmp) {return nCmp; } }//--------------------------------------------------------------------------- nCmp = XTPCompare(nPeriodDays2, nPeriodDays1);if (nCmp) {return nCmp; } nCmp = XTPCompare(nAllDayEvent2, nAllDayEvent1);if (nCmp) {return nCmp; }if (!bIsMultidayEvent) { nCmp = XTPCompare((*ppEv1)->GetStartTime(), (*ppEv2)->GetStartTime());if (nCmp) {return nCmp; } } nCmp = XTPCompare((*ppEv1)->GetDurationMinutes(), (*ppEv2)->GetDurationMinutes());if (nCmp) {return -nCmp; }//----------------------------------------------------- nCmp = XTPCompare((*ppEv1)->GetSubject(), (*ppEv2)->GetSubject());if (nCmp) {return nCmp; }//----------------------------------------------------- nCmp = CompareEvents_ByID(ppEv1, ppEv2);return nCmp; }   virtualvoid Populate(COleDateTime dtDayDate) { ............................................. CXTPCalendarEventsPtr ptrEventsAr = new CXTPCalendarEvents(); ............................................// sort events by start time and some other criteria ptrEventsAr->Sort(CXTPCalendarEvents::CompareEvents_ForView); May be we can make this call optional?  Now looks like there is no way to eliminate this sort. |