Accès du contrôle month calendar incorporé
L'objet incorporé de contrôle month calendar est accessible à partir de l'objet d' CDateTimeCtrl avec un appel à la fonction membre de GetMonthCalCtrl .
[!REMARQUE]
Le contrôle month calendar incorporé est utilisé uniquement lorsque le contrôle Date Time Picker n'a pas le style de DTS_UPDOWN défini.
Cela est utile si vous souhaitez modifier certains attributs avant que le contrôle imbriqué soit affiché.Pour ce faire, gérez la notification de DTN_DROPDOWN , de récupérer le contrôle month calendar (à l'aide de CDateTimeCtrl::GetMonthCalCtrl), et apportez vos modifications.Malheureusement, le contrôle month calendar n'est pas persistant.
En d'autres termes, lorsque l'utilisateur demande l'affichage du contrôle month calendar, un nouveau contrôle month calendar est créé (avant la notification de DTN_DROPDOWN ).Le contrôle est détruit (après la notification de DTN_CLOSEUP ) lorsqu'il fait disparaître par l'utilisateur.Cela signifie que tous attributs que vous modifiez, avant que le contrôle imbriqué affiché, est perdu lorsque le contrôle incorporé est fermé.
L'exemple suivant illustre cette procédure, à l'aide d'un gestionnaire pour la notification de DTN_DROPDOWN .Les modifications du code la couleur d'arrière-plan du contrôle month calendar, avec un appel à SetMonthCalColor, le gris.Code est la suivante :
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 mentionné précédemment, toutes les modifications apportées aux propriétés du contrôle month calendar sont perdues, avec deux exceptions, lorsque le contrôle incorporé est fermé.La première exception, les couleurs du contrôle month calendar, a déjà été traité.La deuxième exception est la police utilisée par le contrôle month calendar.Vous pouvez modifier la police par défaut en appelant à CDateTimeCtrl::SetMonthCalFont, en passant le handle d'une police existante.L'exemple suivant (où m_dtPicker est l'objet contrôle de date et d'heure) présente 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 a été modifiée, avec un appel à CDateTimeCtrl::SetMonthCalFont, la nouvelle police est enregistrée et utilisée lors de la prochaine un calendrier mensuel doit être restitué.