void CBCGPPlannerPrintMonth::AdjustAppointments () { XBCGPAppointmentArray& arQueryApps = GetQueryedAppointments (); const int nDays = GetViewDuration (); if (arQueryApps.GetSize () == 0 || m_ViewRects.GetSize () != nDays) { return; } for (int i = 0; i < arQueryApps.GetSize (); i++) { CBCGPAppointment* pApp = arQueryApps[i]; ASSERT_VALID (pApp); pApp->ResetPrint (); } COleDateTime date (m_DateStart); COleDateTimeSpan spanDay (1, 0, 0, 0); const int delta = m_nRowHeight + 2 * m_OnePoint.cy; for (int nDay = 0; nDay < nDays; nDay ++) { CRect rect (m_ViewRects [nDay]); rect.top += m_nRowHeight + 2 * m_OnePoint.cy; rect.DeflateRect (m_OnePoint.cx, 0); BOOL bTopEq = TRUE; BOOL bBottomEq = TRUE; if (nDay > 0) { bTopEq = m_ViewRects [nDay].top == m_ViewRects [nDay - 1].top; bBottomEq = m_ViewRects [nDay].bottom == m_ViewRects [nDay - 1].bottom; } CList<int, int> lsItems; for (int i = 0; i < arQueryApps.GetSize (); i++) { CBCGPAppointment* pApp = arQueryApps[i]; ASSERT_VALID (pApp); if (CBCGPPlannerView::IsAppointmentInDate (*pApp, date)) { CRect rtApp (rect); int nItem = 0; while(TRUE) { POSITION pos = lsItems.Find (nItem); if (pos != NULL) { nItem++; } else { break; } } rtApp.top += nItem * delta; rtApp.bottom = rtApp.top + m_nRowHeight; BOOL bAllOrMulti = pApp->IsAllDay () || pApp->IsMultiDay (); // check for add new rect if (nDay > 0) { if (bTopEq && bAllOrMulti) { if (!pApp->GetDSPrint ().IsEmpty ()) { CRect rt; rt = pApp->GetRectPrint (date - spanDay); if (!rt.IsRectEmpty () && rtApp.top != rt.top) { rtApp.top = rt.top; rtApp.bottom = rt.bottom; } } } } if (((bTopEq && !bBottomEq) || (!bAllOrMulti && !CBCGPPlannerView::IsOneDay (pApp->GetStart (), pApp->GetFinish ()))) && !pApp->GetDSDraw ().IsEmpty ()) { CRect rtInter; rtInter.IntersectRect (rtApp, m_ViewRects [nDay]); if (rtInter.Height () < rtApp.Height () || rtInter.bottom >= rect.bottom || !bAllOrMulti) { // add impossible rect rtApp.OffsetRect (0, m_OnePoint.cy); pApp->SetRectPrint (rtApp, date); // return rect rtApp.OffsetRect (0, -m_OnePoint.cy); } } pApp->SetRectPrint (rtApp, date); lsItems.AddTail ((rtApp.top - rect.top) / delta); } } CheckVisibleAppointments(date, rect, TRUE); date += spanDay; } }