Udostępnij przez


Jak ustawić stany dnia

W tym temacie przedstawiono sposób ustawiania informacji o stanie dnia. Kontrolka kalendarza miesięcznego używa informacji o stanie dnia, aby określić, jak rysuje określone dni w ramach kontrolki.

Kontrolki kalendarza miesiąca, które używają stylu MCS_DAYSTATE, obsługują stany dni. Informacje o stanie dnia są wyrażone jako 32-bitowy typ danych, MONTHDAYSTATE. Każdy bit w MONTHDAYSTATE bitfield (od 0 do 30) określa stan dnia w miesiącu. Jeśli bit jest włączony, odpowiedni dzień jest wyświetlany pogrubioną czcionką.

Co musisz wiedzieć

Technologie

Warunki wstępne

  • C/C++
  • Programowanie interfejsu użytkownika systemu Windows

Instrukcje

Aplikacja może jawnie ustawić informacje o stanie dnia, wysyłając komunikat MCM_SETDAYSTATE lub używając odpowiedniego makra, MonthCal_SetDayState. Jednak informacje o stanie dnia są zwykle ustawiane w odpowiedzi na kod powiadomienia MCN_GETDAYSTATE, który jest wysyłany za każdym razem, gdy kontrolka musi zostać odświeżona, ponieważ na przykład inny miesiąc pojawił się w widoku.

Poniższy przykładowy kod pokazuje, jak przetworzyć kod powiadomienia MCN_GETDAYSTATE w programie obsługi komunikatów WM_NOTIFY. Przetwarza MCN_GETDAYSTATE, określając, że pierwszy i piętnasty dzień każdego widocznego miesiąca powinny zostać wyróżnione. Element cDayState członka NMDAYSTATE określa liczbę wartości MONTHDAYSTATE wymaganych w tej tablicy, która ma dowolny maksymalny rozmiar. Następnie kod wykonuje pętlę, aby ustawić odpowiednie bity w każdym prawidłowym elemencie tablicy za pomocą makra zdefiniowanego przez aplikację BOLDDAY.

    #define BOLDDAY(ds, iDay)  \
        if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))

    case WM_NOTIFY:
            if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE)
            {
                MONTHDAYSTATE rgMonths[12] = { 0 };
                int cMonths = ((NMDAYSTATE*)lParam)->cDayState;
                for (int i = 0; i < cMonths; i++)
                {
                    BOLDDAY(rgMonths[i], 1);
                    BOLDDAY(rgMonths[i], 15);
                }
                ((NMDAYSTATE*)lParam)->prgDayState = rgMonths;
                return TRUE;
            }
            break;

Dokumentacja kontrolki kalendarza miesięcznego

O kontrolkach miesięcznego kalendarza

Używanie kontrolek kalendarza miesięcznego