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.