Udostępnij za pośrednictwem


Ustawianie stanu dnia formantu kalendarza miesięcznego

Jednym z atrybutów kontrolki kalendarza miesięcznego jest możliwość przechowywania informacji, nazywanych stanem dnia kontrolki dla każdego dnia miesiąca. Te informacje służą do wyróżniania określonych dat dla aktualnie wyświetlanego miesiąca.

Uwaga

Obiekt CMonthCalCtrl musi mieć styl MCS_DAYSTATE, aby wyświetlić informacje o stanie dnia.

Informacje o stanie dnia są wyrażone jako 32-bitowy typ danych MONTHDAYSTATE. Każdy bit w polu bitowym MONTHDAYSTATE (od 1 do 31) reprezentuje stan dnia w miesiącu. Jeśli bit jest włączony, odpowiedni dzień będzie wyświetlany pogrubioną czcionką; w przeciwnym razie będzie wyświetlany bez nacisku.

Istnieją dwie metody ustawiania stanu dnia kontrolki kalendarza miesiąca: jawnie z wywołaniem polecenia CMonthCalCtrl::SetDayState lub obsługą komunikatu powiadomienia MCN_GETDAYSTATE.

Obsługa komunikatu powiadomienia MCN_GETDAYSTATE

Komunikat MCN_GETDAYSTATE jest wysyłany przez kontrolkę, aby określić, jak powinny być wyświetlane dni w ciągu widocznych miesięcy.

Uwaga

Ponieważ kontrolka buforuje poprzednie i następujące miesiące, w odniesieniu do widocznego miesiąca otrzymasz to powiadomienie za każdym razem, gdy zostanie wybrany nowy miesiąc.

Aby prawidłowo obsłużyć ten komunikat, należy określić, ile miesięcy informacji o stanie dnia jest żądany, zainicjować tablicę struktur MONTHDAYSTATE z odpowiednimi wartościami i zainicjować powiązany element członkowski struktury przy użyciu nowych informacji. Poniższa procedura, szczegółowo wykonująca niezbędne kroki, zakłada, że masz CMonthCalCtrl obiekt o nazwie m_monthcal i tablicę obiektów MONTHDAYSTATE , mdState.

Aby obsłużyć komunikat powiadomienia MCN_GETDAYSTATE

  1. Za pomocą Kreatora klas dodaj procedurę obsługi powiadomień dla komunikatu MCN_GETDAYSTATE do obiektu m_monthcal (zobacz Mapowanie komunikatów na funkcje).

  2. W treści programu obsługi dodaj następujący kod:

    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
    }
    

    Przykład konwertuje wskaźnik pNMHDR na odpowiedni typ, a następnie określa, ile miesięcy informacji jest żądanych (pDayState->cDayState). Dla każdego miesiąca bieżące pole bitowe (pDayState->prgDayState[i]) jest inicjowane na zero, a następnie ustawiane są wymagane daty (w tym przypadku 15. miejsce każdego miesiąca).

Zobacz też

Korzystanie z CMonthCalCtrl
Kontrolki