Udostępnij za pośrednictwem


Klasa CDynamicChain

Ta klasa udostępnia metody obsługujące dynamiczne tworzenie łańcuchów map komunikatów.

Ważne

Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.

Składnia

class CDynamicChain

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CDynamicChain::CDynamicChain Konstruktor.
CDynamicChain::~CDynamicChain Destruktora.

Metody publiczne

Nazwa/nazwisko opis
CDynamicChain::CallChain Kieruje komunikat systemu Windows do mapy komunikatów innego obiektu.
CDynamicChain::RemoveChainEntry Usuwa wpis mapy komunikatów z kolekcji.
CDynamicChain::SetChainEntry Dodaje wpis mapy komunikatów do kolekcji lub modyfikuje istniejący wpis.

Uwagi

CDynamicChain zarządza kolekcją map komunikatów, umożliwiając przekierowanie komunikatu systemu Windows w czasie wykonywania do mapy komunikatów innego obiektu.

Aby dodać obsługę dynamicznego tworzenia łańcuchów map komunikatów, wykonaj następujące czynności:

  • Utwórz klasę na podstawie CDynamicChainklasy . Na mapie komunikatów określ makro CHAIN_MSG_MAP_DYNAMIC , aby połączyć łańcuch z domyślną mapą komunikatów innego obiektu.

  • Utwórz każdą klasę, do której chcesz utworzyć łańcuch z obiektu CMessageMap. CMessageMap umożliwia obiektowi uwidocznienie mapowania komunikatów na inne obiekty.

  • Wywołaj metodę CDynamicChain::SetChainEntry w celu zidentyfikowania obiektu i mapowania komunikatów, do których chcesz utworzyć łańcuch.

Załóżmy na przykład, że klasa jest zdefiniowana w następujący sposób:

class CMyChainWnd : public CWindowImpl<CMyChainWnd>,
   public CDynamicChain
{
public:
   CMyChainWnd() {}

   BEGIN_MSG_MAP(CMyChainWnd)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      // dynamically chain to the default
      // message map in another object
      CHAIN_MSG_MAP_DYNAMIC(1313)
                // '1313' identifies the object
                // and the message map that will be
                // chained to. '1313' is defined
                // through the SetChainEntry method
   END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some painting code
      return 0;
   }

   LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   { 
      return 0;
   }
};

Następnie klient wywołuje polecenie CMyWindow::SetChainEntry:

myCtl.SetChainEntry(1313, &chainedObj);

gdzie chainedObj jest obiektem łańcuchowym i jest wystąpieniem klasy pochodzącej z CMessageMapklasy . myCtl Jeśli teraz otrzyma komunikat, który nie jest obsługiwany przez OnPaint program lub OnSetFocus, procedura okna przekierowuje komunikat do chainedObjdomyślnej mapy komunikatów.

Aby uzyskać więcej informacji na temat tworzenia łańcuchów map komunikatów, zobacz Mapy komunikatów w artykule "Klasy okien ATL".

Wymagania

Nagłówek: atlwin.h

CDynamicChain::CallChain

Kieruje komunikat systemu Windows do mapy komunikatów innego obiektu.

BOOL CallChain(
    DWORD dwChainID,
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT& lResult);

Parametry

dwChainID
[in] Unikatowy identyfikator skojarzony z obiektem łańcuchowym i mapą komunikatów.

hWnd
[in] Uchwyt do okna odbierającego komunikat.

uMsg
[in] Wiadomość wysłana do okna.

wParam
[in] Dodatkowe informacje specyficzne dla komunikatów.

lParam
[in] Dodatkowe informacje specyficzne dla komunikatów.

lResult
[out] Wynik przetwarzania komunikatów.

Wartość zwracana

WARTOŚĆ TRUE, jeśli komunikat jest w pełni przetwarzany; w przeciwnym razie, FAŁSZ.

Uwagi

Aby procedura okna wywoływana CallChainprzez program , należy określić makro CHAIN_MSG_MAP_DYNAMIC na mapie komunikatów. Aby zapoznać się z przykładem, zobacz omówienie narzędzia CDynamicChain .

CallChain wymaga poprzedniego wywołania polecenia SetChainEntry w celu skojarzenia wartości dwChainID z obiektem i mapą komunikatów.

CDynamicChain::CDynamicChain

Konstruktor.

CDynamicChain();

CDynamicChain::~CDynamicChain

Destruktora.

~CDynamicChain();

Uwagi

Zwalnia wszystkie przydzielone zasoby.

CDynamicChain::RemoveChainEntry

Usuwa mapę określonego komunikatu z kolekcji.

BOOL RemoveChainEntry(DWORD dwChainID);

Parametry

dwChainID
[in] Unikatowy identyfikator skojarzony z obiektem łańcuchowym i mapą komunikatów. Ta wartość została pierwotnie zdefiniowana za pomocą wywołania metody SetChainEntry.

Wartość zwracana

Wartość TRUE, jeśli mapa komunikatów została pomyślnie usunięta z kolekcji. W przeciwnym razie zwraca wartość FALSE.

CDynamicChain::SetChainEntry

Dodaje mapę określonego komunikatu do kolekcji.

BOOL SetChainEntry(
    DWORD dwChainID,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

Parametry

dwChainID
[in] Unikatowy identyfikator skojarzony z obiektem łańcuchowym i mapą komunikatów.

pObject
[in] Wskaźnik do obiektu łańcuchowego deklarujący mapę komunikatów. Ten obiekt musi pochodzić z obiektu CMessageMap.

dwMsgMapID
[in] Identyfikator mapy komunikatów w obiekcie łańcuchowym. Wartość domyślna to 0, która identyfikuje domyślną mapę komunikatów zadeklarowaną za pomocą BEGIN_MSG_MAP. Aby określić alternatywną mapę komunikatów zadeklarowaną za pomocą ALT_MSG_MAP(msgMapID),przekaż .msgMapID

Wartość zwracana

Wartość TRUE, jeśli mapa komunikatów została pomyślnie dodana do kolekcji. W przeciwnym razie zwraca wartość FALSE.

Uwagi

Jeśli wartość dwChainID już istnieje w kolekcji, skojarzony z nią obiekt i mapa komunikatów są zastępowane odpowiednio przez pObject i dwMsgMapID. W przeciwnym razie zostanie dodany nowy wpis.

Zobacz też

Klasa CWindowImpl
Omówienie klasy