Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;
Tematy pokrewne