Compartilhar via


Como definir estados de dia

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.

Controles de calendário de mês que usam o estilo MCS_DAYSTATE suportam estados de dia. As informações de estado do dia são expressas como um tipo de dados de 32 bits, MONTHDAYSTATE. Cada bit em um campo de bits MONTHDAYSTATE (0 a 30) especifica o estado de um dia em um mês. Se um pouco estiver ativado, o dia correspondente será exibido em negrito.

O que você precisa saber

Tecnologias

Pré-requisitos

  • C/C++
  • Programação da interface do usuário do Windows

Instruções

Um aplicativo pode definir explicitamente 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. Ele 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 estrutura NMDAYSTATE especifica o número de valores MONTHDAYSTATE necessários na matriz, que recebe um tamanho máximo arbitrário. Em seguida, o código faz um loop para definir os bits apropriados em cada elemento válido da matriz, usando a macro 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;

Referência de controle de calendário mensal

Sobre controles de calendário de mês

Usando controles de calendário de mês