Acessando o controle de calendário mês incorporados
O objeto de controle de calendário do mês incorporado pode ser acessado a partir de CDateTimeCtrl objeto com uma chamada para o GetMonthCalCtrl função de membro.
Observação |
---|
O controle de calendário do mês incorporado é usado somente quando o controle de selecionador de data e hora não tem o DTS_UPDOWN conjunto de estilos. |
Isso é útil se você quiser modificar determinados atributos antes do controle incorporado é exibido.Para fazer isso, manipule o DTN_DROPDOWN notificação, recuperar o controle de calendário mensal (usando CDateTimeCtrl::GetMonthCalCtrl) e fazer as 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 mensal, um controle de calendário mês novo é criado (antes do DTN_DROPDOWN notificação).O controle é destruído (após a DTN_CLOSEUP notificação) quando descartado pelo usuário.Isso significa que quaisquer atributos que modificar, antes do controle incorporado é exibido, são perdidos quando o controle incorporado é descartado.
O exemplo a seguir demonstra esse procedimento, usando um manipulador para o DTN_DROPDOWN notificação.O código altera a cor de plano de fundo do controle de calendário mensal, com uma chamada para SetMonthCalColor, cinza.O código é 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;
}
Como mencionado anteriormente, todas as modificações de propriedades do controle de calendário mês são perdidas, com duas exceções, quando o controle incorporado é descartado.A primeira exceção, as cores do controle de calendário mensal, já foi discutida.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 é 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 foi alterada, com uma chamada para CDateTimeCtrl::SetMonthCalFont, a nova fonte é armazenada e usada na próxima vez que um calendário mensal será exibido.