Impostazione dello stato giorno di un controllo calendario mensile
Uno degli attributi di un controllo calendario mensile consente di archiviare le informazioni, definite lo stato del giorno del controllo, per ciascun giorno del mese. Queste informazioni sono utilizzate per evidenziare determinate date per il mese correntemente visualizzato.
Nota
L'oggetto di CMonthCalCtrl deve disporre dello stile di MCS_DAYSTATE per visualizzare le informazioni sullo stato del giorno.
Le informazioni sullo stato del giorno sono espresse come tipo di dati a 32 bit, MONTHDAYSTATE. Ogni frammento in un campo di bit di MONTHDAYSTATE (da 1 a 31) rappresenta lo stato di un giorno in un mese. Se un bit è attivata, il giorno corrispondente viene visualizzato in grassetto; in caso contrario viene visualizzato senza enfasi.
Esistono due metodi per impostare lo stato del giorno del controllo calendario mensile: in modo esplicito con una chiamata a CMonthCalCtrl::SetDayState o gestendo il messaggio di notifica di MCN_GETDAYSTATE.
Gestire il messaggio di notifica di MCN_GETDAYSTATE
Il messaggio di MCN_GETDAYSTATE viene inviato dal controllo per determinare come i giorni i mesi visibili da visualizzare.
Nota
Poiché il controllo memorizza nella cache il precedente e mesi seguenti, per quanto riguarda il mese visibile, verrà generata questa notifica ogni volta che un altro mese viene scelto.
Per gestire correttamente questo messaggio, è necessario determinare le informazioni sullo stato del giorno del mese vengono richiedende, per inizializzare una matrice di strutture MONTHDAYSTATE con i valori appropriati e inizializzare il membro della struttura correlato con nuove informazioni. La procedura riportata di seguito, fornendo in dettaglio i passaggi necessari, si presuppone che esista un oggetto di CMonthCalCtrl chiamato m_monthcal e una matrice di oggetti di MONTHDAYSTATE, mdState.
Per gestire il messaggio di notifica di MCN_GETDAYSTATE
Utilizzando la Finestra Proprietà, aggiungere un gestore di notifica del messaggio di MCN_GETDAYSTATE all'oggetto di m_monthcal (vedere Vedere mapping di messaggi).
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 }
L'esempio converte il puntatore di pNMHDR nel tipo appropriato, quindi determina il numero di mesi di informazioni vengono richiedendi (pDayState->cDayState). Per ogni mese, il campo di bit corrente (pDayState->prgDayState[i]) viene inizializzata su zero e quindi le date necessarie sono impostate in questo caso, il quindicesimo di ogni mese).