Comment définir les États des jours

Cette rubrique montre comment définir les informations d’État du jour. Le contrôle Month Calendar 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 mensuel qui utilisent les États du jour du support de style MCS _ DAYSTATE . Les informations d’État du jour sont exprimées sous la forme d’un type de données 32 bits, MONTHDAYSTATE. Chaque bit dans 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++
  • Windows Programmation de l’interface utilisateur

Instructions

Une application peut définir explicitement des informations d’état de jour en envoyant le message MCM _ SETDAYSTATE ou en utilisant la macro correspondante, calendrier monthcal _ SETDAYSTATE. Toutefois, les informations d’État du 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 autre mois a fait défiler la vue.

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, qui reçoit 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;

Référence du contrôle Month Calendar

À propos des contrôles Month Calendar

Utilisation des contrôles Month Calendar