Compartir por


Establecer Day State en un control de calendario mensual

Uno de los atributos de un control de calendario de mes es la capacidad de almacenar información, denominada estado de día del control, para cada día del mes. Esta información se usa para resaltar determinadas fechas del mes que se muestran actualmente.

Nota:

El objeto CMonthCalCtrl debe tener el estilo MCS_DAYSTATE para mostrar información de estado de día.

La información de estado del día se expresa como un tipo de datos de 32 bits, MONTHDAYSTATE. Cada bit de un campo de bits MONTHDAYSTATE (de 1 a 31) representa el estado de un día en un mes. Si un bit está activado, el día correspondiente se mostrará en negrita; de lo contrario, se mostrará sin énfasis.

Hay dos métodos para establecer el estado de día del control de calendario del mes: explícitamente con una llamada a CMonthCalCtrl::SetDayState o controlando el mensaje de notificación de MCN_GETDAYSTATE.

Control del mensaje de notificación de MCN_GETDAYSTATE

El control envía el mensaje MCN_GETDAYSTATE para determinar cómo deben mostrarse los días dentro de los meses visibles.

Nota:

Dado que el control almacena en caché los meses anteriores y siguientes, con respecto al mes visible, recibirá esta notificación cada vez que se elija un nuevo mes.

Para manejar correctamente este mensaje, debe determinar para cuántos meses se está solicitando la información del estado del día, inicializar una matriz de estructuras MONTHDAYSTATE con los valores adecuados e inicializar el miembro de la estructura relacionado con la nueva información. En el procedimiento siguiente se detallan los pasos necesarios, se supone que tiene un objeto CMonthCalCtrl denominado m_monthcal y una matriz de objetos MONTHDAYSTATE, mdState.

Para manejar el mensaje de notificación MCN_GETDAYSTATE

  1. Con el Asistente para clases, agregue un controlador de notificaciones para el mensaje MCN_GETDAYSTATE al objeto m_monthcal (consulte Asignar mensajes a funciones).

  2. En el cuerpo del controlador, agregue el código siguiente:

    LPNMDAYSTATE pDayState = reinterpret_cast<LPNMDAYSTATE>(pNMHDR);
    
    int iMax = pDayState->cDayState;
    
    for (int i = 0; i < iMax; i++)
    {
       pDayState->prgDayState[i] = (MONTHDAYSTATE)0; // init to 0
       pDayState->prgDayState[i] |= 0x01 << 14; // set 15th bit to 1
    }
    

    En el ejemplo se convierte el puntero pNMHDR al tipo adecuado y, a continuación, se determina cuántos meses de información se están solicitando (pDayState->cDayState). Para cada mes, el campo de bits actual (pDayState->prgDayState[i]) se inicializa en cero y, a continuación, se establecen las fechas necesarias (en este caso, el día 15 de cada mes).

Consulte también

Uso de CMonthCalCtrl
Controles