Cómo establecer estados de día
En este tema se muestra cómo establecer la información de estado del día. El control de calendario del mes usa información de estado de día para determinar cómo dibuja días específicos dentro del control.
Los controles de calendario de mes que usan el estilo MCS_DAYSTATE admiten estados 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 0 a 30) especifica el estado de un día en un mes. Si un bit está activado, el día correspondiente se muestra en negrita.
Lo que necesita saber
Tecnologías
Requisitos previos
- C/C++
- Programación de la interfaz de usuario de Windows
Instrucciones
Una aplicación puede establecer explícitamente información de estado de día enviando el mensaje de MCM_SETDAYSTATE o mediante la macro correspondiente, MonthCal_SetDayState. Sin embargo, la información de estado del día normalmente se establece en respuesta al código de notificación de MCN_GETDAYSTATE , que se envía cada vez que se debe actualizar el control porque, por ejemplo, un mes diferente se ha desplazado hacia la vista.
En el código de ejemplo siguiente se muestra cómo procesar el código de notificación MCN_GETDAYSTATE en un controlador de mensajes WM_NOTIFY . Procesa MCN_GETDAYSTATE especificando que se debe resaltar el primer y el decimoquinto día de cada mes visible. El miembro cDayState de la estructura NMDAYSTATE especifica el número de valores MONTHDAYSTATE necesarios en la matriz, que se asigna un tamaño máximo arbitrario. A continuación, el código realiza un bucle para establecer los bits adecuados en cada elemento válido de la matriz, mediante la macro BOLDDAY definida por la aplicación.
#define BOLDDAY(ds, iDay) \
if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))
case WM_NOTIFY:
if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE)
{
MONTHDAYSTATE rgMonths[12] = { 0 };
int cMonths = ((NMDAYSTATE*)lParam)->cDayState;
for (int i = 0; i < cMonths; i++)
{
BOLDDAY(rgMonths[i], 1);
BOLDDAY(rgMonths[i], 15);
}
((NMDAYSTATE*)lParam)->prgDayState = rgMonths;
return TRUE;
}
break;
Temas relacionados