Kolejnym znanym Ci zapewne Windowsowym oknem jest okno dialogowe Kolory. Do wywołania tego okna służy funkcja ChooseColor, która przyjmuje jako jedyny argument wskaźnik do struktury typu CHOOSECOLOR.
Rys. 1
Ilustracja standardowego okienka kolorów.
Dodawanie pozycji do menu w projekcie myNotepad
Tak jak na poprzedniej stronie tak i teraz koniecznie należy dodać kolejną pozycję do menu Ustawienia o nazwie Kolor czcionki, należy upewnić się również, czy identyfikator tej pozycji w menu ma nazwę ID_USTAWIENIA_KOLORCZCIONKI.
Wprowadzanie zmian w kodzie programu
Czas najwyższy dodać zmianę koloru czcionki tekstu wyświetlanego w okienku hedit. W tym celu w funkcji należy dodać dwie statyczne zmienne:
static CHOOSECOLOR cc; // struktura potrzebna do wywołania okna dialogowego Kolory za pomocą funkcji ChooseColor
static COLORREF customcolors[16]; // tablica, która powinna przechowywać paletę szesnastu niestandardowych kolorów
a następnie w komunikacie WM_CREATE wstawić kod ustawiający te zmienne:
ZeroMemory(&customcolors, sizeof(customcolors)); // zerowanie pamięci dla niestandardowych kolorów
ZeroMemory(&cc, sizeof(cc)); // zerowanie pamięci struktury CHOOSECOLOR
cc.lStructSize = sizeof(CHOOSECOLOR); // ustawienie pola rozmiaru struktury
cc.hwndOwner = hWnd; // uchwyt okna rodzica
cc.rgbResult = c; // przypisuję bierzący kolor czcionki
cc.lpCustColors = customcolors; // przypisuję tablicę kolorów
cc.Flags = CC_RGBINIT | CC_FULLOPEN; // flagi: inicjalizująca kolor wybrany kolorem z pola rgbResult; otwierająca okno w trybie pełnym (bez konieczności kliknięcia przycisku Definiuj kolory niestandardowe
Na koniec pozostało już tylko dodać do programu obsługę dodanej pozycji w menu, co też i z najdziksza rozkoszą czynię:
switch(LOWORD(wParam)){ // niższe słowo parametru wParam zawiera identyfikator klikniętej pozycji menu
case ID_USTAWIENIA_KOLORCZCIONKI: // id menu wyboru koloru czcionki
{
if(ChooseColor(&cc)){ // wywołanie okna dialogowego Kolor
c = cc.rgbResult; // przepisanie koloru
InvalidateRect(hedit, NULL, true); // odświeżenie okna
}
}
break;
Nowe funkcje w projekcie
Lista użytych funkcji:
InvalidateRect - funkcja służy do wymuszenia odświeżenia okna, do którego uchwyt musi zostać przekazany;
ChooseColor - funkcja wywołująca okno dialogowe Kolory. Funkcja ta powiązana jest ściśle z strukturą CHOOSECOLOR.
Lista użytych struktur:
CHOOSECOLOR - struktura wykorzystywana do inicjalizacji okna dialogowego Kolory. Struktura ta powiązana jest ściśle z funkcją ChooseColor.