Partager via


Définition de l'état du jour d'un contrôle month calendar

L'un des attributs d'un contrôle month calendar est la capacité à stocker des informations, connues sous le nom de l'état du jour du contrôle, pour chaque jour du mois.Ces informations sont utilisées pour accentuer certaines dates du mois actuellement affiché.

[!REMARQUE]

L'objet d' CMonthCalCtrl doit avoir le style de MCS_DAYSTATE pour afficher les informations d'état du jour.

Les informations d'état du jour sont exprimées comme type de données 32 bits, MONTHDAYSTATE.Chaque bit dans un champ de bits de MONTHDAYSTATE (de 1 à 31) représente l'état d'un jour dans un mois.Si un bit est activé, le jour correspondant sera affiché en gras ; sinon il sera affiché sans l'importance.

Il existe deux méthodes pour définir l'état du jour du contrôle month calendar : explicitement avec un appel à CMonthCalCtrl::SetDayState ou en gérant le message de notification de MCN_GETDAYSTATE .

Gérer le message de notification de MCN_GETDAYSTATE

Le message de MCN_GETDAYSTATE est envoyé par le contrôle pour déterminer comment les jours dans les mois visibles à afficher.

[!REMARQUE]

Étant donné que le contrôle met en cache le précédent et des mois suivant, relatifs aux qui concerne le mois visible, vous recevez cette notification chaque fois qu'un nouveau mois est choisi.

Pour gérer correctement ce message, vous devez déterminer les informations d'état du jour pendant le nombre de mois sont demandées, initialisez un tableau de structures de MONTHDAYSTATE avec les valeurs correctes, et initialisez le membre de structure connexe avec les nouvelles informations.La procédure suivante, qui décrit les étapes nécessaires, suppose que vous avez un objet d' CMonthCalCtrl appelé m_monthcal et un tableau d'objets de MONTHDAYSTATE , mdState.

Pour traiter le message de notification de MCN_GETDAYSTATE

  1. Dans la fenêtre Propriétés, ajoutez un gestionnaire de notification pour le message de MCN_GETDAYSTATE à l'objet d' m_monthcal (consultez Mapper les messages aux fonctions).

  2. Dans le corps du gestionnaire, ajoutez le code suivant :

    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
    }
    

    L'exemple convertit le pointeur d' pNMHDR en type approprié, puis détermine le nombre de mois les informations sont demandés (pDayState->cDayState).Pour chaque mois, le champ de bits actuel (pDayState->prgDayState[i]) est initialisé à zéro et les dates nécessaires puis est défini (dans ce cas, 15 de chaque mois).

Voir aussi

Référence

Utilisation CMonthCalCtrl

Concepts

Contrôles (MFC)