Ejemplo n.º 1
0
void wxCalendarCtrl::UpdateMarks()
{
    // 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 DWORD nMonths = MonthCal_GetMonthRange(GetHwnd(), GMR_DAYSTATE, NULL);

    // 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
    //
    // OTOH Windows 7 control can show all 12 months or even years or decades
    // in its window if you "zoom out" of it by double clicking on free areas
    // so the return value can be (much, in case of decades view) greater than
    // 3 but in this case marks are not visible anyhow so simply ignore it
    if ( nMonths < WXSIZEOF(states) )
    {
        wxFAIL_MSG("unexpectedly few months shown in the control");
    }
    else if ( nMonths == WXSIZEOF(states) )
    {
        // the fully visible month is the one in the middle
        states[1] = m_marks | m_holidays;

        if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) )
        {
            wxLogLastError(wxT("MonthCal_SetDayState"));
        }
    }
    //else: not a month view at all
}
Ejemplo n.º 2
0
void wxCalendarCtrl::UpdateMarks()
{
    // Currently the native control may show more than one month if its size is
    // big enough. Ideal would be to prevent this from happening but there
    // doesn't seem to be any obvious way to do it, so for now just handle the
    // possibility that we can display several of them: one before the current
    // one and up to 12 after it.
    MONTHDAYSTATE states[14] = { 0 };
    const DWORD nMonths = MonthCal_GetMonthRange(GetHwnd(), GMR_DAYSTATE, NULL);

    // 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
    //
    // OTOH Windows 7 control can show all 12 months or even years or decades
    // in its window if you "zoom out" of it by double clicking on free areas
    // so the return value can be (much, in case of decades view) greater than
    // 3 but in this case marks are not visible anyhow so simply ignore it
    if ( nMonths >= 2 && nMonths <= WXSIZEOF(states) )
    {
        // The current, fully visible month is always the second one.
        states[1] = m_marks | m_holidays;

        if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) )
        {
            wxLogLastError(wxT("MonthCal_SetDayState"));
        }
    }
    //else: not a month view at all
}
Ejemplo n.º 3
0
void wxCalendarCtrl::UpdateMarks()
{
    // 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);

    // 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" );

    // the fully visible month is the one in the middle
    states[1] = m_marks | m_holidays;

    if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) )
    {
        wxLogLastError(wxT("MonthCal_SetDayState"));
    }
}