Guide pratique pour définir les états jour
Cette rubrique montre comment définir les informations d’état du jour. Le contrôle de calendrier du mois utilise les informations d’état du jour pour déterminer comment il dessine des jours spécifiques dans le contrôle.
Les contrôles de calendrier du mois qui utilisent le style MCS_DAYSTATE prennent en charge les états jour. Les informations d’état jour sont exprimées sous la forme d’un type de données 32 bits, MONTHDAYSTATE. Chaque bit d’un champ de bits MONTHDAYSTATE (0 à 30) spécifie l’état d’un jour dans un mois. Si un bit est activé, le jour correspondant est affiché en gras.
Bon à savoir
Technologies
Prérequis
- C/C++
- Programmation de l’interface utilisateur Windows
Instructions
Une application peut définir explicitement les informations d’état du jour en envoyant le message MCM_SETDAYSTATE ou en utilisant la macro correspondante, MonthCal_SetDayState. Toutefois, les informations d’état de jour sont généralement définies en réponse au code de notification MCN_GETDAYSTATE , qui est envoyé chaque fois que le contrôle doit être actualisé, car, par exemple, un mois différent a fait défiler dans l’affichage.
L’exemple de code suivant montre comment traiter le code de notification MCN_GETDAYSTATE dans un gestionnaire de messages WM_NOTIFY . Il traite MCN_GETDAYSTATE en spécifiant que le premier et le quinzième jour de chaque mois visible doivent être mis en surbrillance. Le membre cDayState de la structure NMDAYSTATE spécifie le nombre de valeurs MONTHDAYSTATE nécessaires dans le tableau, ce qui correspond à une taille maximale arbitraire. Le code effectue ensuite une boucle pour définir les bits appropriés dans chaque élément valide du tableau, à l’aide de la macro BOLDDAY définie par l’application .
#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;
Rubriques connexes