Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Poprzedni program nadal nie działa tak jakbyśmy chcieli, zaraz po utworzeniu okna program się kończy(return 0), więc jedyną rzeczą jaką zobaczymy to mignięcie okna. Po co nam takie programy.

 

Istnieje jednak wyjście z tej sytuacji, należy nawiązać komuniakację z systemem. W tym celu musimy zrobić pętlę komunikatów, która cały czas będzie wysyłała i otrzymywała komunikaty z systemu. Właściwie to każdy program okienkowy jest w rzeczywistości pętlą.

 

Przebieg programu wygląda w ten sposób, że zaczyna się, odrazu na początku działania powinien się zainicjować, czyli potworzyć w pamięci wszystko co niezbęde do funkcjonowania, okna itp. Następnie program wchodzi pętlę, w której komunikuje się z systemem. Dopiero, gdy program dostanie sygnał z systemu, pętla kończy się, wykouje to co jest po pętli i zamyka się. My już mamy zainicjowane, to co jest niezbędne do dziłania programu, czyli nasze okno i teraz czas na pętlę komunikatów. Składa się ona z dwóch funkcji.

 

No to zaczynamy, pierwszym krokiem jest zrobienie pętli, która będzie pobierać komunikaty z systemu i je wysyłać.

 

To jest ukryta treść, proszę

Działanie aplikacji w Windowsie opiera się na ciągłym wysyłaniu i odbierniau komuniaktów z i do systemu. Najpierw musimy utworzyć strukturę MSG, do przechowywania tych komunikatów. Nastpnie wchodzimy w petlę, która będzie ciągle obsługiwać wymianę komunikatów pomiędzy programem a systemem. W takiej pętli znajdują się dwie funckje. Pierwsza z nich, przechwytuje komunikaty pochodzące z klawiatury, natomiast kolejna, wywołuje odpowiednie funckje, które będą odpowiedzialne, za reagowanie naszego programu na te komunikaty.

 

Tak skompilowany program powinien już poprawnie działać.

 

Dobrze. Wiemy, że system wysyła do naszego programu komunikaty, teraz możemy napisać funckję, która będzie obsługiwała reakcje naszego programu, na każdy komunikat. Dla każdej klasy okna w naszym programie, możemy przypisać taką funkcje obsługi, która będzie zawierała odpowiednią obsługę komunikatów. Przypomnę teraz jedno pole struktury WNDCLASSEX:

To jest ukryta treść, proszę

Właśnie tu przypisujemy funkcję do odpowiedniego okna. W przykładnie naszemu oknu przypisujemy, funkcję o nazwie DefWindowProc, jest to domyślna funkcja obsługująca wszystkie komunikaty w sposób domyślny. Jednak jest ona mało efektywna, dlatego napiszmy sobie sami taką funkcję.

 

To jest ukryta treść, proszę

Nasza funkcja obsługi nazywa się WndProc. Jest typu LRESULT CALLBACK i ma 4 parametry. Pierwszy z nich to uchwyt okna, z którego pochodzi komunikat. Drugi parametr to "rodzaj komunikatu", czyli np. komunikat zamknięcia okna, czy kliknięcie na oknie lub każdy inny komunikat. Trzeci i czwarty to dodatkowe informacje, są zależne od rodzaju komunikatu, przykładowo w komunikacie "zmiana rozmiaru okna", będą to nowe wymiary okna.

 

Komunikaty rozdziela się w instrukcji switch. Instrukcja ta sprawdza rodzaj komunikatu, czyli sprawdza nasze msg, i według tego wyszukuje odpowiednie polecenia do wykonania. Jeżeli nie zdefiniowaliśmy danego komunikatu, to instrukcja natrafi na "default", czyli domyślne polecenia, a tam powinniśmy wywołać domyślna procedurę, aby obsłużyć komunikat w domyślny sposób. Jak widać w tej funkcji, każdy komunikat obsługujemy pomiędzy "case" a "break" i tutaj powtórzę, aby nie zapominać o break, bo wykona się następny komunikat.

 

Wcześniej mówiłem o komunikatach w sposób opisowy, np. komunikat zmiany rozmiaru okna, ale każdy komunikat ma swoją nazwę w kodzie. Napewno każdy komunikat będzie się zaczynam na "WM_", można sie domyślać, że to skrót od Windows Message(ang. komunikat Windowsa), nastepnie jest już nazwa danego komunikatu. Ile jest takich komunikatów? Bardzo dużo, oto najpotrzebniejsze:

 

WM_CLOSE - komunikat ten jest wysyłany przed zamknięciem okna, są to polecenia które mają się wykonać podczas zamykania okna, włącznie z samym zamykaniem.

WM_COMMAND - ten komunikat to komenda jakiegoś innego okna, które wysłało do naszego okna komendę.

WM_CREATE - komunikat ten jest wysyłany po utworzeniu okna, zwykle są w nim funckje tworzące wszystko co jest w tym oknie.

WM_MOVE - komunikat wysyłany podczas przesunięcia okna.

WM_PAINT - komunikat powiadamiający o potrzebie odrysowania okna.

WM_SIZE - komunikat wysyłany podczas zmiany rozmiaru okna.

 

Na koniec tej lekcji powiem o funkcji PostQuitMessage(), wywołanie tej funkcji spowoduje zakończenie działania pętli komunikatów, ta o której była mowa na początu tej lekcji, czyli innymi słowy zatrzyma działanie programu.

 

Copyright by www.winapi.rox.pl

9989.jpg

"Głupców nie sieją, sami się rodzą"

Opublikowano
Copyright by www.winapi.rox.pl

 

fajnie. My się staramy i piszemy odręcznie a ty ctrl+c ctrl+v -,-

Opublikowano

A powiesz mi po co mam pisać całe, długie tuty od nowa? Nie widzę zupełnie sensu pisania czegoś od nowa, jeśli to już jest... A jak będzie trzeba coś dodać od siebie to dodam, nie bój się :]

9989.jpg

"Głupców nie sieją, sami się rodzą"

Opublikowano

no tak liczą się wysiłki -,-

 

Ja nie będę się kłócił. kokosz tutaj ocenia

Opublikowano

A sądzisz że ja zrobiłem ctrl + c, ctrl + v? Tak, ale później edytowałem tekst, żeby dało się ładnie przeczytać. Zresztą zaraz dodam coś od siebie ;)

9989.jpg

"Głupców nie sieją, sami się rodzą"

Opublikowano

Sądzisz, nie czytałem tego? I widzę, że nie CZYTASZ moich postów. Napisałem że jak będzie trzeba to NAPISZĘ coś od siebie... Pisałem to dwa razy... A do Ciebie nie dotarło...

9989.jpg

"Głupców nie sieją, sami się rodzą"

×
×
  • Dodaj nową pozycję...