Wywoływanie standardowego okna Kolor
Stronę tą wyświetlono już: 1948 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.

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.

Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski

Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz

Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha

Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams

Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis

Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół

Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz

Tytuł:
OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV
Autor:
Adrian Kaehler, Gary Bradski

Tytuł:
C++ w 24 godziny. Wydanie VI
Autor:
Rogers Cadenhead, Jesse Liberty

Tytuł:
C++ Optymalizacja kodu. Sprawdzone techniki zwiększania wydajności
Autor:
Guntheroth Kurt