Partilhar via


Como definir estados do 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.

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;

Controle de Calendário de Mês de Referência

Sobre os controles de calendário do mês

Usando controles de calendário mensal