Rozpoczynamy przygodę z WinAPI. Jest to interfejs do pisania aplikacji, które będą działały pod systemem Windows. Aby zrozumieć zasady działania programów w WinAPI, musisz już znać C++.

Więc czym jest dokładniej WinAPI? Jest to zestaw funkcji, definicji zmiennych, struktur i wielu innych rzeczy, którymi będziemy się posługiwać, przy pisaniu programów pod Windowsa. Po zainstalowaniu Dev C++ w wersji 5, powinniśmy mieć już wszystkie niezbędne pliki nagłówkowe, w których są deklaracje funkcji Windowsowych.

Działanie aplikacji w Windowsie

Zasada działania aplikacji(programów) w Windowsie, opiera się na tworzeniu procesów, czyli oddzielnych programów, które pracują pod systemem Windows, otwierając jakiś program, tworzymy jego proces. Po utworzeniu, taki proces dostaje od windowsa pewną część pamięci, którą może wykorzystywać do swojego działania. Listę aktualnie utworzonych procesów w systemie, w windows XP można zobaczć w menadżeże zadań, po naciśnięciu Alt+Ctrl+Del. Mając taki proces(program) w systemie, wykonuje on swoje zadanie. Wcześniej(podczas kursu C++) poznałeś programy konsolowe, które uruchamiają się wykonują swój kod i zamykają się. Takie programy dzisiaj są nieefektywne. W windowsie programy pracują w sposób trochę inny, otóż praca programu(procesu) w windowsie, polega na nieustannym wysyłaniu i odbieraniu komunikatów z i do systemu. W ten sposób program cały czas wymienia komunikaty z windowsem. Programowanie pod windows w dużej mierze poelga, na obsłudze takich komunikatów, czyli rekacji naszego programu na jakieś zdarzenie w systemie.

Funkcje systemowe

Dodatkowo, programy pod WinAPI, korzystają z funkcji systemowych. Co to znaczy? Zajrzyjmy do katalogu C:\WINDOWS\system32(jeśli mamy windowsa na partycji C:), w WinXP lub Win2000 powinniśmy tam znaleść sporo różnych plików, właśnie tam są najważniejsze pliki systemu. Większość plików to tzw. biblioteki DLL(mają rozszerzenie *dll). Do czego służą takie pliki DLL? Otóż, jest to specjalna, część aplikacji, nie przeznaczona do bezpośredniego działania, tak jak aplikacja, ale jest to zbiór różnych funkcji, które mogą wykorzystywać inne aplikacje. Dla przykładu piszesz dwa inne programy i w obu musisz użyć tych samych funkcji. Możesz napisać je dwa razy w obu progrmach, albo umieścić je właśnie w takiej bibliotece i używać tych funkcji w tych programach, które będą importowane właśnie z tej biblioteki. Dzięki takim bibliotekom, programy mogą korzystać z tych samych funkcji. Z każdej biblioteki może korzystać wiele różnych programów i tak się włąśnie dzieje. Wracając do naszych funkcji systemowych, my pisząc program możemy dowolnie korzystać z funkcji w tych bibliotekach systemowych. Dla przykładu chcąc miec okno w naszym programie, wystarczy wywołać funckję z biblioteki systemowej, która utworzy nasze okno w pamięci. Nie musimy wiedzieć jak wygląda taka funkcja, ani gdzie się znajduje, wystarczy widzieć jak się nią posługiwać, czyż to nie proste?

Skoro już używamy funkcji systemowych wypadało by wiedzić, co nieco na temat tych bibliotek. Więkość najważniejszych bibliotek systemowych znajduje się we wcześniej wspomnianym folderze "system32" dla Windows XP/2000, natomiast w starszych wersjach będzie to folder "system". W tym głównym katalogu systemu, mamy "gąszcz" plików, a większość to właśnie biblioteki DLL. Wśród tych bibliotek można wyróżnić najważniejsze, bez których system nie mógłby prawodłowo funckjonować. Te najważniejsze biblioteki możemy rozpoznać po nazwie, a mianowicie nazwy wszystkich najważniejszych bibliotek dla systemu kończą się liczbą 32. Teraz wymienię najważniejsze z najważniejszych bibliotek w Windowsie.

kernel32.dll - jest to właściwie najważniejsza biblioteka w systemie. W tej bibliotece są zawarte funckje sterujące jądrem systemu Windows. Na pewno spotkaliście się z tym określeniem. Jądro systemu to właściwie najważniejsza część systemu, która steruje najważniejszymi rzeczami, obsługą sprzętu w komputerze, zarządzaniem pamięcią, procesami i innymi podstawowymi sprawami w całym systemie.
user32.dll - jest to także bardzo ważna biblioteka. Bez niej Windows nie byłby Windowsem. Są w niej funckje sterujące interfejsem użytkowanika, czyli tym przez co porozymiewamy się z komputerem: oknami i wszystkim co jest związane z nimi.
gdi32.dll - jest to biblioteka graficzna, funckje zawarte w niej rysują praktycznie wszystko co chcemy, do pojedynczych kropek, do skomplikowanych bitmap.
comctrl32.dll - w tej bibliotece znajdują się funkcje, dzięki którym możemy używać kilkudziesięciu standardowych kontrolek w systemie, czyli np. przycisków, suwaków, najróżniejszych pól edycyjnych, i różnych innych dziwactw, które będą powstawać na naszych oknach.

Okienko jako podstawa aplikacji

W konsoli pisalismy program bez otoczenia graficznego, grafika czyli to czarne tło jak i cały wygląd konsoli pochodzi z systemu, a program nie obsługuje grafiki. W WinAPI będziemy operować nie na oknie konsolowym, ale na oknach, przy użyciu interfejsu użytkownika GUI i systemowego GDI, czyli zestawu funkcji rysujących po monitorze i nie tylko.

Jak sama nazwa wskazuje w windowsie charakterystyczną cechą są okna. Okno w windowsie to podstawowy element interfejsu graficznego(GUI). To właśnie w dużej mierze poprzez okna komunikujemy się z systemem. Właściwie wszystko co widzimy na ekranie to okna. Wszystkie interaktywne elementy to właśnie okna, przyciski, suwaki, pola edycji, itd. Każdy proces może tworzyć swoje okna. Tutaj należy także wspomnieć o dziedziczności okien. Otóż takim najbardziej podstawowym oknem, na którym są wszystkie inne okna, to pulpit. Proces może utworzyć swoje okno, które będzie potpmne do pulpitu, czyli w skrócie będziemy mogli nim przesuwać po pulpicie. Następnie możemy tworzyć okna, które będą potomne do tego pierwszego okna, czyli, będziemy mogli przesuwać je tylko po powierzchni tego okna, następnie możemy tworzyć kolejne okna potomne do tych potomnych okien, w ten sposób tworzy nam się hierarchia okien według dziedziczności. Podstawową zasadą jest to, że okno potomne, możemy przesuwać tylko po oknie rodzica, poza nim nie będzie widoczne.

Ewolucja funkcji systemowych

Wracając do funkcji systemowych, poznając funkcje WinAPI, zobaczymy, że niektóre nazwy funkcji kończą się na "Ex". Przypuszczam, że to skrót od słowa Extension(ang.), co oznacza "rozszerzony". Odrazu powiem, że nazwa jest trochę myląca, bo to nie oznacza, że funkcja jest jakaś rozszerzona, ale zwykle oznacza, że w systemie są dwie wersje tej funkcji. Dla przykładu, mamy funkcję "CreateWindow", oraz "CreateWindowEx". Skąd się to bierze? A no stąd, że Windows(jak i każdy system), nieustannie przechodzi ewolujcę i rozwija się. Powstają nowe funckje, biblioteki. Wracając do naszych dwóch wersji funkcji, to jedna jest starsza, a druga nowsza, a zwykle służą do tego samego. Poprostu kiedyś pierwsze 16 bitowe windowsy, używały funkcji CreateWindow, natomiast później te funckje ulepszono, przebudowano, poprawinono, dzięki temu szybciej działają i nie usuwano starych funkcji, ale poprostu robiono nowe, więc jakaś mądra głowa wymyśliła, że te nowsze funckje będą się kończyły na "Ex", plus stara nazwa. W efekcie w naszych bibliotekach Windowsa XP, siedzi jeszcze sporo starych funkcji pochodzących z pierwszych 16 bitowych Windowsów. Ktoś się zapyta po co nam te stare funckje, skoro i tak mamy już nowsze? Microsoft zachowuje je w celu zgodności ze starymi programami, pisanymi pod Windowsy 16 bitowe. Dzięki czemu możliwe, że na Windows XP uda nam się odpalić stary program z przed 15 lat(oczywiście w teorii, bo z tymi starymi programami różnie to bywa).

Z punktu widzenia programisty należy zawsze używać tych nowszych funkcji z Ex i zapomnieć o tych starszych wersjach funkcji. Dlaczego? Po pierwsze, nowsze zwykle oznacza, że funkcje te są lepsze, czasem poprostu szybsze niż starsze. Po drugie kto wie, czy w kolejnym wydaniu Windowsa, starsze funkcje jeszcze będą. Microsoft powoli wycofuje starsze 16 bitowe wersje funkcji pozostawiając ich młodszych braci. My napiszemy program używając starej funkcji, a tu okaże się, że w kolejnym wydaniu Windowsa, tejże funkcji już w bibliotekach nie będzie i się zdziwimy, gdy zamiast śmigania naszego programu, zobaczymy okno błędu. Także zawsze należy stosować nowsze wersje. Oczywiście nikt nam nie zabroni stosowania starszych wersji funkcji, bo dopóki jeszcze są, można z nich korzystać, aczkolwiek nie zawsze ich działanie może być poprawne, tak jak byśmy tego chcieli.

Okienka w kompilatorze

Gdy piszemy projekt aplikacji pod Windows należy odpowiednio zaznaczyć to w opcjach projektu, bo kompilator też musi wiedzieć, że ma robić aplikację okienkową, a nie konsolową.

Podczas tworzenia projektu:

W opcjach projektu:

Miało być krótko, ale jakoś się rozpisałem :D