From 52980340f486ea7af1b606ea2f3e4921b5dc9764 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 5 Aug 2008 01:22:19 +0000 Subject: [PATCH] fix bug in Mark() which highlighted the day not only in the currently shown month but also in adjancet ones (see #9155) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54970 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/calctrl.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/msw/calctrl.cpp b/src/msw/calctrl.cpp index 90faa55f47..cf1179b8aa 100644 --- a/src/msw/calctrl.cpp +++ b/src/msw/calctrl.cpp @@ -329,12 +329,20 @@ void wxCalendarCtrl::Mark(size_t day, bool mark) void wxCalendarCtrl::UpdateMarks() { - MONTHDAYSTATE states[3]; + // we show only one full month but there can be some days from the month + // before it and from the one after it so days from 3 different months can + // be partially shown + MONTHDAYSTATE states[3] = { 0 }; const int nMonths = MonthCal_GetMonthRange(GetHwnd(), GMR_DAYSTATE, NULL); - wxCHECK_RET( nMonths <= (int)WXSIZEOF(states), "unexpected months range" ); - for ( int i = 0; i < nMonths; i++ ) - states[i] = m_marks; + // although in principle the calendar might not show any days from the + // preceding months, it seems like it always does, consider e.g. Feb 2010 + // which starts on Monday and ends on Sunday and so could fit on 4 lines + // without showing any subsequent months -- the standard control still + // shows it on 6 lines and the number of visible months is still 3 + wxCHECK_RET( nMonths == (int)WXSIZEOF(states), "unexpected months range" ); + + states[1] = m_marks; // the fully visible month is the one in the middle if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) ) { -- 2.47.2