Impostare lo stato del giorno di un controllo calendario mensile

Uno degli attributi di un controllo calendario mensile è la possibilità 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 necessario 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 visualizzati senza lo schermo.

Esistono due metodi per impostare lo stato del giorno del controllo calendario mensile: in modo esplicito con una chiamata a CMonthCalCtrl::SetDayState o del 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 quali i giorni dai 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 nuovo 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 di MONTHDAYSTATE con i valori corretti e inizializzare il membro della struttura correlato con nuove informazioni.La procedura riportata di seguito, fornendo in dettaglio i passaggi necessari, si presuppone che l'utente abbia un oggetto di CMonthCalCtrl chiamato m_monthcal e una matrice di oggetti di MONTHDAYSTATE , mdState.

Per gestire il messaggio di notifica di MCN_GETDAYSTATE

  1. Utilizzando la Finestra Proprietà, aggiungere un gestore di notifica per il messaggio di MCN_GETDAYSTATE all'oggetto di m_monthcal (vedere Messaggi del mapping delle funzioni).

  2. Nel corpo del gestore eventi, 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 al tipo corretto, 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 richieste è impostato su (in questo caso, il quindicesimo di ogni mese.

Vedere anche

Riferimenti

Utilizzando CMonthCalCtrl

Concetti

Controlli (MFC)