Udostępnij za pośrednictwem


Mapy komunikatów (ATL)

Mapa komunikatów kojarzy funkcję obsługi z określonym komunikatem, poleceniem lub powiadomieniem. Korzystając z makr mapy komunikatów ATL , można określić mapę komunikatów dla okna. Procedury okien w systemie CWindowImplCDialogImpli CContainedWindowT kierują komunikaty okna do mapy komunikatów.

Funkcje obsługi komunikatów akceptują dodatkowy argument typu BOOL&. Ten argument wskazuje, czy komunikat został przetworzony i jest domyślnie ustawiony na wartość TRUE. Funkcja obsługi może następnie ustawić argument na FALSE, aby wskazać, że nie obsługuje komunikatu. W takim przypadku usługa ATL będzie nadal szukać funkcji obsługi w dalszej części mapy komunikatów. Ustawiając ten argument na FAŁSZ, możesz najpierw wykonać jakąś akcję w odpowiedzi na komunikat, a następnie zezwolić na domyślne przetwarzanie lub inną funkcję obsługi, aby zakończyć obsługę komunikatu.

Mapy komunikatów łańcuchowych

AtL umożliwia również łączenie map komunikatów, które kierują obsługę komunikatów do mapy komunikatów zdefiniowanej w innej klasie. Na przykład można zaimplementować wspólną obsługę komunikatów w oddzielnej klasie, aby zapewnić jednolite zachowanie dla wszystkich łańcuchów okien do tej klasy. Możesz utworzyć łańcuch do klasy bazowej lub do składowej danych klasy.

Usługa ATL obsługuje również dynamiczne tworzenie łańcuchów, co umożliwia łączenie łańcuchów z mapą komunikatów innego obiektu w czasie wykonywania. Aby zaimplementować dynamiczne tworzenie łańcuchów, należy utworzyć klasę z CDynamicChain. Następnie zadeklaruj makro CHAIN_MSG_MAP_DYNAMIC na mapie komunikatów. CHAIN_MSG_MAP_DYNAMIC wymaga unikatowej liczby identyfikującej obiekt i mapę komunikatów, do której jest łańcuch. Tę unikatową wartość należy zdefiniować za pomocą wywołania metody CDynamicChain::SetChainEntry.

Możesz utworzyć łańcuch do dowolnej klasy, która deklaruje mapę komunikatów, pod warunkiem, że klasa pochodzi z CMessageMap. CMessageMap umożliwia obiektowi uwidocznienie mapowania komunikatów na inne obiekty. Należy pamiętać, że CWindowImpl już pochodzi z klasy CMessageMap.

Mapy komunikatu alternatywnego

Na koniec usługa ATL obsługuje mapy komunikatów alternatywnych zadeklarowane za pomocą makra ALT_MSG_MAP . Każda alternatywna mapa komunikatów jest identyfikowana przez unikatową liczbę przekazywaną do ALT_MSG_MAP. Korzystając z alternatywnych map komunikatów, można obsługiwać komunikaty wielu okien na jednej mapie. Należy pamiętać, CWindowImpl że domyślnie nie używa map komunikatów alternatywnych. Aby dodać tę obsługę, zastąp metodę WindowProc w CWindowImplklasie -pochodnej i wywołaj ProcessWindowMessage metodę za pomocą identyfikatora mapy komunikatów.

Zobacz też

Implementowanie okna