Accesso al controllo calendario mensile incorporato
L'oggetto incorporato di controllo del calendario mensile è accessibile dall'oggetto CDateTimeCtrl con una chiamata alla funzione membro GetMonthCalCtrl.
Nota
Il controllo del calendario mensile incorporato viene utilizzato solo quando il controllo della selezione data e ora non ha impostato il set di stili DTS_UPDOWN .
Ciò è utile se si desidera modificare determinati attributi prima che venga visualizzato il controllo incorporato. A tale scopo, gestire la notifica di DTN_DROPDOWN, recuperare il controllo del calendario mensile (utilizzando CDateTimeCtrl::GetMonthCalCtrl) e apportare le modifiche. Sfortunatamente, il controllo del calendario mensile non è persistente.
In altre parole, quando l'utente richiede la visualizzazione del controllo del calendario mensile, viene creato un nuovo controllo del calendario mensile (prima della notifica di DTN_DROPDOWN). Il controllo viene distrutto (dopo la notifica di DTN_CLOSEUP) una volta chiuso dall'utente. Ciò significa che qualsiasi attributo che si va a modificare, prima che venga visualizzato il controllo incorporato, viene perso quando il controllo incorporato viene chiuso.
Nell'esempio seguente viene illustrata questa procedura, utilizzando un gestore per la notifica di DTN_DROPDOWN. Il codice modifica il colore di sfondo del controllo del calendario mensile in grigio con una chiamata a SetMonthCalColor. Il codice è indicato di seguito:
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;
}
Come indicato in precedenza, tutte le modifiche alle proprietà del controllo del calendario mensile vengono perse, con due eccezioni, quando il controllo incorporato viene chiuso. La prima eccezione, i colori del controllo del calendario mensile, è già stata discussa. La seconda eccezione è il carattere utilizzato dal controllo del calendario mensile. È possibile modificare il tipo di carattere predefinito eseguendo una chiamata a CDateTimeCtrl::SetMonthCalFont, passando l'handle di un tipo di carattere esistente. Nell'esempio seguente (dove m_dtPicker è l'oggetto di controllo di data e ora) viene illustrato un possibile metodo:
//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);
Una volta che il tipo di carattere è stata modificato, con una chiamata a CDateTimeCtrl::SetMonthCalFont, viene memorizzato il nuovo tipo di carattere ed esso viene utilizzato la volta successiva in cui deve essere visualizzato un calendario mensile.