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
This commit is contained in:
Vadim Zeitlin 2008-08-05 01:22:19 +00:00
parent 1c3e52af4b
commit 52980340f4

View File

@ -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) )
{