ďťż

art8

Lemur zaprasza

Programowanie od
podstaw (1)



Siedzisz
w wygodnym fotelu (lub krześle, mam nadzieję :) i 'rysujesz' program. Nie
piszesz, ale 'rysujesz' bo w dzisiejszych czasach większość programów
postrzegamy pod postacią graficzną i pod taką też chcemy je tworzyć. Takie
tworzenie aplikacji - rysowanie jej interfejsu - nazywamy RAD. Nie chodzi tu o
promieniotwórczy pierwiastek, ale o Rapid Appliacation Development.



Niewiele nas to obchodzi, że można też tworzyć interfejs pisząc go i wiele
się przy tym nauczyć. Możecie sobie pomyśleć, że to przestarzała
technologia, ale do dziś się jej używa, dlaczego - bo jest uniwersalna dla każdego
języka programowania, procedura zdarzeniowa zawsze ma takie parametry dla
wszystkich środowisk, a zmienia się tylko składnia. Oczywiście, to wszystko
jest skomplikowane, ale w rzeczywistości przypomina tworzenie 'zwyczajnego'
programu.



Jak oczywiście każdy z was (mam nadzieję) się domyślił będziemy korzystać
z API. Dokładniej - z biblioteki User32.DLL, biblioteka ta pozwala na zarządzanie
i wymianę komunikatów między oknami, ale o tym za chwilę.



"Co będziemy musieli zrobić?" - to podstawowe pytanie, które należy
zadać sobie przed przystąpieniem do pracy. A więc nasz program powinien
stworzyć klasę okna. Tak, tak, dobrze widzisz. A po co, przecież tego nie
robisz tworząc sobie normalną formę?

Tak ci się tylko wydaje. Styl okna, ikona, kursor, tło, menu i wiele innych to
właśnie klasa okna, którą ty tworzysz zawsze, nie zdając sobie z tego
sprawy. Aby przekazać te dane do naszego okna, stworzymy jego klasę przesyłając
do specjalnej funkcji API.

Klasę rejestrujemy tylko raz dla każdego okna, i chociaż np. przycisk też
traktujemy jako obiekt typu okna, to on posiada predefiniowaną klasę przycisku
bez możliwości naszej ingerencji. Do funkcji RegisterClass, bo tak się
nazywa, przekażemy zmienną o strukturze, która zawiera:



Type WNDCLASS

    style As Long
' styl

    lpfnwndproc As Long
'wskaźnik procedury zdarzeniowej

    cbClsextra As Long

    cbWndExtra2 As Long

    hInstance As Long
'instancję obsługującej aplikacji

    hIcon As Long
' ikonę

    hCursor As Long
' kursor

    hbrBackground As Long
' kolor tła

    lpszMenuName As String
' nazwę menu

    lpszClassName As String
' nazwę klasy

End Type



 



Co
dalej? Po zarejestrowaniu klasy wypadałoby utworzyć i pokazać okno. Robimy to
za pomocą CreateWindowEx i ShowWindow. Po zakończeniu aplikacji trzeba
odrejestrować klasę okna, by potem można by ją ponownie zarejestrować. Jak
widzisz te czynności wykonujemy jeden raz i dlatego przykładowo nie da się
zmienić niektórych parametrów okna podczas działania aplikacji.



Została nam jeszcze do omówienia procedura zdarzeniowa. Czym ona jest? Co robi
i po co jest? Jest ona wywoływana prze każdym zdarzeniu, takim jak utworzenie,
zamknięcie, przesunięcie, czy zmiana wielkości okna (itd.), by nasz program mógł
na to reagować. Musimy wiedzieć, że okno tworzone jest poza naszym programem,
a my musimy zachować nad nim pełną kontrolę.



 



Procedura
zdarzeniowa w notacji języka C++ wygląda oto tak:



LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM
lParam)

{

    return 0;

}




Widzimy parametry:

hWnd - jest to zlepek handle + Window czyli uchwyt (numer identyfikacyjny) okna

message - często także uMsg to jest chyba User + Message czyli wiadomość użytkownika,
przesyłana jest jak coś się stanie

wParam - jest to dodatkowa informacja do wiadomości uMsg (message); pierwszy
jej parametr

lParam - jak wyżej, tylko, że to jest jej drugi parametr.

W notacji VB ta funkcja wygląda tak:



Function WndProc(ByVal
hWnd As Long, ByVal
message As Long, ByVal
wParam As Long, ByVal
lParam As Long) As
Long



End Function



Widzimy, że wszystko tak samo (z programistycznego punktu widzenia).

Jeżeli masz jeszcze niedosyt wiedzy, lub niezbyt to rozumiesz, to odsyłam do
artykułu Karola Kuczmarskiego pt. "Jak działa Windows" z VBM #12,
#13, #14...



W następnej części artykułu przejdziemy do praktyki - utworzymy okno, bez
jego rysowania.



Artykuł zainspirowany .

 

Marcin Porębski ( Doogie )



  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • teen-mushing.xlx.pl
  • Wątki
    Powered by wordpress | Theme: simpletex | © Lemur zaprasza