W tej lekcji postaram się przedstawić trochę styli okien w Windowsie.

Style klasy okna

Struktura WNDCLASSEX posiada pole "style". Już na etapie tworzenia klasy okien, możemy określić ich cechy. Tutaj przedstawię parę tych styli, oraz je omówię. Przypominam, że style można łączyć ze sobą operatorem sumy bitowej "|".

CS_DBLCLKS
Dzięki temu stylowi okno będzie obsługiwało komunikat o podwójnym kliknięciu.

CS_DROPSHADOW
Styl ten powoduje ciekawy efekt wizualny, polegający na rzucaniu cienia przez okno, o ile efekt nie jest wyłączony w systemie. Flaga wprowadzona dopiero w WinXP. W Dev C++ w wersji 4.9.9.2 w plikach nagłówkowych niestety flagi CS_DROPSHADOW także jeszcze nie zdefiniowano, dlatego sami musimy sobie ją zdefiniować. Na początku kodu należy napisać:

#define CS_DROPSHADOW 0x00020000

CS_NOCLOSE
Flaga ta powoduje, że okna utworzone z tej klasy, będą miały nieaktywny przycisk zamknięcia.

CS_GLOBALCLASS
Flaga ta powoduje, że dana klasa zalicza sie do głównych klas dla danej aplikacji.

CS_PARENTDC
Flaga ta powoduje, że okna tej klasy będą dysponowały kontekstem do swojego okna rodzica.

CS_OWNDC
Flaga ta powoduje, że okna utworzone z tej klasy będą miały swój własny stały kontekst urządzenia. O takich kontekstach powiemy sobie w dziale GDI.

CS_CLASSDC
Flaga ta powoduje, że wszystkie okna utworzone z tej klasy, będą miały jeden wspólny kontekst urządzenia. Flaga ta ma sens jednynie, gdy z jednej klasy okna tworzymy kilka okien.

CS_HREDRAW
Flaga ta powoduje, że gdy zmienimy rozmiar okna, całe okno zostaje na nowo odrysowane.

CS_VREDRAW
Flaga ta powoduje, że gdy zmienimy rozmiar okna, zostaje odrysowany obszar roboczy okna(wnętrze okna, bez paska tytułowego i bocznych ramek, jeżeli takie są).

CS_SAVEBITS
Flaga ta powoduje, że obraz okna przechowywany jest w bitmapie i w razie potrzeby okno odrysowywane jest z tej bitmapy. Przechowywanie bitmapy w pamięci wiąże się zajęciem pamięci dla niej.

Style podstawowe

Style te określają podstawowy wygląd okna. Podczas tworzenia okna funckją CreateWindowEx, czwartym parametrem są właśnie style podstawowe, tworzonego okna, czyli to jak ma wyglądać. Style te można łączyć operatorem sumy bitowej |. W WinApi mamy do wyboru różne style okna, oto one:

WS_POPUP
Najprostrzy styl okna, a dokładniej "gołe" okno, bez żadnych dodatków.

WS_BORDER
Ten styl nadaje oknu cienką ramkę o grubości 1 piksela. Na obrazku połączenie WS_BORDER|WS_POPUP.

WS_DLGFRAME
Ten styl to także ramka okna, ale trochę grubsza niż WS_BORDER. Na obrazku połączenie WS_DLGFRAME|WS_POPUP.

WS_THICKFRAME
Jest to ramka okna, która wygląda tak samo jak WS_DLGFRAME, ale dodatkowo dzięki niej można zmieniać rozmiar okna.

WS_VSCROLL
Styl ten dodany do okna, powoduje, że z prawej stony okna pojawia nam się pasek przewijania okna.

WS_HSCROLL
Ten styl dodaje pasek przewijania na dole okna.

WS_CAPTION lub WS_OVERLAPPED lub WS_TILED
Każdy ten styl to okno z paskiem tytułowym i ramką DLGFRAME.

WS_SYSMENU
Styl WS_SYSMENU potrzebuje paska tytułu do prawidłowego działania. Ten styl daje możliwość dodania menu do okna, bez niego nie zobaczysz menu, oraz dzięki temu stylowi na pasku tytułu pojawia się ikona i przycisk zamknięcia okna.

WS_MAXIMIZEBOX
Styl ten dodaje na pasku tytułu przycisk maksymalizacji. Styl ten do poprawnego działania wymaga stylu WS_SYSMENU.

WS_MINIMIZEBOX
Styl ten dodaje na pasku tytułu przycisk minimalizacji. Styl ten do poprawnego działania wymaga stylu WS_SYSMENU.

WS_OVERLAPPEDWINDOW lub WS_TILEDWINDOW
Połączenie styli: WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX. Okno ma prawie wszystko czego możemy chcieć, łącznie ze zmianami rozmiaru okna.

WS_VISIBLE
Ten styl już poznałeś w poprzedniej lekcji, okno takie po utworzeniu jest odrazu widoczne. Przyjmuje odrazu SW_SHOW.

WS_MAXIMIZE
Ten styl działa podobnie do WS_VISIBLE, z tym, że okno po utworzeniu jest odrazu zmaksymalizowane.

WS_MINIMIZE lub WS_ICONIC
Tak jak wyżej, tylko że okno jest zminimalizowane.

WS_CHILD lub WS_CHILDWINDOW
Tworzy okno potomne do innego okna, styl ten nie może występować razem z WS_POPUP. Okno potomne nie może mieć menu.

WS_GROUP
W przypadku tworzenia kontrolek, określa pierwszą kontrolke w grupie kontrolek.

WS_SIZEBOX
Tworzy okno z brzegiem zawierającym ikonę skalowania.

WS_TABSTOP
W przypadku kontrolek, dodaje kontrolkę do grupy kontrolek po których można "przeskakiwać" klawiszem TAB.

Jeszcze powiem o stylu którym najczęśćiej używam, otóż zwykle potrzebuje okna, które wizualnie ma wszystko, ale nie chce, żeby zmieniało rozmiar. Tzn moje okno ma mieć pasek tytułu, przycisk zamknięcia, ikonę na pasku, ramkę okna i przycisk minimalizacji. Nie chcę mieć ramki zmieniającej rozmiar, oraz nie chcę przycisku maksymalizacji, bo wtedy okno także zmienia swój rozmiar. Aby uzyskać taki efekt, musimy połączyć style: WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX

Style rozszerzone

Style te okerślają rozszerzone właściwości okna. Odnoszą się do wielu dodatkowych cech okna, nie tylko wyglądu.
Rozszerzone style dodaje się w pierwszym parametrze funkcji CreateWindowEx.

WS_EX_CONTEXTHELP
Ten dodatkowy styl dodaje do naszego okna przycisk pomocy, obok przycisku zamknięcia. Aby można było użyć tego stylu na pasku tytułowym, nie może być przycisków minimalizacji i maksymalizacji.

WS_EX_TOPMOST
Ten dodatkowy styl powoduje, że okno będzie zawsze na wierzchu i będzie na pierwszym planie przed innymi oknami.

WS_EX_TOOLWINDOW
Styl, który całkowicie zmienia wygląd paska tytułowego. Pasek tytułowy staje się mniejszy i nie ma przycisków minimalizacji, maksymalizacji, pomocy i ikony, pomimo, że style podstawowe są dołączone.

WS_EX_CLIENTEDGE
Styl ten powoduje, że wnętrze okna jest zagłębione.

WS_EX_ACCEPTFILES
Styl ten jest potrzebny do przenoszenia plików pomiędzy oknami metodą "przeciągnij i upuść".

WS_EX_CONTROLPARENT
Styl ten jest potrzebny do przeskakiwania pomiędzy kontrolkami potomnymi klawiszem TAB.