|
Pochodzi od: żaden
Zadeklarowany w: be/app/MessageFilter.h
Biblioteka: libbe.so
Alokowanie: tylko konstruktor
więcej...
BMessageFilter jest funkcją prześwietlania komunikatów którą Ty "przyłączasz" do BLooper'a lub BHandler'a. Filtr komunikatu widzi komunikaty tuż przed tym zanim są one wysyłane tj. tuż przed BLooper::DispatchMessage()) i może zmodyfikować lub odrzucić komunikat, zmieniać określony handler komunikatu lub to co jeszcze chce wykonać - implementacja funkcji filtrowania nie jest ograniczona.
Aby zdefiniować filtr komunikatu, musisz dostarczyć funkcję filtrowania komunikatów. Robisz to przez zaimplementowanie funkcji przechwytującej Filter() w podklasie BMessageFilter, lub przez dostarczanie funkcji filter_hook do konstruktora BMessageFilter. Wywoływana jest tylko jedna funkcja filtrowania na obiekt. Jeżeli implementujesz funkcję Filter() i a dostarczysz funkcję filter_hook, filter_hook wygra.
Aby przyłączyć filtr komunikatu do looper'a, wywołaj BLooper::AddCommonFilter(). Aby dodać go do handler'a, wywołaj BHandler::AddFilter(). Filtry looper'a widzą wszystkie nadchodzące komunikaty; filtry handler'a widzą tylko te komunikaty, które są adresowane do tego określonego handler'a.
BLooper lub BHandler może mieć więcej niż jeden filtr komunikatu. Ponadto, looper może mieć dwa zestawy filtrów: zestaw looper'a i zestaw handler'a (pamiętaj, żeBLooper pochodzi od BHandler'a). Filtry looper'a są stosowane przed filtrami handler'a.
Obiekt BMessageFilter może być przypisany tylko do jednego BHandler'a lub BLooper'a na raz.
![]()
Klasa BMessageFilter jest przeznaczona do używania jako część systemowo zdefiniowanej metody rozgłaszania komunikatów. Jeśli próbujesz użyć na zewnątrz ten system, Twoje wyniki mogą nie być takie jak oczekujesz.
Filter()
![]() | BMessageFilter() |
BMessageFilter(message_delivery delivery,
message_source source,
uint32 command,
filter_hook filter = NULL)
BMessageFilter(message_delivery delivery,
message_source source,
filter_hook filter = NULL)
BMessageFilter(uint32 command,
filter_hook filter = NULL)
BMessageFilter(const BMessageFilter &object)
BMessageFilter(const BMessageFilter *object)Tworzy i zwraca nowy obiekt BMessageFilter. Pierwsze trzy argumenty określają typ komunikatów, które obiekt chce widzieć:
- delivery określa jak komunikat musi przybyć: przeciągnij i upuść (B_DROPPED_DELIVERY), programowo (B_PROGRAMMED_DELIVERY) lub obojętnie jak (B_ANY_DELIVERY). Domyślnie jest to B_ANY_DELIVERY.
- source określa czy nadawca komunikatu musi być miejscowy względem tej aplikacji (B_LOCAL_SOURCE), zdalny (B_REMOTE_SOURCE) lub obojętnie jak (B_ANY_SOURCE). Domyślnie jest to B_ANY_SOURCE.
- command jest stałą polecenia. Jeśli ją dostarczono, wartość what przychodzącego komunikatu musi nyc porównana z tą wartością.
Komunikaty które nie pasują do tej definicji nie będą wysłane do funkcji filtrowania obiektu.
Argument filtra filter jest wskaźnikiem do funkcji filter_hook. To jest funkcja, która jest wywoływana gdy zachodzi potrzeba aby komunikat był sprawdzony (patrz do protokołu filter_hook ). Nie musisz dostarczać funkcji filter_hook; zamiast tego możesz zaimplementować funkcję Filter() w podklasie BMessageFilter.
Dla dalszych informacji, odnieś się do opisu funkcji członkowskiej Filter().
![]() | ~BMessageFilter() |
virtual ~BMessageFilter() Nic nie robi.
![]() | Command() , FiltersAnyCommand() |
uint32 Command(void) const bool FiltersAnyCommand(void) const Command() zwraca stałą polecenia (wartość what BMessage'a) którą nadchodzący komunikat musi dopasować do zastosowanego filtra. FiltersAnyCommand() zwraca true jeśli filtr jest zastosowany do wszystkich komunikatów i false jeśli jest ograniczony do określonego polecenia.
Ponieważ wszystkie stałe polecenia są ważne, włącznie z liczbami ujemnymi i 0, Command() zwraca pewny wynik tylko jeśli FiltersAnyCommand() zwraca false.
![]() | Filter() |
virtual filter_result Filter(BMessage *message, BHandler **target) Implementowane przez pochodne klasy do sprawdzania nadchodzącego komunikatu tuż przed jego wysłaniem. Pierwsze dwa argumenty są rozpatrywanym komunikatem message i proponowanym adresatem target BHandler'a. Możesz zmienić zawartości komunikatów i zmienić lub nawet zastąpić handler'a. Jeśli zastępujesz handler'a, nowy handler musi należeć do tego samego looper'a tak samo jak początkowy. Nowy handler jest dany jako możliwość filtrowania komunikatu przed jego wysłaniem.
Zwracana wartość musi być jedną z tych dwóch wartości:
- B_DISPATCH_MESSAGE. Komunikat i handler są przekazane (przez wywołującego) do funkcji DispatchMessage() looper'a.
- B_SKIP_MESSAGE. Komunikat nie idzie dalej - jest on natychmiast odrzucany przez wywołującego.
Domyślna wersja tej funkcji zwraca wartość równą B_DISPATCH_MESSAGE.
Możliwe jest wywołanie Twojej funkcji Filter() samej (tj. poza mechanizmem przekazywania komunikatów), ale pamiętaj, że obowiazkiem wywołującego jest interpretowanie zwróconej wartości.
Zamiast implementować funkcję Filter() gdy konstruujesz obiekt możesz dostarczyć BMessageFilter z wywołaniem zwrotnym filter_hook. Jeśli wykonasz obie, filter_hook (a nie Filter()) będzie wywołane gdy obiekt jest pytany o sprawdzenie komunikatu.
![]() | FiltersAny patrz Command() |
![]() | Looper() |
BLooper *Looper(void) const Zwraca BLooper'a którego komunikaty ten obiekt filtrował lub NULL jeśli BMessageFilter nie został jeszcze przypisany do BHandler'a lub BLooper'a. Aby przyłączyć BMessageFilter do looper'a lub handler'a, użyj BLooper::AddCommonFilter() lub BHandler::AddFilter().
![]() | MessageDelivery(), MessageSource() |
message_delivery MessageDelivery(void) const message_source MessageSource(void) const Te funkcje zwracają stałe, ustawiane gdy obiekt BMessageFilter był skonstruowany, opisujące kategorie komunikatów, które mogą być filtrowane. MessageDelivery() zwraca stałą, która określa jak komunikat musi być dostarczony (B_DROPPED_DELIVERY, B_PROGRAMMED_DELIVERY lub B_ANY_DELIVERY). MessageSource() zwraca informację jak źródło komunikatu jest ograniczane (B_LOCAL_SOURCE, B_REMOTE_SOURCE lub B_ANY_SOURCE).
![]() | = (kopiowanie) |
BMessageFilter &operator=(const BMessageFilter&) Kopiuje kryteria filtrowania i wskaźnik filter_hook (jeśli jakiś jest) z prawej strony obiektu na lewą stronę obiektu.
![]() | filter_hook |
filter_result (*filter_hook)(BMessage *message,
BHandler **target,
BMessageFilter *messageFilter)filter_hook definiuje protokół dla funkcji filtrowania komunikatów. Dwa pierwsze argumenty są komunikatem message który będzie ograniczany i proponowany docelowy target BHandler . Możesz zmienić zawartość komunikatu i zmienić lub zastąpić handler'a. Jeśli zastępujesz handler'a, nowy handler musi należeć do tego samego looper'sa jak ten poprzedni. Nowy handler jest dany jako możliwość filtrowania komunikatu przed jego wysłaniem.
messageFilter jest wskaźnikiem do obiektu w imieniu którego ta funkcja jest wywoływana; nie musisz niszczyć tego obiektu. Tej samej funkcji filter_hook może używać więcej niż jeden BMessageFilter.
Zwracana wartość musi być jedną z tych dwóch wartości:
- B_DISPATCH_MESSAGE. Komunikat i handler sa przkazane (przez wywołującegor) do funkcji DispatchMessage() looper'a.
- B_SKIP_MESSAGE. Komunikat nie idzie dalej - jest on natychmiast odrzucany przez wywołującego.
Możliwe jest wywołanie Twojej funkcji fitrującej samej (tj. poza mechanizmem przekazywania komunikatów), ale pamiętaj, że obowiazkiem wywołującego jest interpretowanie zwróconej wartości.
Gdy konstruujesz BMessageFilter obiekt dostarcz go z funkcją przechwytującą filter_hook. Alternatywnie, możesz stworzyć podklasę BMessageFilter i dostarczyć implementację funkcji Filter(). Jeśli wykonasz obie, filter_hook (a nie Filter()) będzie wywołana gdy obiek jest pytany o sprawdzenie komunikatu.
![]() | message_source |
![]() | message_delivery |
![]() | filter_result |
|
Be
Book,
...w ślicznym HTML...
dla BeOS wydanie 5
Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.