GUI events

Popełniłem kawałek kodu za który strażnicy obiektowości od razu posłaliby mnie do karceru. Mogę jednak swoją ignorancję uzasadnić w prosty sposób: Gdybym pisał to zgodnie z zasadami OOP to użytkownik w późniejszym czasie używający tego co pięknie napisałem stwierdziłby, że używa się tego dość ciężko.

Piszę oczywiście o tej nieszczęsnej obsłudze zdarzeń pochodzących z GUI. Kilka postów wcześniej rozważałem sposoby na rozwiązanie tego problemu i doszedłem do wniosku (co zresztą doradzał mi też Tarains) że najlepiej będzie stworzyć coś a’la MS’owa procedura okna.

Po zakodzeniu tego w AGE i wypróbowaniu widzę, że jest to całkiem przyjemny sposób, nie mówiąc już o tym, że nie trzeba co klatkę sprawdzać czy coś się stało z GUI.

Muszę przyznać, że jestem całkiem zadowolony ze wstępnych testów tego rozwiązania. Spróbuję jeszcze stworzyć trochę większe GUI żeby zobaczyć jak mocno rozrośnie mi się kod.

Reklamy

5 myśli nt. „GUI events

  1. Ej, przecież są dwa uznane sposoby na obsługę zdarzeń w językach obiektowych: użycie metod wirtualnych lub delegatów. Wprawdzie żaden nie jest natywnie wspierany przez C++, ale obu ich można używać.

  2. Jeśli chodzi o rozsyłanie eventów typu „klawisz ‚A’ wciśnięty” to jest to rozwiązane za pomocą własnie metod wirtualnych.

    Wyżej pisałem o łapaniu eventów od obiektów GUI. Teraz mam tak, że lecą one wszystkie do aktywnego zadania (czyli głównego obiektu zarządzającego tym co się aktualnie dzieje) i tam można je obsługiwać podobnie do tego jak się to robiło w procedurach windowsa.

  3. Czyli dostaje się wskaźnik na kontrolkę, której dotyczy zdarzenie, oraz dane zdarzenia i robi się jednego, wielkiego, perfidnie obleśnego switcha? Dziękuje, postoję 🙂

  4. Tak właśnie tak się robi 😛

    No jakoś trzeba te zdarzenia obsługiwać, a jak są w jednym miejscu to robi sie to łatwiej.

    BTW: switch nie musi byc oblesny. Mozna pisac:
    case: okBtnClicked(); break;

    IMO to jest rozwiazanie lepsze niz np. subklasowanie guiButton, żeby zaimplementować co robi jeden przycisk. Nie wiem jak to jest z delegatami bo tym się nie bawiłem jeszcze. Sprawdzę jak to działa i jak będzie wygodniejsze to chętnie je wykorzystam ^^

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s