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.

Napisane w Programowanie. Tagi: , .

Odpowiedzi: 5 do “GUI events”

  1. Xion mówi:

    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. moriturius mówi:

    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. Xion mówi:

    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. moriturius mówi:

    Tak właśnie tak się robi :P

    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 ^^

  5. Reg mówi:

    Ludzie, nie bójcie się switchów. Unikanie tego za wszelką cenę to już jest obiektowy fanatyzm a’la Banda Czworga :)

Napisz odpowiedź