Partilhar via


Sobre os controles de calendário do mês

Um controle de calendário de mês implementa uma interface de usuário semelhante a um calendário. Isso fornece ao usuário um método muito intuitivo e reconhecível de inserir ou selecionar uma data. O controle também fornece ao aplicativo os meios para obter e definir as informações de data no controle usando tipos de dados existentes.

Recursos de controle de calendário de mês

A captura de tela a seguir mostra um controle de calendário de mês que foi dimensionado para mostrar dois meses.

captura de tela de uma caixa de diálogo com um controle de calendário de mês mostrando dois meses, lado a lado

Observação

A aparência e o comportamento do controlo do calendário mensal diferem ligeiramente em várias versões diferentes da biblioteca de tempo de execução. Este tópico se concentra no controle como ele aparece no Windows Vista com a versão 6 do Comctl32.dll.

 

O controle na ilustração tem os seguintes recursos opcionais.

  • A data atual é mostrada em uma linha separada na parte inferior do controle. Este é o estilo padrão.
  • O "círculo de hoje" (na verdade, um retângulo nesta versão) aparece em torno do dia atual, e ao lado da linha "Hoje" como uma sugestão visual. Este é o estilo padrão.
  • Os números das semanas são mostrados à esquerda de cada linha de dias. Este estilo deve ser especificado.
  • Algumas datas são mostradas em negrito, de acordo com o estado do dia definido pelo aplicativo. Por exemplo, as datas que têm reuniões agendadas podem ser exibidas em negrito. Este estilo deve ser especificado.

Observação

O Windows não suporta datas anteriores a 1601. Consulte FILETIME para obter detalhes.

O controle do calendário mensal é baseado no calendário gregoriano, que foi introduzido em 1753. Ele não calculará datas que sejam consistentes com o calendário juliano que estava em uso antes de 1753.

 

Selecionar um dia

Por padrão, quando um usuário clica nos botões de seta no canto superior esquerdo ou superior direito do controle de calendário do mês, o controle atualiza sua exibição para mostrar o mês anterior ou seguinte. O usuário também pode executar a mesma ação clicando nos meses parciais exibidos antes do primeiro mês e após o último mês.

Os seguintes comandos de teclado também podem ser usados para mover a seleção. O calendário sempre rola conforme necessário para exibir o dia selecionado. (Os códigos de chave virtual são mostrados na tabela.)

Comando Descrição
Seta para a esquerda (VK_LEFT) Selecione o dia anterior.
Seta para a direita (VK_RIGHT) Selecione o dia seguinte.
Seta para cima (VK_UP) Selecione o mesmo dia na semana anterior.
Seta para baixo (VK_DOWN) Selecione o mesmo dia na semana seguinte.
PÁGINA ACIMA (VK_PRIOR) Selecione o mesmo dia no mês anterior. (Se esse mês não tiver o dia, o dia mais próximo é selecionado; por exemplo, a seleção passa de 31 de março para 28 ou 29 de fevereiro.)
PÁGINA ABAIXO (VK_NEXT) Selecione o mesmo dia no mês seguinte.
INÍCIO (VK_HOME) Selecione o primeiro dia do mês atual.
FIM (VK_END) Selecione o último dia do mês atual.
CTRL + INÍCIO Role um mês para trás e selecione um dia na coluna mais à esquerda.
CTRL + FIM Role um mês para frente e selecione um dia na coluna mais à direita.
CTRL + PÁGINA ACIMA Selecione o mesmo dia em um mês anterior. O número de meses pelos quais a seleção se move é o número de meses exibidos no controle. Por exemplo, se dois meses forem exibidos, a seleção passará de 6 de junho para 6 de maio.
CTRL + PÁGINA PARA BAIXO Selecione o mesmo dia em um mês anterior. O número de meses pelos quais a seleção se move é o número de meses exibidos no controle. Por exemplo, se dois meses forem exibidos, a seleção passará de 6 de junho para 6 de agosto.

 

Se um controle de calendário de mês não estiver usando o estilo MCS_NOTODAY, o usuário pode retornar ao dia atual clicando no texto "Hoje" na parte inferior do controle. Se o dia atual não estiver visível, o controle atualiza sua exibição para mostrá-lo.

Um aplicativo pode alterar o número de meses pelos quais o controle atualiza sua exibição usando a mensagem MCM_SETMONTHDELTA ou a macro correspondente, MonthCal_SetMonthDelta. No entanto, as teclas PAGE UP e PAGE DOWN alteram o mês selecionado em um, independentemente do número de meses exibidos ou do valor definido por MCM_SETMONTHDELTA.

Selecionar um mês não adjacente

Quando um usuário clica no nome de um mês exibido, todos os meses do ano são listados (em versões anteriores, este é um menu pop-up). O usuário pode selecionar um mês na lista. Se a seleção do usuário não estiver visível, o controle de calendário de mês rolará sua exibição para mostrar o mês escolhido. Na captura de tela a seguir, um controle de calendário de mês mostra os meses de dois anos adjacentes.

captura de tela de uma caixa de diálogo com um controle de calendário de mês mostrando todos os meses de 2007 e 2008

Selecionar um ano diferente

Se o usuário clicar no ano, um grupo de anos será listado, e o usuário poderá selecionar um diferente, conforme mostrado na captura de tela a seguir.

captura de tela de um controle de calendário mensal mostrando todos os anos de 1999 a 2020

Localização

O controle month-calendar obtém seu formato e todas as cadeias de caracteres de LOCALE_USER_DEFAULT.

Controlo de Horários no Calendário Mensal

O controle de calendário de mês não exibe a hora. No entanto, a estrutura de SYSTEMTIME usada para definir e recuperar a data selecionada ou a data de hoje contém campos de tempo. Quando uma data é definida programaticamente, o controle copia os campos de tempo como eles são ou os valida primeiro e, em seguida, se eles forem inválidos, armazena os horários padrão atuais. A seguir está uma lista das mensagens que definem uma data e uma descrição de como os campos de tempo são tratados.

Mensagem Descrição
MCM_SETCURSEL O controle copia os campos de tempo como eles são, sem validação ou modificação.
MCM_SETRANGE Os campos de tempo das estruturas passadas são validados. Se forem válidos, os campos de tempo são copiados sem modificação. Se eles forem inválidos, o controle copiará os campos de tempo dos dados atuais.
MCM_SETSELRANGE Os campos de tempo das estruturas passadas são validados. Se forem válidos, os campos de tempo são copiados sem modificação. Se eles forem inválidos, o controle reterá os campos de tempo dos intervalos de seleção atuais.
MCM_SETTODAY O controle copia os campos de tempo como eles são, sem validação ou modificação.

 

Quando uma data é recuperada do controle, os campos de tempo serão copiados dos tempos armazenados sem modificação. O manuseio dos campos de tempo pelo controle é fornecido como uma conveniência para o programador. O controle não examina ou modifica os campos de tempo como resultado de qualquer operação diferente das listadas acima.