Wywoływanie standardowego okna Kolor

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

Listing 1
  1. static CHOOSECOLOR cc; // struktura potrzebna do wywołania okna dialogowego Kolory za pomocą funkcji ChooseColor
  2. 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:

Listing 2
  1. ZeroMemory(&customcolors, sizeof(customcolors)); // zerowanie pamięci dla niestandardowych kolorów
  2. ZeroMemory(&cc, sizeof(cc)); // zerowanie pamięci struktury CHOOSECOLOR
  3. cc.lStructSize = sizeof(CHOOSECOLOR); // ustawienie pola rozmiaru struktury
  4. cc.hwndOwner = hWnd; // uchwyt okna rodzica
  5. cc.rgbResult = c; // przypisuję bierzący kolor czcionki
  6. cc.lpCustColors = customcolors; // przypisuję tablicę kolorów
  7. 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ę:

Listing 3
  1. switch(LOWORD(wParam)){ // niższe słowo parametru wParam zawiera identyfikator klikniętej pozycji menu
  2. case ID_USTAWIENIA_KOLORCZCIONKI: // id menu wyboru koloru czcionki
  3. {
  4. if(ChooseColor(&cc)){ // wywołanie okna dialogowego Kolor
  5. c = cc.rgbResult; // przepisanie koloru
  6. InvalidateRect(hedit, NULL, true); // odświeżenie okna
  7. }
  8. }
  9. 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.

Komentarze