Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2649 razy

Wstęp

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.

Standardowe okno kolorów
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:

Lista użytych struktur: