CMonthCalCtrl (clase)

Encapsula la funcionalidad de un control de calendario mensual.

Sintaxis

class CMonthCalCtrl : public CWnd

Miembros

Constructores públicos

Nombre Descripción
CMonthCalCtrl::CMonthCalCtrl Construye un objeto CMonthCalCtrl.

Métodos públicos

Nombre Descripción
CMonthCalCtrl::Create Crea un control de calendario mensual y lo adjunta al objeto CMonthCalCtrl.
CMonthCalCtrl::GetCalendarBorder Recupera el ancho del borde del control de calendario mensual actual.
CMonthCalCtrl::GetCalendarCount Recupera el número de calendarios que se muestran en el control de calendario mensual actual.
CMonthCalCtrl::GetCalendarGridInfo Recupera información sobre el control de calendario mensual actual.
CMonthCalCtrl::GetCalID Recupera el identificador de calendario para el control de calendario mensual actual.
CMonthCalCtrl::GetColor Obtiene el color de un área especificada de un control de calendario mensual.
CMonthCalCtrl::GetCurrentView Recupera la vista que muestra actualmente el control de calendario mensual actual.
CMonthCalCtrl::GetCurSel Recupera la hora del sistema tal como se indica en la fecha seleccionada actualmente.
CMonthCalCtrl::GetFirstDayOfWeek Obtiene el primer día de la semana que se va a mostrar en la columna situada más a la izquierda del calendario.
CMonthCalCtrl::GetMaxSelCount Recupera el número máximo de días actuales que se pueden seleccionar en un control de calendario mensual.
CMonthCalCtrl::GetMaxTodayWidth Recupera el ancho máximo de la cadena "Today" para el control de calendario mensual actual.
CMonthCalCtrl::GetMinReqRect Recupera el tamaño mínimo necesario para mostrar un mes completo en un control de calendario mensual.
CMonthCalCtrl::GetMonthDelta Recupera la tasa de desplazamiento para un control de calendario mensual.
CMonthCalCtrl::GetMonthRange Recupera la información de fecha que representa los límites superior e inferior de la presentación del control de calendario mensual.
CMonthCalCtrl::GetRange Recupera las fechas mínima y máxima actuales establecidas en un control de calendario mensual.
CMonthCalCtrl::GetSelRange Recupera la información de fecha que representa los límites superior e inferior del intervalo de fechas seleccionado actualmente por el usuario.
CMonthCalCtrl::GetToday Recupera la información de fecha para la fecha especificada como "today" para un control de calendario mensual.
CMonthCalCtrl::HitTest Determina qué sección de un control de calendario mensual se encuentra en un punto determinado de la pantalla.
CMonthCalCtrl::IsCenturyView Indica si la vista actual del control de calendario mensual actual es la vista de siglo.
CMonthCalCtrl::IsDecadeView Indica si la vista actual del control de calendario mensual actual es la vista de década.
CMonthCalCtrl::IsMonthView Indica si la vista actual del control de calendario mensual actual es la vista de mes.
CMonthCalCtrl::IsYearView Indica si la vista actual del control de calendario mensual actual es la vista de año.
CMonthCalCtrl::SetCalendarBorder Establece el ancho del borde del control de calendario mensual actual.
CMonthCalCtrl::SetCalendarBorderDefault Establece el ancho predeterminado del borde del control de calendario mensual actual.
CMonthCalCtrl::SetCalID Establece el identificador de calendario para el control de calendario mensual actual.
CMonthCalCtrl::SetCenturyView Establece el control de calendario mensual actual para mostrar la vista de siglo.
CMonthCalCtrl::SetColor Establece el color de un área especificada de un control de calendario mensual.
CMonthCalCtrl::SetCurrentView Establece el control de calendario mensual actual para mostrar la vista especificada.
CMonthCalCtrl::SetCurSel Establece la fecha seleccionada actualmente para un control de calendario mensual.
CMonthCalCtrl::SetDayState Establece la presentación de días en un control de calendario mensual.
CMonthCalCtrl::SetDecadeView Establece el control de calendario mensual actual en la vista de década.
CMonthCalCtrl::SetFirstDayOfWeek Establece el primer día de la semana que se va a mostrar en la columna situada más a la izquierda del calendario.
CMonthCalCtrl::SetMaxSelCount Establece el número máximo de días que se pueden seleccionar en un control de calendario mensual.
CMonthCalCtrl::SetMonthDelta Establece la tasa de desplazamiento para un control de calendario mensual.
CMonthCalCtrl::SetMonthView Establece el control de calendario mensual actual para mostrar la vista de mes.
CMonthCalCtrl::SetRange Establece las fechas mínima y máxima permitidas para un control de calendario mensual.
CMonthCalCtrl::SetSelRange Establece la selección de un control de calendario mensual en un intervalo de fechas determinado.
CMonthCalCtrl::SetToday Establece el control de calendario para el día actual.
CMonthCalCtrl::SetYearView Establece el control de calendario mensual actual en la vista de año.
CMonthCalCtrl::SizeMinReq Vuelve a dibujar el control de calendario mensual en su tamaño mínimo, que es un mes.
CMonthCalCtrl::SizeRectToMin Para el control de calendario mensual actual, calcula el rectángulo más pequeño que puede contener todos los calendarios que caben en un rectángulo especificado.

Comentarios

El control de calendario mensual proporciona al usuario una interfaz de calendario simple, en la que el usuario puede seleccionar una fecha. Para cambiar la presentación, el usuario puede realizar lo siguiente:

  • Desplazarse hacia atrás y hacia delante, mes a mes.

  • Hacer clic en el texto Today para mostrar el día actual (si no se usa el estilo MCS_NOTODAY).

  • Seleccionar un mes o un año en un menú emergente.

Puede personalizar el control de calendario mensual aplicando una variedad de estilos al objeto al crearlo. Estos estilos se describen en Estilos de control de calendario mensual en Windows SDK.

En el control de calendario mensual se puede mostrar más de un mes y se pueden indicar días especiales (como días festivos) poniendo la fecha en negrita.

Para más información sobre el uso del control de calendario mensual, consulte Uso de CMonthCalCtrl.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CMonthCalCtrl

Requisitos

Encabezado: afxdtctl.h

CMonthCalCtrl::CMonthCalCtrl

Construye un objeto CMonthCalCtrl.

CMonthCalCtrl();

Comentarios

Debe llamar a Create después de construir el objeto.

CMonthCalCtrl::Create

Crea un control de calendario mensual y lo adjunta al objeto CMonthCalCtrl.

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

virtual BOOL Create(
    DWORD dwStyle,
    const POINT& pt,
    CWnd* pParentWnd,
    UINT nID);

Parámetros

dwStyle
Especifica la combinación de estilos Windows aplicados al control de calendario mensual. Consulte Estilos de control de calendario mensual en Windows SDK para más información sobre los estilos.

rect
Referencia a una estructura RECT. Contiene la posición y el tamaño del control de calendario mensual.

pt
Referencia a una estructura POINT que identifica la ubicación del control de calendario mensual.

pParentWnd
Puntero a un objeto CWnd que es la ventana primaria del control de calendario mensual. No debe ser NULL.

Nid
Especifica el id. de control del control de calendario mensual.

Valor devuelto

Es distinto de cero si la inicialización se realiza correctamente; de lo contrario,es 0.

Comentarios

Cree un control de calendario mensual en dos pasos:

  1. Llame a CMonthCalCtrl para construir un objeto CMonthCalCtrl.

  2. Llame a esta función miembro, que crea el control de calendario mensual y lo adjunta al objeto CMonthCalCtrl.

Cuando se llama a Create, se inicializan los controles habituales. La versión de Create que llama determina cómo se ajusta el tamaño:

  • Para que MFC cambie automáticamente el tamaño del control a un mes, llame a la invalidación que usa el parámetro pt.

  • Para ajustar el tamaño del control usted mismo, llame a la invalidación de esta función que usa el parámetro rect.

Ejemplo

// Given two member objects m_calCtrl1 and m_calCtrl2, we can
// create them in one of two ways.

// Providing a point has the control with its top-left corner
// at that point and sized automatically to show one month
// page.

CPoint pt(10, 10);
VERIFY(m_calCtrl1.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE |
                             WS_BORDER | MCS_DAYSTATE,
                         pt, this, IDC_MONTHCALCTRL1));

// Providing a rectangle lets us completely control the size.
// The control will paint as many complete month pages in the
// control's area as possible.

CRect rect(300, 100, 470, 200);
VERIFY(m_calCtrl2.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE |
                             WS_BORDER | MCS_MULTISELECT,
                         rect, this, IDC_MONTHCALCTRL2));

CMonthCalCtrl::GetCalendarBorder

Recupera el ancho del borde del control de calendario mensual actual.

int GetCalendarBorder() const;

Valor devuelto

Ancho del borde del control, en píxeles.

Comentarios

Este método envía el mensaje MCM_GETCALENDARBORDER, que se describe en Windows SDK.

CMonthCalCtrl::GetCalendarCount

Recupera el número de calendarios que se muestran en el control de calendario mensual actual.

int GetCalendarCount() const;

Valor devuelto

Número de calendarios que se muestran actualmente en el control de calendario mensual. El número máximo de calendarios permitidos es 12.

Comentarios

Este método envía el mensaje MCM_GETCALENDARCOUNT, que se describe en Windows SDK.

CMonthCalCtrl::GetCalendarGridInfo

Recupera información sobre el control de calendario mensual actual.

BOOL GetCalendarGridInfo(PMCGRIDINFO pmcGridInfo) const;

Parámetros

pmcGridInfo
[out] Puntero a una estructura MCGRIDINFO que recibe información sobre el control de calendario mensual actual. El autor de la llamada es responsable de asignar e inicializar esta estructura.

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Este método envía el mensaje MCM_GETCALENDARGRIDINFO, que se describe en Windows SDK.

Ejemplo

En el primer ejemplo del código se define la variable m_monthCalCtrl, que se usa para acceder mediante programación al control de calendario mensual. Esta variable se utiliza en el siguiente ejemplo.

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

En el ejemplo de código siguiente se usa el método GetCalendarGridInfo para recuperar la fecha del calendario que muestra el control de calendario mensual actual.

WCHAR name[26];
name[0] = _T('\0');
MCGRIDINFO gridInfo;
gridInfo.cbSize = sizeof(MCGRIDINFO);
gridInfo.dwPart = MCGIP_CALENDARHEADER;
gridInfo.dwFlags = MCGIF_NAME;
gridInfo.iCalendar = 0;
gridInfo.pszName = reinterpret_cast<PWSTR>(&name);
gridInfo.cchName = sizeof(name);

m_monthCalCtrl.GetCalendarGridInfo(&gridInfo);

CString str;
CString calendarDate(name);
str.Format(_T("Calendar date: '%s'"), calendarDate);
AfxMessageBox(str, MB_ICONINFORMATION);

CMonthCalCtrl::GetCalID

Recupera el identificador de calendario para el control de calendario mensual actual.

CALID GetCalID() const;

Valor devuelto

Una de las constantes de identificador de calendario.

Comentarios

Un identificador de calendario indica un calendario específico de la región, como los calendarios gregoriano (localizado), japonés o Hijri. La aplicación puede usar un identificador de calendario que tenga varias funciones de compatibilidad de lenguaje.

Este método envía el mensaje MCM_GETCALID, que se describe en Windows SDK.

CMonthCalCtrl::GetColor

Recupera el color de un área del control de calendario mensual especificado por nRegion.

COLORREF GetColor(int nRegion) const;

Parámetros

nRegion
Región del control de calendario mensual de la que se recupera el color. Para una lista de valores, vea el parámetro nRegion de SetColor.

Valor devuelto

Valor COLORREF que especifica el color asociado a la parte del control de calendario mensual, si se ejecuta correctamente. De lo contrario, esta función miembro devuelve -1.

CMonthCalCtrl::GetCurrentView

Recupera la vista que muestra actualmente el control de calendario mensual actual.

DWORD GetCurrentView() const;

Valor devuelto

La vista actual, que se indica mediante uno de los valores siguientes:

Valor Significado
MCMV_MONTH Vista mensual
MCMV_YEAR Vista anual
MCMV_DECADE Vista de década
MCMV_CENTURY Vista de siglo

Comentarios

Este método envía el mensaje MCM_GETCURRENTVIEW, que se describe en Windows SDK.

Ejemplo

En el primer ejemplo del código se define la variable m_monthCalCtrl, que se usa para acceder mediante programación al control de calendario mensual. Esta variable se utiliza en el siguiente ejemplo.

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

En el ejemplo de código siguiente se informa de la vista que el control de calendario mensual muestra actualmente.

CString str;
CString msg = _T("The current calendar displays %s view.");
DWORD view = m_monthCalCtrl.GetCurrentView();
switch (view)
{
case MCMV_MONTH:
   str.Format(msg, _T("month"));
   break;
case MCMV_YEAR:
   str.Format(msg, _T("year"));
   break;
case MCMV_DECADE:
   str.Format(msg, _T("decade"));
   break;
case MCMV_CENTURY:
   str.Format(msg, _T("century"));
   break;
default:
   str.Format(msg, _T("an unknown"));
   break;
}
AfxMessageBox(str, MB_ICONINFORMATION);

CMonthCalCtrl::GetCurSel

Recupera la hora del sistema tal como se indica en la fecha seleccionada actualmente.

BOOL GetCurSel(COleDateTime& refDateTime) const;  BOOL GetCurSel(CTime& refDateTime) const;

BOOL GetCurSel(LPSYSTEMTIME pDateTime) const;

Parámetros

refDateTime
Referencia a un objeto COleDateTime o a un objeto CTime. Recibe la hora actual.

pDateTime
Puntero a una estructura SYSTEMTIME que recibirá la información de fecha seleccionada actualmente. Este parámetro debe ser una dirección válida y no puede ser NULL.

Valor devuelto

Distinto de cero, si se ejecuta correctamente; en caso contrario, 0.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETCURSEL de Win32, tal y como se describe en Windows SDK.

Nota:

Se produce un error en esta función miembro si se establece el estilo MCS_MULTISELECT.

En la implementación de MFC de GetCurSel, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

CMonthCalCtrl::GetFirstDayOfWeek

Obtiene el primer día de la semana que se va a mostrar en la columna situada más a la izquierda del calendario.

int GetFirstDayOfWeek(BOOL* pbLocal = NULL) const;

Parámetros

pbLocal
Puntero a un valor BOOL. Si el valor es distinto de cero, el valor del control no coincide con el valor del panel de control.

Valor devuelto

Valor entero que representa el primer día de la semana. Vea Comentarios para más información sobre lo que representan estos enteros.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETFIRSTDAYOFWEEK de Win32, tal y como se describe en Windows SDK. Los días de la semana se representan como enteros, según se indica a continuación.

Valor Día de la semana
0 Lunes
1 Martes
2 Miércoles
3 Jueves
4 Viernes
5 Sábado
6 Domingo

Ejemplo

Vea el ejemplo de CMonthCalCtrl::SetFirstDayOfWeek.

CMonthCalCtrl::GetMaxSelCount

Recupera el número máximo de días actuales que se pueden seleccionar en un control de calendario mensual.

int GetMaxSelCount() const;

Valor devuelto

Valor entero que representa el número total de días que se pueden seleccionar para el control.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETMAXSELCOUNT de Win32, tal y como se describe en Windows SDK. Use esta función miembro para los controles con el conjunto de estilos MCS_MULTISELECT.

Ejemplo

Vea el ejemplo de CMonthCalCtrl::SetMaxSelCount.

CMonthCalCtrl::GetMaxTodayWidth

Recupera el ancho máximo de la cadena "Today" para el control de calendario mensual actual.

DWORD GetMaxTodayWidth() const;

Valor devuelto

Ancho de la cadena "Today", en píxeles.

Ejemplo

En el primer ejemplo del código se define la variable m_monthCalCtrl, que se usa para acceder mediante programación al control de calendario mensual. Esta variable se utiliza en el siguiente ejemplo.

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

En el siguiente código de ejemplo se muestra el método GetMaxTodayWidth.

DWORD width = m_monthCalCtrl.GetMaxTodayWidth();
CString str;
str.Format(_T("The maximum today width is %d."), width);
AfxMessageBox(str, MB_ICONINFORMATION);

Comentarios

El usuario puede volver a la fecha actual haciendo clic en la cadena "Today", que se muestra en la parte inferior del control de calendario mensual. La cadena "Today" incluye texto de etiqueta y texto de fecha.

Este método envía el mensaje MCM_GETMAXTODAYWIDTH, que se describe en Windows SDK.

CMonthCalCtrl::GetMinReqRect

Recupera el tamaño mínimo necesario para mostrar un mes completo en un control de calendario mensual.

BOOL GetMinReqRect(RECT* pRect) const;

Parámetros

pRect
Puntero a una estructura RECT que recibirá información de rectángulo delimitador. Este parámetro debe ser una dirección válida y no puede ser NULL.

Valor devuelto

Si se ejecuta correctamente, esta función miembro devuelve un valor distinto de cero y lpRect recibe la información de límite aplicable. Si no se realiza correctamente, la función miembro devuelve 0.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETMINREQRECT de Win32, tal y como se describe en Windows SDK.

CMonthCalCtrl::GetMonthDelta

Recupera la tasa de desplazamiento para un control de calendario mensual.

int GetMonthDelta() const;

Valor devuelto

La tasa de desplazamiento para el control de calendario mensual. La tasa de desplazamiento es el número de meses que el control mueve su presentación cuando el usuario hace clic en un botón de desplazamiento una vez.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETMONTHDELTA de Win32, tal y como se describe en Windows SDK.

CMonthCalCtrl::GetMonthRange

Recupera la información de fecha que representa los límites superior e inferior de la presentación del control de calendario mensual.

int GetMonthRange(
    COleDateTime& refMinRange,
    COleDateTime& refMaxRange,
    DWORD dwFlags) const;

int GetMonthRange(
    CTime& refMinRange,
    CTime& refMaxRange,
    DWORD dwFlags) const;

int GetMonthRange(
    LPSYSTEMTIME pMinRange,
    LPSYSTEMTIME pMaxRange,
    DWORD dwFlags) const;

Parámetros

refMinRange
Referencia a un objeto COleDateTime o CTime que contiene la fecha mínima permitida.

refMaxRange
Referencia a un objeto COleDateTime o CTime que contiene la fecha máxima permitida.

pMinRange
Puntero a una estructura SYSTEMTIME que contiene la fecha en el extremo inferior del intervalo.

pMaxRange
Puntero a una estructura SYSTEMTIME que contiene la fecha en el extremo superior del intervalo.

dwFlags
Valor que especifica el ámbito de los límites de intervalo que se van a recuperar. Este valor debe ser uno de los siguientes.

Valor Significado
GMR_DAYSTATE Incluye los meses anterior y final del intervalo visible que solo se muestran parcialmente.
GMR_VISIBLE Incluye solo los meses que se muestran por completo.

Valor devuelto

Entero que representa el intervalo, en meses, que abarca hasta los dos límites indicados por refMinRange y refMaxRange en las versiones primera y segunda, o pMinRange y pMaxRange en la tercera versión.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETMONTHRANGE de Win32, tal y como se describe en Windows SDK. En la implementación de MFC de GetMonthRange, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

Ejemplo

Vea el ejemplo de CMonthCalCtrl::SetDayState.

CMonthCalCtrl::GetRange

Recupera las fechas mínima y máxima actuales establecidas en un control de calendario mensual.

DWORD GetRange(
    COleDateTime* pMinRange,
    COleDateTime* pMaxRange) const;

DWORD GetRange(
    CTime* pMinRange,
    CTime* pMaxRange) const;

DWORD GetRange(
    LPSYSTEMTIME pMinRange,
    LPSYSTEMTIME pMaxRange) const;

Parámetros

pMinRange
Puntero a un objeto COleDateTime, un objeto CTime o una estructura SYSTEMTIME que contiene la fecha en el extremo inferior del intervalo.

pMaxRange
Puntero a un objeto COleDateTime, un objeto CTime o una estructura SYSTEMTIME que contiene la fecha en el extremo superior del intervalo.

Valor devuelto

DWORD que puede ser cero (no se establecen límites) o una combinación de los valores siguientes que especifican información de límite.

Valor Significado
GDTR_MAX Se establece un límite máximo para el control; pMaxRange es válido y contiene la información de fecha aplicable.
GDTR_MIN Se establece un límite mínimo para el control; pMinRange es válido y contiene la información de fecha aplicable.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETRANGE de Win32, tal y como se describe en Windows SDK. En la implementación de MFC de GetRange, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

Ejemplo

// This code fragment sets a variety of ranges in the
// control, and calls a separate function to show the
// set range to the user.

void CMonthCalDlg::OnBnClickedRangebutton()
{
   // set minimum of January 1st, 1995 with no maximum
   COleDateTime dtMin;
   COleDateTime dtMax;

   dtMin = COleDateTime(1995, 1, 1, 0, 0, 0);
   dtMax.SetStatus(COleDateTime::null);
   m_calCtrl1.SetRange(&dtMin, &dtMax);
   ShowRange(&m_calCtrl1);

   // set no minimum and a maximum of September 30th, 1997
   dtMin.SetStatus(COleDateTime::null);
   dtMax = COleDateTime(1997, 9, 30, 0, 0, 0);
   m_calCtrl1.SetRange(&dtMin, &dtMax);
   ShowRange(&m_calCtrl1);

   // set minimum of April 15, 1992 and maximum of June 5, 2002
   dtMin = COleDateTime(1992, 4, 15, 0, 0, 0);
   dtMax = COleDateTime(2002, 6, 5, 0, 0, 0);
   m_calCtrl1.SetRange(&dtMin, &dtMax);
   ShowRange(&m_calCtrl1);
}

void CMonthCalDlg::ShowRange(CMonthCalCtrl *pMoCalCtrl)
{
   ASSERT(pMoCalCtrl != NULL);
   CString strMessage;
   COleDateTime dtMinimum;
   COleDateTime dtMaximum;

   // Get the range
   DWORD dwResult = pMoCalCtrl->GetRange(&dtMinimum, &dtMaximum);

   // If a minimum was specified, format it
   // otherwise, indicate that there is no lower bound
   if (dwResult & GDTR_MIN)
      strMessage += dtMinimum.Format(_T("Minimum range is %x %X.\r\n"));
   else
      strMessage += _T("No minimum range.\r\n");

   // Treat maximum similarly
   if (dwResult & GDTR_MAX)
      strMessage += dtMaximum.Format(_T("Maximum range is %x %X.\r\n"));
   else
      strMessage += _T("No maximum range.\r\n");

   // Show the user
   AfxMessageBox(strMessage);
}

CMonthCalCtrl::GetSelRange

Recupera la información de fecha que representa los límites superior e inferior del intervalo de fechas seleccionado actualmente por el usuario.

BOOL GetSelRange(
    COleDateTime& refMinRange,
    COleDateTime& refMaxRange) const;

BOOL GetSelRange(
    CTime& refMinRange,
    CTime& refMaxRange) const;

BOOL GetSelRange(
    LPSYSTEMTIME pMinRange,
    LPSYSTEMTIME pMaxRange) const;

Parámetros

refMinRange
Referencia a un objeto COleDateTime o CTime que contiene la fecha mínima permitida.

refMaxRange
Referencia a un objeto COleDateTime o CTime que contiene la fecha máxima permitida.

pMinRange
Puntero a una estructura SYSTEMTIME que contiene la fecha en el extremo inferior del intervalo.

pMaxRange
Puntero a una estructura SYSTEMTIME que contiene la fecha en el extremo superior del intervalo.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETSELRANGE de Win32, tal y como se describe en Windows SDK. GetSelRange generará un error si se aplica a un control de calendario mensual que no usa el estilo MCS_MULTISELECT.

En la implementación de MFC de GetSelRange, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

CMonthCalCtrl::GetToday

Recupera la información de fecha para la fecha especificada como "today" para un control de calendario mensual.

BOOL GetToday(COleDateTime& refDateTime) const;  BOOL GetToday(COleDateTime& refDateTime) const;

BOOL GetToday(LPSYSTEMTIME pDateTime) const;

Parámetros

refDateTime
Referencia a un objeto COleDateTime o CTime que indica el día actual.

pDateTime
Puntero a una estructura SYSTEMTIME que recibirá la información de fecha. Este parámetro debe ser una dirección válida y no puede ser NULL.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_GETTODAY de Win32, tal y como se describe en Windows SDK. En la implementación de MFC de GetToday, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

Ejemplo

void CMonthCalDlg::OnBnClickedGettodaybutton()
{
   COleDateTime timeToday;
   if (m_calCtrl1.GetToday(timeToday))
   {
      // Format the date information from the value we received
      // and post a message box about it.
      CString str = timeToday.Format(VAR_DATEVALUEONLY);
      AfxMessageBox(str);

      // Set the control's "today" indicator to be five
      // days previous.
      timeToday -= 5;
      m_calCtrl1.SetToday(timeToday);
   }
   else
   {
      // Something is wrong!
      ASSERT(FALSE);
   }
}

CMonthCalCtrl::HitTest

Determina qué control de calendario mensual, si existe, está en una posición especificada.

DWORD HitTest(PMCHITTESTINFO pMCHitTest);

Parámetros

pMCHitTest
Puntero a una estructura MCHITTESTINFO que contiene puntos de prueba de posicionamiento para el control de calendario mensual.

Valor devuelto

Valor DWORD. Igual al miembro uHit de la estructura MCHITTESTINFO.

Comentarios

HitTest usa la estructura MCHITTESTINFO, que contiene información sobre la prueba de posicionamiento.

CMonthCalCtrl::IsCenturyView

Indica si la vista actual del control de calendario mensual actual es la vista de siglo.

BOOL IsCenturyView() const;

Valor devuelto

TRUE si la vista actual es una vista de siglo; de lo contrario, FALSE.

Comentarios

Este método envía el mensaje MCM_GETCURRENTVIEW, que se describe en Windows SDK. Si ese mensaje devuelve MCMV_CENTURY, este método devuelve TRUE.

CMonthCalCtrl::IsDecadeView

Indica si la vista actual del control de calendario mensual actual es la vista de década.

BOOL IsDecadeView() const;

Valor devuelto

TRUE si la vista actual es una vista de década; de lo contrario, FALSE.

Comentarios

Este método envía el mensaje MCM_GETCURRENTVIEW, que se describe en Windows SDK. Si ese mensaje devuelve MCMV_DECADE, este método devuelve TRUE.

CMonthCalCtrl::IsMonthView

Indica si la vista actual del control de calendario mensual actual es la vista de mes.

BOOL IsMonthView() const;

Valor devuelto

TRUE si la vista actual es una vista de mes; de lo contrario, FALSE.

Comentarios

Este método envía el mensaje MCM_GETCURRENTVIEW, que se describe en Windows SDK. Si ese mensaje devuelve MCMV_MONTH, este método devuelve TRUE.

CMonthCalCtrl::IsYearView

Indica si la vista actual del control de calendario mensual actual es la vista de año.

BOOL IsYearView() const;

Valor devuelto

TRUE si la vista actual es una vista de año; de lo contrario, FALSE.

Comentarios

Este método envía el mensaje MCM_GETCURRENTVIEW, que se describe en Windows SDK. Si ese mensaje devuelve MCMV_YEAR, este método devuelve TRUE.

CMonthCalCtrl::SetCalendarBorder

Establece el ancho del borde del control de calendario mensual actual.

void SetCalendarBorder(int cxyBorder);

Parámetros

cxyBorder
[in] El ancho del borde en píxeles.

Comentarios

Si este método se ejecuta correctamente, el ancho del borde se establece en el parámetro cxyBorder. De lo contrario, el ancho del borde se restablece en el valor predeterminado especificado por el tema actual o cero si no se usan temas.

Este método envía el mensaje MCM_SETCALENDARBORDER, que se describe en Windows SDK.

Ejemplo

En el primer ejemplo del código se define la variable m_monthCalCtrl, que se usa para acceder mediante programación al control de calendario mensual. Esta variable se utiliza en el siguiente ejemplo.

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

En el ejemplo de código siguiente se establece el ancho de borde del control de calendario mensual en ocho píxeles. Use el método CMonthCalCtrl::GetCalendarBorder para determinar si este método se realizó correctamente.

// Use the GetCalendarBorder() method to determine whether
// this method succeeded or failed.
m_monthCalCtrl.SetCalendarBorder(8);

CMonthCalCtrl::SetCalendarBorderDefault

Establece el ancho predeterminado del borde del control de calendario mensual actual.

void SetCalendarBorderDefault();

Comentarios

El ancho del borde se establece en el valor predeterminado especificado por el tema actual o cero si no se usan temas.

Este método envía el mensaje MCM_SETCALENDARBORDER, que se describe en Windows SDK.

CMonthCalCtrl::SetCalID

Establece el identificador de calendario para el control de calendario mensual actual.

BOOL SetCalID(CALID calid);

Parámetros

calid
[in] Una de las constantes de identificador de calendario.

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Un identificador de calendario especifica un calendario específico de la región, como los calendarios gregoriano (localizado), japonés o Hijri. Use el método SetCalID para mostrar un calendario especificado por el parámetro calid si la configuración regional que contiene el calendario está instalada en el equipo.

Este método envía el mensaje MCM_SETCALID, que se describe en Windows SDK.

Ejemplo

En el primer ejemplo del código se define la variable m_monthCalCtrl, que se usa para acceder mediante programación al control de calendario mensual. Esta variable se utiliza en el siguiente ejemplo.

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

En el ejemplo de código siguiente se establece el control de calendario mensual para mostrar el calendario de la Era del emperador japonés. El método SetCalID solo se realiza correctamente si ese calendario está instalado en el equipo.

BOOL rc = m_monthCalCtrl.SetCalID(CAL_JAPAN);
CString str = _T("Calendar change ");
;
if (rc == TRUE)
   str += _T("succeeded.");
else
{
   str += _T("failed.\n");
   str += _T("Perhaps this locale is not installed.");
}
AfxMessageBox(str, MB_ICONINFORMATION);

CMonthCalCtrl::SetCenturyView

Establece el control de calendario mensual actual para mostrar la vista de siglo.

BOOL SetCenturyView();

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Este método usa el método CMonthCalCtrl::SetCurrentView para establecer la vista en MCMV_CENTURY, que representa la vista de siglo.

CMonthCalCtrl::SetColor

Establece el color de un área especificada de un control de calendario mensual.

COLORREF SetColor(
    int nRegion,
    COLORREF ref);

Parámetros

nRegion
Valor entero que especifica qué color de calendario mensual se va a establecer. Puede tomar uno de los valores siguientes.

Valor Significado
MCSC_BACKGROUND Color de fondo mostrado entre meses.
MCSC_MONTHBK Color de fondo que se muestra dentro del mes.
MCSC_TEXT Color usado para mostrar texto en un mes.
MCSC_TITLEBK Color de fondo que se muestra en el título del calendario.
MCSC_TITLETEXT Color usado para mostrar texto en el título del calendario.
MCSC_TRAILINGTEXT Color usado para mostrar el texto de los días de encabezado y finales. Los días de encabezado y finales son los días de los meses anterior y siguiente que aparecen en el calendario actual.

ref
Valor COLORREF para la nueva configuración de color para la parte especificada del control de calendario mensual.

Valor devuelto

Valor COLORREF que representa la configuración de color anterior para la parte especificada del control de calendario mensual, si se ejecuta correctamente. De lo contrario, este mensaje devuelve -1.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETCOLOR de Win32, tal y como se describe en Windows SDK.

Ejemplo

// Set colors for title text and title background to match
// the Control Panel settings for inactive window captions.
m_calCtrl1.SetColor(MCSC_TITLETEXT, ::GetSysColor(COLOR_INACTIVECAPTIONTEXT));
m_calCtrl1.SetColor(MCSC_TITLEBK, ::GetSysColor(COLOR_INACTIVECAPTION));

CMonthCalCtrl::SetCurrentView

Establece el control de calendario mensual actual para mostrar la vista especificada.

BOOL SetCurrentView(DWORD dwNewView);

Parámetros

dwNewView
[in] Uno de los valores siguientes que especifica una vista mensual, anual, de década o de siglo.

  • MCMV_MONTH: vista mensual
  • MCMV_YEAR: vista anual
  • MCMV_DECADE: vista de década
  • MCMV_CENTURY: vista de siglo

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Este método envía el mensaje MCM_SETCURRENTVIEW, que se describe en Windows SDK.

CMonthCalCtrl::SetCurSel

Establece la fecha seleccionada actualmente para un control de calendario mensual.

BOOL SetCurSel(const COleDateTime& refDateTime);
BOOL SetCurSel(const CTime& refDateTime);
BOOL SetCurSel(const LPSYSTEMTIME pDateTime);

Parámetros

refDateTime
Referencia a un objeto COleDateTime o CTime que indica el control de calendario mensual seleccionado actualmente.

pDateTime
Puntero a una estructura SYSTEMTIME que contiene la fecha que se va a establecer como selección actual.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETCURSEL de Win32, tal y como se describe en Windows SDK. En la implementación de MFC de SetCurSel, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

Ejemplo

void CMonthCalDlg::OnBnClickedCurselbutton()
{
   // All of these calls set the current selection to March 15, 1998.

   // with a COleDateTime
   COleDateTime dt1(1998, 3, 15, 0, 0, 0);
   m_calCtrl1.SetCurSel(dt1);

   // with a CTime
   CTime dt2(1998, 3, 15, 0, 0, 0);
   m_calCtrl1.SetCurSel(dt2);

   // with a SYSTEMTIME structure

   SYSTEMTIME sysTime;

   // set everything to zero
   memset(&sysTime, 0, sizeof(sysTime));

   // except for the date we want
   sysTime.wYear = 1998;
   sysTime.wMonth = 3;
   sysTime.wDay = 15;

   m_calCtrl1.SetCurSel(&sysTime);
}

CMonthCalCtrl::SetDayState

Establece la presentación de días en un control de calendario mensual.

BOOL SetDayState(
    int nMonths,
    LPMONTHDAYSTATE pStates);

Parámetros

nMonths
Valor que indica cuántos elementos hay en la matriz a la que apunta pStates.

pStates
Puntero a una matriz MONTHDAYSTATE de valores que definen cómo dibujará el control de calendario mensual cada día en su presentación. El tipo de datos MONTHDAYSTATE es un campo de bits, donde cada bit (de 1 a 31) representa el estado de un día de un mes. Si un bit está activado, el día correspondiente se mostrará en negrita; de lo contrario, se mostrará sin énfasis.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETDAYSTATE de Win32, tal y como se describe en Windows SDK.

Ejemplo

void CMonthCalDlg::OnBnClickedDaystatebutton()
{
   // First, we must find the visible range. The array we pass to the
   // SetDayState() function must be large enough to hold days for all
   // of the visible months. Even if a month is _partially_ visible,
   // we must have MONTHDAYSTATE data for it in the array we pass.
   // GetMonthRange() returns the range of days currently visible in
   // the control, along with a count of visible months. This array
   // will be up to 2 months larger than the number of "pages" visible
   // in the control.

   SYSTEMTIME timeFrom;
   SYSTEMTIME timeUntil;
   int nCount = m_calCtrl1.GetMonthRange(&timeFrom, &timeUntil, GMR_DAYSTATE);

   // Allocate the state array based on the return value.

   LPMONTHDAYSTATE pDayState;
   pDayState = new MONTHDAYSTATE[nCount];
   memset(pDayState, 0, sizeof(MONTHDAYSTATE) * nCount);

   // Find the first fully visible month.

   int nIndex = (timeFrom.wDay == 1) ? 0 : 1;

   // Set the 4th day, 19th day, and 26th day of the first
   // _fully_ visible month as bold.

   pDayState[nIndex] |= 1 << 3;  // 4th day
   pDayState[nIndex] |= 1 << 18; // 19th day
   pDayState[nIndex] |= 1 << 25; // 25th day

   // Set state and clean up

   VERIFY(m_calCtrl1.SetDayState(nCount, pDayState));
   delete[] pDayState;
}

CMonthCalCtrl::SetDecadeView

Establece el control de calendario mensual actual en la vista de década.

BOOL SetDecadeView();

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Este método usa el método CMonthCalCtrl::SetCurrentView para establecer la vista en MCMV_DECADE, que representa la vista de década.

CMonthCalCtrl::SetFirstDayOfWeek

Establece el primer día de la semana que se va a mostrar en la columna situada más a la izquierda del calendario.

BOOL SetFirstDayOfWeek(
    int iDay,
    int* lpnOld = NULL);

Parámetros

iDay
Valor entero que representa el día que se va a establecer como el primer día de la semana. Este valor debe ser uno de los números de día. Consulte GetFirstDayOfWeek para una descripción de los números de día.

lpnOld
Puntero a un entero que indica el primer día de la semana establecido anteriormente.

Valor devuelto

Distinto de cero si el primer día de la semana anterior está establecido en un valor distinto del de LOCALE_IFIRSTDAYOFWEEK, que es el día indicado en la configuración del panel de control. De lo contrario, esta función devuelve 0.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETFIRSTDAYOFWEEK de Win32, tal y como se describe en Windows SDK.

Ejemplo

// This work isn't normally necessary, since the control will set
// the day of the week to match the system locale by itself.

// Ask the system for the first day of the week
TCHAR sz[2];
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IFIRSTDAYOFWEEK, sz, 2);

// Convert from string result
int nFirstDay = _ttoi(sz);

// Set it and assert that it was successful.
m_calCtrl1.SetFirstDayOfWeek(nFirstDay);
ASSERT(m_calCtrl1.GetFirstDayOfWeek() == nFirstDay);

CMonthCalCtrl::SetMaxSelCount

Establece el número máximo de días que se pueden seleccionar en un control de calendario mensual.

BOOL SetMaxSelCount(int nMax);

Parámetros

nMax
Valor que se establecerá para representar el número máximo de días seleccionables.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETMAXSELCOUNT de Win32, tal y como se describe en Windows SDK.

Ejemplo

// The control needs to have the MCS_MULTISELECT style
// for the following code to work.

// change the maximum selection count
m_calCtrl2.SetMaxSelCount(10);

// check that the change was really made
ASSERT(m_calCtrl2.GetMaxSelCount() == 10);

CMonthCalCtrl::SetMonthDelta

Establece la tasa de desplazamiento para un control de calendario mensual.

int SetMonthDelta(int iDelta);

Parámetros

iDelta
Número de meses que se van a establecer como tasa de desplazamiento del control. Si este valor es cero, la diferencia de mes se restablece en el valor predeterminado, que es el número de meses que se muestran en el control.

Valor devuelto

Tasa de desplazamiento anterior. Si no se ha establecido previamente la tasa de desplazamiento, el valor devuelto es 0.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETMONTHDELTA de Win32, tal y como se describe en Windows SDK.

CMonthCalCtrl::SetMonthView

Establece el control de calendario mensual actual para mostrar la vista de mes.

BOOL SetMonthView();

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Este método usa el método CMonthCalCtrl::SetCurrentView para establecer la vista en MCMV_MONTH, que representa la vista de mes.

Ejemplo

En el primer ejemplo del código se define la variable m_monthCalCtrl, que se usa para acceder mediante programación al control de calendario mensual. Esta variable se utiliza en el siguiente ejemplo.

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

En el ejemplo de código siguiente se establece el control de calendario mensual para mostrar las vistas de mes, año, década y siglo.

void CCMonthCalCtrl_s1Dlg::OnSetviewSetmonthview()
{
   m_monthCalCtrl.SetMonthView();
}

void CCMonthCalCtrl_s1Dlg::OnSetviewSetyearview()
{
   m_monthCalCtrl.SetYearView();
}

void CCMonthCalCtrl_s1Dlg::OnSetviewSetdecadeview()
{
   m_monthCalCtrl.SetDecadeView();
}

void CCMonthCalCtrl_s1Dlg::OnSetviewSetcenturyview()
{
   m_monthCalCtrl.SetCenturyView();
}

CMonthCalCtrl::SetRange

Establece las fechas mínima y máxima permitidas para un control de calendario mensual.

BOOL SetRange(
    const COleDateTime* pMinRange,
    const COleDateTime* pMaxRange);

BOOL SetRange(
    const CTime* pMinRange,
    const CTime* pMaxRange);

BOOL SetRange(
    const LPSYSTEMTIME pMinRange,
    const LPSYSTEMTIME pMaxRange);

Parámetros

pMinRange
Puntero a un objeto COleDateTime, un objeto CTime o una estructura SYSTEMTIME que contiene la fecha en el extremo inferior del intervalo.

pMaxRange
Puntero a un objeto COleDateTime, un objeto CTime o una estructura SYSTEMTIME que contiene la fecha en el extremo superior del intervalo.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETRANGE de Win32, tal y como se describe en Windows SDK. En la implementación de MFC de SetRange, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

Ejemplo

Vea el ejemplo de CMonthCalCtrl::GetRange.

CMonthCalCtrl::SetSelRange

Establece la selección de un control de calendario mensual en un intervalo de fechas determinado.

BOOL SetSelRange(
    const COleDateTime& pMinRange,
    const COleDateTime& pMaxRange);

BOOL SetSelRange(
    const CTime& pMinRange,
    const CTime& pMaxRange);

BOOL SetSelRange(
    const LPSYSTEMTIME pMinRange,
    const LPSYSTEMTIME pMaxRange);

Parámetros

pMinRange
Puntero a un objeto COleDateTime, un objeto CTime o una estructura SYSTEMTIME que contiene la fecha en el extremo inferior del intervalo.

pMaxRange
Puntero a un objeto COleDateTime, un objeto CTime o una estructura SYSTEMTIME que contiene la fecha en el extremo superior del intervalo.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETSELRANGE de Win32, tal y como se describe en Windows SDK. En la implementación de MFC de SetSelRange, puede especificar un uso de COleDateTime, un uso de CTime o un uso de estructura SYSTEMTIME.

CMonthCalCtrl::SetToday

Establece el control de calendario para el día actual.

void SetToday(const COleDateTime& refDateTime);
void SetToday(const CTime* pDateTime);
void SetToday(const LPSYSTEMTIME pDateTime);

Parámetros

refDateTime
Referencia a un objeto COleDateTime que contiene la fecha actual.

pDateTime
En la segunda versión, un puntero a un objeto CTime que contiene la información de fecha actual. En la tercera versión, un puntero a una estructura SYSTEMTIME que contiene la información de fecha actual.

Comentarios

Esta función miembro implementa el comportamiento del mensaje MCM_SETTODAY de Win32, tal y como se describe en Windows SDK.

Ejemplo

Vea el ejemplo de CMonthCalCtrl::GetToday.

CMonthCalCtrl::SetYearView

Establece el control de calendario mensual actual en la vista de año.

BOOL SetYearView();

Valor devuelto

TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.

Comentarios

Este método usa el método CMonthCalCtrl::SetCurrentView para establecer la vista en MCMV_YEAR, que representa la vista anual.

CMonthCalCtrl::SizeMinReq

Muestra el control de calendario mensual con el tamaño mínimo que muestra un mes.

BOOL SizeMinReq(BOOL bRepaint = TRUE);

Parámetros

bRepaint
Especifica si el control se va a volver a pintar. Valor predeterminado: TRUE. Si es FALSE, no se vuelve a pintar.

Valor devuelto

Distinto de cero si el control de calendario mensual tiene su tamaño mínimo; de lo contrario, 0.

Comentarios

Al llamar a SizeMinReq correctamente, se muestra el control de calendario mensual completo para el calendario de un mes.

CMonthCalCtrl::SizeRectToMin

Para el control de calendario mensual actual, calcula el rectángulo más pequeño que puede contener todos los calendarios que caben en un rectángulo especificado.

LPRECT SizeRectToMin(LPRECT lpRect);

Parámetros

lpRect
[in] Puntero a una estructura RECT que define un rectángulo que contiene el número deseado de calendarios.

Valor devuelto

Puntero a una estructura RECT que define un rectángulo cuyo tamaño es menor o igual que el rectángulo definido por el parámetro lpRect.

Comentarios

Este método calcula cuántos calendarios pueden caber en el rectángulo especificado por el parámetro lpRect y, a continuación, devuelve el rectángulo más pequeño que puede contener ese número de calendarios. En efecto, este método reduce el rectángulo especificado para ajustarse exactamente al número deseado de calendarios.

Este método envía el mensaje MCM_SIZERECTTOMIN, que se describe en Windows SDK.

Consulte también

Ejemplo CMNCTRL1 de MFC
CWnd (clase)
Gráfico de jerarquías
CDateTimeCtrl (clase)