|
Większość aplikacji ma interaktywny graficzny interfejs użytkownika (GUI). Kiedy aplikacja uruchamia się, to wyświetla komplet okien w których użytkownik może kliknąć i pisać. Aplikacja odpowiada na działania użytkownika i uaktualnia jego okno by pokazać użytkownikowi, że go słucha.Aby uruchomić ten rodzaj interfejsu użytkownika, aplikacja musi:
- Zarządzać zbiorem okien
- Rysować wewnątrz okien
- Odpowiadać na działania użytkownika (zgłaszane jako komunikaty interfejsu)
Interface Kit definiuje zbiór klas C++, które dostarczają struktury dla tych operacji. Ten rozdział po pierwsze wprowadza pojęcie szkieletu dla interfejsu użytkownika, potem opisuje wszystkie klasy, funkcje, typy i stałe zestawu, które definiuje.
Graficzny interfejs użytkownika jest zorganizowany wokół okien. W środowisku wielozadaniowym, dowolna liczba aplikacji może działać w tym samym czasie, każda ze swoim własnym zbiorem okien na ekranie. Okna wszystkich uruchomionych aplikacji muszą współpracować we wspólnym interfejsie. Tym bałaganem zarządza Application Server. Jest to przewód wejściowy komunikatów aplikacji i wyjście rysowania:
- Monitoruje on klawiaturę i myszkę i wysyła do aplikacji komunikaty zgłaszające każde przyciśnięcie klawisza przez użytkwnika i akcję myszki.
- Odbiera on instrujkcje rysowania od aplikacji i interpretuje je do przedstawienia (ang. rendering) obrazów wewnątrz okien.
Każde okno w aplikacji jest reprezentowane przez oddzielny obiekt BWindow. Skonstruowanie obiektu BWindow ustanawia połączenie z Application Server'em. Gdy wywołujesz funkcje obiektu BWindow do manipulowania oknem (Show(), MoveTo(), SetTitle() i inne), obiekt wysyłą komunikat do serwera, który przetwarza aktualną manipulację.Klasa BWindow pochodzi od BLooper. Każdy obiekt BWindow zapoczątkowuje wątek (w przestrzeni adresowej aplikacji) gdzie odbiera on i odpowiada na komunikaty interfejsu od serwera.
Wszystkie inne obiekty w Interface Kit grają role które zależą od BWindow. Rysują one w oknie, odpowiadają na komunikaty interfejsu odbierane przez okno, lub działają ze wsparciem innych obiektów, które rysują i odpowiadają na komunikaty.
Okno jest rozdzielone na mniejsze prostokątne obszary nazywane widokami. Każdy widok odpowiada jednej części jaką wyświetla okno - pasek pasek przewijania, dokument, lista i tak dalej.Aplikacja ustala widok przez skonstruowanie obiektu BView i powiązanie z konkretnym obiektem BWindow. Obiekt BView jest odpowiedni do rysowania wewnątrz prostokatnego widoku i do obsługiwania komunikatów interfejsu kierowanych doo tego obszaru.
Okno może zachować i wyświetlić przedstawiane obrazy, lecz nie może ono ich narysować;, do tego potrzebuje zbioru obiektów BViews. BView jest pośrednikiem do rysowania, ale nie może on przedstawiać obrazów, które sam tworzy; do tego potrzebuje on BWindow. Te dwa obiekty pracują ręka w rękę.Każdy obiekt BView jest autonomicznym środowiskiem do rysowania: ma swój własny układ współrzędnych, bieżące kolory, tryb rysowania, obcinanie regionu, czcionkę, pozycję pióra (ang. pen), i tak dalej. Klasa BView definiuje również funkcje, które reprezentują elementarne operacje rysowania takie jak styl linii, rysowanie liter i szybkie przerzucanie obrazu (związane z podwójnym buforowaniem w celu eliminacji migotania obrazu - przyp. tłum.).
Gdy użytkownik działa, komunikaty systemowe, które zgłaszają zachodzące zdarzenia, są wysyłane do obiektu BWindow który z kolei określa, który z obiektów BView wydobył akcję użytkownika i powinien na nią odpowiedzieć. Przykładowo, BView który narysował wypisany tekst może oczekiwać na komunikaty odpowiedzi zgłaszające naciśnięcia klawiszy przez użytkownika. BView który narysował przycisk otrzymuje do obsłużenia komunikaty, które są wygenerowane gdy przycisk jest kliknięty. Klasa BView pochodzi od BHandler'a, więc obiekty BView są odpowiednie, do obsługi komunikatów wyekspediowanych przez BWindow.
Okna zwykle zawierają pewną liczbę różnych widoków - wszystkie są ułożone w hierarchi poniżej górnego widoku, widok który jest dokładnie tego samego rozmiaru co obszar zawartości okna. Widok górny jest towarzyszem okna; jest on tworzony przez obiekt BWindow gdy BWindow jest konstruowany. Gdy okno zmienia rozmiar, górny widok ma zmieniany rozmiar tak by się dopasował. W przeciwieństwie do innych widoków, górny widok nie rysuje ani nie odpowiada na komunikaty; obsługuje on jedynie połączenie okna z widokami, które tworzy aplikacja i umieszcza w hierarchii.Hierarchia widoku może być reprezentowana jako struktura rozgałęzionego drzewa z górnym widokiem jako jego korzeniem. Wszystkie widoki w hierarchii (wyłączając widok górny) mają jeden i tylko jeden widok rodzica. Każdy widok (włącznie z widokiem górnym) może mieć dowolna liczbe widoków potomnych.
Kiedy tworzony jest nowy obiekt BView, nie jest on przyłączony do okna i nie ma rodzica. Jest on dodawany do okna przez uczynienie go potomkiem widoku już będącego w hierarchii widoku. Jest to wykonywane w funkcji AddChild(). Widok może być uczyniony potomkiem górnego widoku okna przez wywołanie wersji funkcji AddChild() obiektu BWindow.
Dopóki jest on przypisany do okna, BView nie może nie może rysować i nie odbiera zgłaszanych zdarzeń. Obiekty BView wiedzą jak tworzyć obrazy, ale wymagają one okna do wyświetlenia i przechowania obrazów, przez nich tworzonych.
Hierarchia widoku określa co jest wyświetlane, gdzieś na ekranie, a także jak działania użytkownika są związane z odpowiednim obiektem BView:
- Gdy widoki w oknie są wywoływane do rysowania, obiekty rodzicielskie rysują przed swoimi obiektami potomnymi; obiekty potomne rysują na wierzchu swoich przodków (w sensie hierachii widoku a nie dziedziczenia klas - przyp. tłum.).
- Zdarzenia myszy są związane z widokiem gdzie jest ulokowany kursor.
Rodzeństwa nie rysują w pierwotnie zdefiniowanej kolejności. Jeśli zachodzą one zachodzą na siebie, to nie jest określone, który widok narysuje ostatni - czyli, który będzie rysował na przodzie innych. Podobnie, nie jest określone, który widok będzie odbierał zdarzenia myszy, które wystąpią we wspólnym obszarze rodzeństwa.Dlatego mocno jest zalecane, żebyś rozmieszczał swoje widoki rodzeństwa tak aby nie zachodziły na siebie nawzajem.
|
Be
Book,
...w ślicznym HTML...
dla BeOS wydanie 5
Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.