Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico demonstra como definir informações de estado do dia. O controle de calendário de mês usa informações de estado de dia para determinar como ele desenha dias específicos dentro do controle.
Controlo de calendário mensal que utiliza o estilo MCS_DAYSTATE suporta estados do dia. As informações de estado do dia são expressas como um tipo de dados de 32 bits, MONTHDAYSTATE. Cada bit em um MONTHDAYSTATE bitfield (0 a 30) especifica o estado de um dia em um mês. Se um bit estiver ligado, o dia correspondente será exibido em negrito.
O que precisa de saber
Tecnologias
Pré-requisitos
- C/C++
- Programação da interface do usuário do Windows
Instruções
Um aplicativo pode definir explicitamente as informações de estado do dia enviando a mensagem MCM_SETDAYSTATE ou usando a macro correspondente, MonthCal_SetDayState. No entanto, as informações de estado do dia geralmente são definidas em resposta ao código de notificação MCN_GETDAYSTATE, que é enviado sempre que o controle precisa ser atualizado porque, por exemplo, um mês diferente rolou para a exibição.
O código de exemplo a seguir mostra como processar o código de notificação MCN_GETDAYSTATE em um manipulador de mensagens WM_NOTIFY. Processa MCN_GETDAYSTATE especificando que o primeiro e o décimo quinto dia de cada mês visível devem ser destacados. O membro cDayState da estruturaNMDAYSTATEespecifica o número de valores de MONTHDAYSTATE necessários na matriz, que recebe um tamanho máximo arbitrário. Em seguida, o código é executado em loop para definir os bits apropriados em cada elemento válido da matriz, usando a macro de BOLDDAY definida pelo aplicativo.
#define BOLDDAY(ds, iDay) \
if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))
case WM_NOTIFY:
if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE)
{
MONTHDAYSTATE rgMonths[12] = { 0 };
int cMonths = ((NMDAYSTATE*)lParam)->cDayState;
for (int i = 0; i < cMonths; i++)
{
BOLDDAY(rgMonths[i], 1);
BOLDDAY(rgMonths[i], 15);
}
((NMDAYSTATE*)lParam)->prgDayState = rgMonths;
return TRUE;
}
break;
Tópicos relacionados