Partager via


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

Un des attributs d'un contrôle calendrier mensuel est la possibilité de stocker des informations, connues sous le nom d'état du jour du contrôle, pour chaque jour du mois. Ces informations sont utilisées pour mettre en évidence des dates du mois actuellement affiché.

Remarque

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

Les informations d’état de jour sont exprimées sous la forme d’un type de données 32 bits, MONTHDAYSTATE. Chaque bit dans un champ bit MONTHDAYSTATE (1 à 31) représente l’état d’un jour dans un mois. Si un bit est activé, le jour correspondant s'affiche en gras ; sinon il s'affiche sans l'accentuation.

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

Gestion du message de notification MCN_GETDAYSTATE

Le message MCN_GETDAYSTATE est envoyé par le contrôle pour déterminer la façon dont les jours dans les mois visibles doivent être affichés.

Remarque

Parce que le contrôle met en cache les mois précédents et suivants, en fonction du mois visible, vous recevez cette notification chaque fois qu'un nouveau mois est choisi.

Pour gérer correctement ce message, vous devez déterminer le nombre d’informations d’état de jour qui sont demandées, initialiser un tableau de structures MONTHDAYSTATE avec les valeurs appropriées et initialiser le membre de structure associé avec les nouvelles informations. La procédure suivante, détaillant les étapes nécessaires, suppose que vous avez un CMonthCalCtrl objet appelé m_monthcal et un tableau d’objets MONTHDAYSTATE, mdState.

Pour gérer le message de notification MCN_GETDAYSTATE

  1. À l’aide de l’Assistant Classe, ajoutez un gestionnaire de notification pour le message MCN_GETDAYSTATE à l’objet m_monthcal (voir Mappage des 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 pNMHDR en type approprié, puis détermine le nombre d’informations demandées (pDayState->cDayState). Pour chaque mois, le champ de bits actuel (pDayState->prgDayState[i]) est initialisé à zéro et les dates nécessaires sont assignées (dans ce cas, le 15 de chaque mois).

Voir aussi

Utilisation de CMonthCalCtrl
Contrôles