Acceso al control de calendario mensual incrustado
Se puede acceder al objeto de control de calendario mensual insertado desde el objeto CDateTimeCtrl
con una llamada a la función miembro GetMonthCalCtrl.
Nota:
El control de calendario mensual insertado solo se usa cuando el control selector de fecha y hora no tiene establecido el estilo DTS_UPDOWN.
Esto es útil si se quieren modificar determinados atributos antes de que se muestre el control insertado. Para ello, controle la notificación DTN_DROPDOWN, recupere el control de calendario mensual (mediante CDateTimeCtrl::GetMonthCalCtrl) y realice las modificaciones. Desafortunadamente, el control de calendario mensual no es persistente.
Es decir, cuando el usuario solicita la visualización del control de calendario mensual, se crea un nuevo control de calendario mensual (antes de la notificación DTN_DROPDOWN). El control se destruye (después de la notificación DTN_CLOSEUP) cuando el usuario lo descarta. Esto significa que los atributos que se modifican antes de que se muestre el control insertado se pierden cuando se descarta este.
En el ejemplo siguiente se muestra este procedimiento mediante un controlador para la notificación DTN_DROPDOWN. El código cambia el color de fondo del control de calendario mensual a gris con una llamada a SetMonthCalColor. El código es el siguiente:
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;
}
Como se ha indicado anteriormente, todas las modificaciones de las propiedades del control de calendario mensual se pierden, con dos excepciones cuando se descarta el control insertado. La primera excepción, los colores del control de calendario mensual, ya se ha tratado. La segunda excepción es la fuente usada por el control de calendario mensual. Para modificar la fuente predeterminada, realice una llamada a CDateTimeCtrl::SetMonthCalFont y pase el identificador de una fuente existente. En el ejemplo siguiente (donde m_dtPicker
es el objeto de control de fecha y hora) se muestra un posible método:
//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 vez que se ha cambiado la fuente, con una llamada a CDateTimeCtrl::SetMonthCalFont
, la nueva fuente se almacena y se usa la siguiente vez que se va a mostrar un calendario mensual.