Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2803 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:

  • 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.
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.