Impostazione dello stato giorno di un controllo calendario mensile
Uno degli attributi di un controllo del calendario mensile è la possibilità di archiviare le informazioni, detto stato del giorno del controllo, per ogni giorno del mese. Queste informazioni vengono utilizzate per evidenziare determinate date per il mese attualmente visualizzato.
Nota
Per visualizzare le informazioni sullo stato del giorno, l'oggetto CMonthCalCtrl
deve avere lo stile MCS_DAYSTATE.
Le informazioni sullo stato del giorno sono espresse come tipo di dati a 32 bit, MONTHDAYSTATE. Ogni bit in un campo di bit MONTHDAYSTATE (da 1 a 31) rappresenta lo stato di un giorno in un mese. Se un po' è attivo, il giorno corrispondente verrà visualizzato in grassetto; in caso contrario, verrà visualizzato senza enfasi.
Esistono due metodi per impostare lo stato del giorno del controllo calendario del mese: in modo esplicito con una chiamata a CMonthCalCtrl::SetDayState o gestendo il messaggio di notifica MCN_GETDAYSTATE.
Gestione del messaggio di notifica MCN_GETDAYSTATE
Il messaggio MCN_GETDAYSTATE viene inviato dal controllo per determinare la modalità di visualizzazione dei giorni entro i mesi visibili.
Nota
Poiché il controllo memorizza nella cache i mesi precedenti e successivi, rispetto al mese visibile, si riceverà questa notifica ogni volta che viene scelto un nuovo mese.
Per gestire correttamente questo messaggio, è necessario determinare il numero di informazioni sullo stato dei mesi per cui vengono richieste, inizializzare una matrice di strutture MONTHDAYSTATE con i valori appropriati e inizializzare il membro della struttura correlata con le nuove informazioni. Nella procedura seguente, che descrive in dettaglio i passaggi necessari, si presuppone che sia presente un CMonthCalCtrl
oggetto denominato m_monthcal e una matrice di oggetti MONTHDAYSTATE , mdState.
Per gestire il messaggio di notifica MCN_GETDAYSTATE
Usando la Creazione guidata classe, aggiungere un gestore di notifica per il messaggio di MCN_GETDAYSTATE all'oggetto m_monthcal (vedere Mapping di messaggi a funzioni).
Nel corpo del gestore aggiungere il codice seguente:
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 }
Nell'esempio il puntatore pNMHDR viene convertito nel tipo appropriato, quindi determina il numero di mesi di richiesta di informazioni (
pDayState->cDayState
). Per ogni mese, il campo di bit corrente (pDayState->prgDayState[i]
) viene inizializzato su zero e quindi vengono impostate le date necessarie (in questo caso, il 15 di ogni mese).