Definindo o estado do dia de um controle de calendário mensal
Um dos atributos de um controle de calendário do mês é a capacidade de armazenar informações, referenciada como o estado de um dia de controle, para cada dia do mês. Estas informações são usadas para enfatizar determinadas datas do mês exibida atualmente.
Dica
O objeto de CMonthCalCtrl deve ter o estilo de MCS_DAYSTATE para exibir informações de estado do dia.
Informações de estado do dia é expressa como um tipo de dados de 32 bits, MONTHDAYSTATE. Cada bit em um campo de bit de MONTHDAYSTATE (1 a 31) representa o estado de um dia do mês. Se um bit estiver ativada, o dia correspondente será exibido em negrito; se não será exibida sem dar ênfase.
Há dois métodos para definir o estado de um dia de controle de calendário do mês: explicitamente por uma chamada a CMonthCalCtrl::SetDayState ou executando a notificação de MCN_GETDAYSTATE .
Tratando a notificação de MCN_GETDAYSTATE
A mensagem de MCN_GETDAYSTATE é enviada pelo controle para determinar como os dias dentro dos meses visíveis devem ser exibidos.
Dica
Como o controle armazena em cachê o anterior e meses a seguir, com relação ao mês visível, você receberá essa notificação sempre que um novo mês será escolhido.
Para tratar corretamente essa mensagem, você deve determinar as informações de estado do dia de número de meses estão sendo solicitadas por, inicializa uma matriz de estruturas de MONTHDAYSTATE com os valores apropriados, e inicializa o membro da estrutura relacionada com as novas informações. O procedimento a seguir, o detalhamento as etapas necessárias, suponha que você tenha um objeto de CMonthCalCtrl chamado m_monthcal e uma matriz de objetos de MONTHDAYSTATE , mdState.
Para tratar a notificação de MCN_GETDAYSTATE
Usando a janela Propriedades, adicionar um manipulador de notificação para a mensagem de MCN_GETDAYSTATE ao objeto de m_monthcal (consulte Mensagens de mapeamento a funções).
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 de pNMHDR no tipo apropriado, então determina quantos meses de informações estão sendo solicitado (pDayState->cDayState). Para cada mês, o bitfield atual (pDayState->prgDayState[i]) é inicializado como zero e então as datas necessários definido como (nesse caso, o 15º de cada mês).