Partilhar via


Configurar o Estado do Dia de um Elemento de Controlo de Calendário Mensal

Um dos atributos de um controle de calendário de mês é a capacidade de armazenar informações, referido como o estado do dia do controle, para cada dia do mês. Essas informações são usadas para enfatizar determinadas datas para o mês exibido no momento.

Observação

O CMonthCalCtrl objeto deve ter o estilo MCS_DAYSTATE para exibir informações de estado do dia.

As informações de estado do dia são expressas como um tipo de dados de 32 bits, MONTHDAYSTATE. Cada bit num campo de bits MONTHDAYSTATE (1 a 31) representa o estado de um dia em um mês. Se um bit estiver ligado, o dia correspondente será exibido em negrito; caso contrário, será exibido sem ênfase.

Há dois métodos para definir o estado do dia do controle de calendário do mês: explicitamente com uma chamada para CMonthCalCtrl::SetDayState ou manipulando a mensagem de notificação MCN_GETDAYSTATE.

Manipulando a mensagem de notificação MCN_GETDAYSTATE

A mensagem MCN_GETDAYSTATE é enviada pelo controle para determinar como os dias dentro dos meses visíveis devem ser exibidos.

Observação

Como o controle armazena em cache os meses anteriores e seguintes, em relação ao mês visível, você receberá essa notificação toda vez que um novo mês for escolhido.

Para lidar corretamente com essa mensagem, você deve determinar para quantos meses as informações de estado do dia estão sendo solicitadas, inicializar uma matriz de estruturas MONTHDAYSTATE com os valores apropriados e inicializar o membro da estrutura relacionada com as novas informações. O procedimento a seguir, detalhando as etapas necessárias, pressupõe que você tenha um CMonthCalCtrl objeto chamado m_monthcal e uma matriz de objetos MONTHDAYSTATE , mdState.

Para manipular a mensagem de notificação MCN_GETDAYSTATE

  1. Usando o Assistente de classe, adicione um manipulador de notificação para a mensagem MCN_GETDAYSTATE ao objeto m_monthcal (consulte Mapeando mensagens para funções).

  2. No corpo do manipulador, adicione o seguinte código:

    LPNMDAYSTATE pDayState = reinterpret_cast<LPNMDAYSTATE>(pNMHDR);
    
    int iMax = pDayState->cDayState;
    
    for (int i = 0; i < iMax; i++)
    {
       pDayState->prgDayState[i] = (MONTHDAYSTATE)0; // init to 0
       pDayState->prgDayState[i] |= 0x01 << 14; // set 15th bit to 1
    }
    

    O exemplo converte o ponteiro pNMHDR para o tipo adequado e, em seguida, determina quantos meses de informações estão sendo solicitadas (pDayState->cDayState). Para cada mês, o campo de bits atual (pDayState->prgDayState[i]) é inicializado para zero e, em seguida, as datas necessárias são definidas (neste caso, o dia 15 de cada mês).

Ver também

Usando CMonthCalCtrl
Controlos