Partilhar via


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.

Consulte também

Referência

Usando CDateTimeCtrl

Conceitos

Controles (MFC)