Acessando o controle de calendário mensal inserido
O objeto inserido de controle de calendário do mês pode ser acessado do objeto de CDateTimeCtrl com uma chamada à função de membro de GetMonthCalCtrl .
Dica
O controle inserido month calendar é usado somente quando o controle de seletor de data e hora não tiver o estilo de DTS_UPDOWN definido.
Isso será útil se você quiser alterar alguns atributos antes que o controle inserido ser exibido. Para fazer isso, tratar a notificação de DTN_DROPDOWN , recupere o controle de calendário do mês (usando CDateTimeCtrl::GetMonthCalCtrl), e disponibilizará suas alterações. Infelizmente, o controle de calendário do mês não é persistente.
Ou seja quando um usuário solicita a exibição do controle de calendário do mês, um novo controle de calendário do mês são criadas (a notificação de DTN_DROPDOWN ). O controle é destruído (depois da notificação de DTN_CLOSEUP ) quando ignorado pelo usuário. Isso significa que alguns atributos que você alterar, antes que o controle inserido é exibido, é perdido quando o controle inserido é ignorado.
O exemplo a seguir demonstra esse procedimento, usando um manipulador para a notificação de DTN_DROPDOWN . As alterações de código a cor do plano de fundo do controle de calendário do mês, com uma chamada a SetMonthCalColor, em cinza. O código é como segue:
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 mencionado anteriormente, todas as alterações às propriedades de controle de calendário do mês são perdidas, com duas exceções, quando o controle inserido é ignorado. A primeira exceção, as cores de controle de calendário do mês, discutida já tiver sido. A segunda exceção é a fonte usada pelo controle de calendário do mês. Você pode alterar a fonte padrão para fazer uma chamada a CDateTimeCtrl::SetMonthCalFont, passando o identificador de uma fonte existente. O exemplo a seguir (onde m_dtPicker é o objeto de controle de data e hora) demonstra um método possível:
//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);
Uma vez que a fonte esteve alterada, com uma chamada a CDateTimeCtrl::SetMonthCalFont, a nova fonte seja armazenada e usada na próxima vez que um calendário do mês deve ser exibido.