Compartilhar via


Acessando o controle de calendário mensal incorporado

O objeto de controle de calendário de mês embutido pode ser acessado do objeto CDateTimeCtrl por meio de uma chamada para a função membro GetMonthCalCtrl.

Observação

O controle de calendário de mês inserido é usado somente quando o controle do seletor de data e hora não tem o DTS_UPDOWN conjunto de estilos.

Isso é útil se você quiser modificar determinados atributos antes que o controle inserido seja exibido. Para fazer isso, manipule a notificação DTN_DROPDOWN , recupere o controle de calendário do mês (usando CDateTimeCtrl::GetMonthCalCtrl) e faça suas modificações. Infelizmente, o controle de calendário mensal não é persistente.

Em outras palavras, quando o usuário solicita a exibição do controle de calendário do mês, um novo controle de calendário de mês é criado (antes da notificação DTN_DROPDOWN ). O controle é destruído (após a notificação de DTN_CLOSEUP ) quando ignorado pelo usuário. Isso significa que todos os atributos que você modificar, antes que o controle inserido seja exibido, serão perdidos quando o controle inserido for ignorado.

O exemplo a seguir demonstra esse procedimento, usando um tratador para a notificação DTN_DROPDOWN. O código altera a cor de fundo do controle de calendário do mês para cinza, com uma chamada para SetMonthCalColor. O código será o seguinte:

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;
}

Conforme indicado anteriormente, todas as modificações nas propriedades do controle de calendário do mês são perdidas, com duas exceções, quando o controle inserido é descartado. A primeira exceção, as cores do controle de calendário mensal, já foi abordada. A segunda exceção é a fonte usada pelo controle de calendário mensal. Você pode modificar a fonte padrão fazendo uma chamada para CDateTimeCtrl::SetMonthCalFont, passando o identificador de uma fonte existente. O exemplo a seguir (onde m_dtPicker está 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);

Depois que a fonte for alterada, com uma chamada para CDateTimeCtrl::SetMonthCalFont, a nova fonte será armazenada e usada na próxima vez que um calendário de mês for exibido.

Consulte também

Usar CDateTimeCtrl
Controles