Accès au contrôle Month Calendar Control incorporé
L’objet de contrôle calendrier mois incorporé est accessible à partir de l’objet CDateTimeCtrl
avec un appel à la fonction membre GetMonthCalCtrl .
Remarque
Le contrôle calendrier du mois incorporé est utilisé uniquement lorsque le contrôle du sélecteur de date et d’heure n’a pas le style DTS_UPDOWN défini.
Cela est utile si vous souhaitez modifier certains attributs avant l’affichage du contrôle incorporé. Pour ce faire, gérez la notification DTN_DROPDOWN , récupérez le contrôle de calendrier mensuel (à l’aide de CDateTimeCtrl ::GetMonthCalCtrl) et apportez vos modifications. Malheureusement, le contrôle de calendrier mensuel n’est pas persistant.
En d’autres termes, lorsque l’utilisateur demande l’affichage du contrôle calendrier mois, un nouveau contrôle calendrier mois est créé (avant la notification DTN_DROPDOWN ). Le contrôle est détruit (après la notification DTN_CLOSEUP ) lorsqu’il est ignoré par l’utilisateur. Cela signifie que tous les attributs que vous modifiez, avant l’affichage du contrôle incorporé, sont perdus lorsque le contrôle incorporé est ignoré.
L’exemple suivant illustre cette procédure, à l’aide d’un gestionnaire pour la notification DTN_DROPDOWN . Le code modifie la couleur d’arrière-plan du contrôle calendrier mois, avec un appel à SetMonthCalColor, en gris. Le code se présente comme suit :
void CMyDialog::OnDtnDropdownDatetimepicker1(NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(pNMHDR);
//set the background color of the month to gray
COLORREF clr = RGB(100, 100, 100);
m_DateTimeCtrl.SetMonthCalColor(MCSC_MONTHBK, clr);
*pResult = 0;
}
Comme indiqué précédemment, toutes les modifications apportées aux propriétés du contrôle calendrier mensuel sont perdues, à deux exceptions près, lorsque le contrôle incorporé est ignoré. La première exception, les couleurs du contrôle calendrier mensuel, ont déjà été abordées. La deuxième exception est la police utilisée par le contrôle calendrier mensuel. Vous pouvez modifier la police par défaut en effectuant un appel à CDateTimeCtrl ::SetMonthCalFont, en passant le handle d’une police existante. L’exemple suivant (où m_dtPicker
se trouve l’objet de contrôle de date et d’heure) illustre une méthode possible :
//create and initialize the font to be used
LOGFONT logFont = {0};
logFont.lfHeight = -12;
logFont.lfWeight = FW_NORMAL;
logFont.lfCharSet = DEFAULT_CHARSET;
_tcscpy_s(logFont.lfFaceName, _countof(logFont.lfFaceName),
_T("Verdana"));
m_MonthCalFont.CreateFontIndirect(&logFont);
m_DateTimeCtrl.SetMonthCalFont(m_MonthCalFont);
Une fois la police modifiée, avec un appel à CDateTimeCtrl::SetMonthCalFont
, la nouvelle police est stockée et utilisée la prochaine fois qu’un calendrier mensuel doit être affiché.