Sobre controles de calendário mensal

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 do mês

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

screen shot of a dialog box with a month calendar control showing two months, side by side

Observação

A aparência e o comportamento do controle de calendário do mês diferem ligeiramente em diferentes versões 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 pista visual. Este é o estilo padrão.
  • Os números da semana são mostrados à esquerda de cada linha de dias. Esse 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 mostradas em negrito. Esse estilo deve ser especificado.

Observação

O Windows não oferece suporte a 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.

 

Selecionando 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 o próximo. 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 comandos de teclado a seguir também podem ser usados para mover a seleção. O calendário sempre rola conforme necessário para exibir o dia selecionado. (O 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 próxima semana.
PAGE UP (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 será movida 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 será movida 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 poderá retornar ao dia atual clicando no texto "Hoje" na parte inferior do controle. Se o dia atual não estiver visível, o controle atualizará 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 por um, independentemente do número de meses exibidos ou do valor definido por MCM_SETMONTHDELTA.

Selecionando 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, esse é 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 do 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.

screen shot of a dialog box with a month calendar control showing all the months of 2007 and 2008

Selecionando 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.

screen shot of a month calendar control showing all years from 1999 to 2020

Localização

O controle de calendário de mês obtém seu formato e todas as cadeias de caracteres de LOCALE_USER_DEFAULT.

Horários no controle de calendário do mês

O controle de calendário de mês não exibe a hora. No entanto, a estrutura SYSTEMTIME usada para definir e recuperar a data selecionada ou a data de hoje contém campos de hora. Quando uma data é definida programaticamente, o controle copia os campos de hora como eles são ou os valida primeiro e, em seguida, se forem inválidos, armazena as horas padrão atuais. A seguir está uma lista das mensagens que definem uma data e uma descrição de como os campos de hora 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 hora serão copiados sem modificação. Se eles forem inválidos, o controle copiará os campos de hora dos dados de hoje.
MCM_SETSELRANGE Os campos de tempo das estruturas passadas são validados. Se forem válidos, os campos de hora serã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 hora 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.