Acceso de Control incrustada de calendario mensual
El objeto incrustado de control de calendario mensual se puede tener acceso desde el objeto de CDateTimeCtrl con una llamada a la función miembro de GetMonthCalCtrl .
[!NOTA]
Se utiliza el control incrustado de calendario mensual sólo cuando el control selector de fecha y hora no tiene el estilo de DTS_UPDOWN establecido.
Esto es útil si desea modificar ciertos atributos antes de que se muestre el control incrustado.Para ello, controle la notificación de DTN_DROPDOWN , recupera el control de calendario mensual (mediante CDateTimeCtrl::GetMonthCalCtrl), y se crean las modificaciones.Desgraciadamente, el control de calendario mensual no es persistente.
Es decir cuando se crean las solicitudes de usuario la presentación del control de calendario mensual, un nuevo control de calendario mensual (antes de la notificación de DTN_DROPDOWN ).Se destruye el control (después de la notificación de DTN_CLOSEUP ) cuando lo despedido por el usuario.Esto significa que los atributos que se modifique, antes de que se muestre el control incrustado, se pierde cuando se descarta el control incrustado.
El ejemplo siguiente se muestra este procedimiento, mediante un controlador para la notificación de DTN_DROPDOWN .El código cambia el color de fondo del control de calendario mensual, con una llamada a SetMonthCalColor, para gris.El código es la 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 indicó anteriormente, todas las modificaciones a las propiedades del control de calendario mensual se pierden, con dos excepciones, cuando se descarta el control incrustado.La primera excepción, los colores del control de calendario mensual, se ha explicado ya.La segunda excepción es la fuente utilizada por el control de calendario mensual.Puede modificar la fuente predeterminada mediante una llamada a CDateTimeCtrl::SetMonthCalFont, pasando el identificador de una fuente existente.El ejemplo siguiente (donde es el objeto m_dtPicker de control de fecha y hora) muestra un método posible:
//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 han cambiado se almacena y se utiliza la fuente, con una llamada a CDateTimeCtrl::SetMonthCalFont, la nueva fuente la próxima vez que un calendario mensual debe mostrarse.