Класс КдинамикчаинCDynamicChain Class

Этот класс предоставляет методы, поддерживающие динамическую цепочку сопоставлений сообщений.This class provides methods supporting the dynamic chaining of message maps.

Важно!

Этот класс и его члены не могут использоваться в приложениях, выполняемых в среда выполнения Windows.This class and its members cannot be used in applications that execute in the Windows Runtime.

СинтаксисSyntax

class CDynamicChain

ЧленыMembers

Открытые конструкторыPublic Constructors

nameName ОписаниеDescription
Кдинамикчаин:: КдинамикчаинCDynamicChain::CDynamicChain Конструктор.The constructor.
Кдинамикчаин:: ~ КдинамикчаинCDynamicChain::~CDynamicChain ДеструкторThe destructor.

Открытые методыPublic Methods

nameName ОписаниеDescription
Кдинамикчаин:: КаллчаинCDynamicChain::CallChain Направляет сообщение Windows в схему сообщений другого объекта.Directs a Windows message to another object's message map.
Кдинамикчаин:: РемовечаинентриCDynamicChain::RemoveChainEntry Удаляет запись схемы сообщений из коллекции.Removes a message map entry from the collection.
Кдинамикчаин:: СетчаинентриCDynamicChain::SetChainEntry Добавляет запись схемы сообщения в коллекцию или изменяет существующую запись.Adds a message map entry to the collection or modifies an existing entry.

КомментарииRemarks

CDynamicChain Управляет коллекцией схем сообщений, позволяя пересылать сообщения Windows во время выполнения в схему сообщений другого объекта.CDynamicChain manages a collection of message maps, enabling a Windows message to be directed, at run time, to another object's message map.

Чтобы добавить поддержку динамической цепочки схем сообщений, выполните следующие действия.To add support for dynamic chaining of message maps, do the following:

  • Создайте класс, производный от CDynamicChain .Derive your class from CDynamicChain. В схеме сообщений укажите макрос CHAIN_MSG_MAP_DYNAMIC , чтобы связать его с картой сообщений другого объекта по умолчанию.In the message map, specify the CHAIN_MSG_MAP_DYNAMIC macro to chain to another object's default message map.

  • Создайте производный класс от кмессажемапдля каждого класса, к которому необходимо создать цепочку.Derive every class you want to chain to from CMessageMap. CMessageMap позволяет объекту предоставлять свои карты сообщений другим объектам.CMessageMap allows an object to expose its message maps to other objects.

  • Вызовите метод CDynamicChain::SetChainEntry , чтобы выяснить, к какому объекту и какому сопоставлению следует привязать цепочку сообщений.Call CDynamicChain::SetChainEntry to identify which object and which message map you want to chain to.

Например, предположим, что ваш класс определен следующим образом:For example, suppose your class is defined as follows:

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;
   }
};

Затем клиент вызывает CMyWindow::SetChainEntry :The client then calls CMyWindow::SetChainEntry:

myCtl.SetChainEntry(1313, &chainedObj);

где chainedObj — это связанный объект, который является экземпляром класса, производного от CMessageMap .where chainedObj is the chained object and is an instance of a class derived from CMessageMap. Теперь, если myCtl получает сообщение, которое не обрабатывается OnPaint или OnSetFocus , то процедура окна направляет сообщение в chainedObj схему сообщений по умолчанию.Now, if myCtl receives a message that is not handled by OnPaint or OnSetFocus, the window procedure directs the message to chainedObj's default message map.

Дополнительные сведения о цепочке схем сообщений см. в разделе схемы сообщений статьи "классы окон ATL".For more information about message map chaining, see Message Maps in the article "ATL Window Classes."

ТребованияRequirements

Заголовок: atlwin. hHeader: atlwin.h

Кдинамикчаин:: КаллчаинCDynamicChain::CallChain

Направляет сообщение Windows в схему сообщений другого объекта.Directs the Windows message to another object's message map.

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

ПараметрыParameters

двчаинидdwChainID
окне Уникальный идентификатор, связанный с сцепленным объектом и его картой сообщений.[in] The unique identifier associated with the chained object and its message map.

hWndhWnd
окне Маркер окна, получающего сообщение.[in] The handle to the window receiving the message.

UiacpuMsg
окне Сообщение, отправленное в окно.[in] The message sent to the window.

wParamwParam
окне Дополнительные сведения, относящиеся к конкретному сообщению.[in] Additional message-specific information.

lParamlParam
окне Дополнительные сведения, относящиеся к конкретному сообщению.[in] Additional message-specific information.

lResultlResult
заполняет Результат обработки сообщения.[out] The result of the message processing.

Возвращаемое значениеReturn Value

Значение TRUE, если сообщение полностью обработано; в противном случае — значение FALSE.TRUE if the message is fully processed; otherwise, FALSE.

КомментарииRemarks

Для вызова процедуры окна CallChain необходимо указать макрос CHAIN_MSG_MAP_DYNAMIC в схеме сообщений.For the window procedure to invoke CallChain, you must specify the CHAIN_MSG_MAP_DYNAMIC macro in your message map. Пример см. в обзоре кдинамикчаин .For an example, see the CDynamicChain overview.

CallChain требуется предыдущий вызов сетчаинентри для связывания значения двчаинид с объектом и его картой сообщений.CallChain requires a previous call to SetChainEntry to associate the dwChainID value with an object and its message map.

Кдинамикчаин:: КдинамикчаинCDynamicChain::CDynamicChain

Конструктор.The constructor.

CDynamicChain();

Кдинамикчаин:: ~ КдинамикчаинCDynamicChain::~CDynamicChain

ДеструкторThe destructor.

~CDynamicChain();

КомментарииRemarks

Освобождает все выделенные ресурсы.Frees all allocated resources.

Кдинамикчаин:: РемовечаинентриCDynamicChain::RemoveChainEntry

Удаляет указанную схему сообщений из коллекции.Removes the specified message map from the collection.

BOOL RemoveChainEntry(DWORD dwChainID);

ПараметрыParameters

двчаинидdwChainID
окне Уникальный идентификатор, связанный с сцепленным объектом и его картой сообщений.[in] The unique identifier associated with the chained object and its message map. Первоначально это значение определяется с помощью вызова сетчаинентри.You originally define this value through a call to SetChainEntry.

Возвращаемое значениеReturn Value

Значение TRUE, если схема сообщения успешно удалена из коллекции.TRUE if the message map is successfully removed from the collection. В противном случае — значение FALSE.Otherwise, FALSE.

Кдинамикчаин:: СетчаинентриCDynamicChain::SetChainEntry

Добавляет указанную схему сообщения в коллекцию.Adds the specified message map to the collection.

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

ПараметрыParameters

двчаинидdwChainID
окне Уникальный идентификатор, связанный с сцепленным объектом и его картой сообщений.[in] The unique identifier associated with the chained object and its message map.

ОбъектpObject
окне Указатель на связанный объект, объявляющий схему сообщения.[in] A pointer to the chained object declaring the message map. Этот объект должен быть производным от кмессажемап.This object must derive from CMessageMap.

двмсгмапидdwMsgMapID
окне Идентификатор схемы сообщений в связанном объекте.[in] The identifier of the message map in the chained object. Значение по умолчанию — 0, которое определяет схему сообщений по умолчанию, объявленную с помощью BEGIN_MSG_MAP.The default value is 0, which identifies the default message map declared with BEGIN_MSG_MAP. Чтобы указать альтернативную схему сообщения, объявленную с помощью ALT_MSG_MAP (мсгмапид), передайте msgMapID .To specify an alternate message map declared with ALT_MSG_MAP(msgMapID), pass msgMapID.

Возвращаемое значениеReturn Value

Значение TRUE, если схема сообщения успешно добавлена в коллекцию.TRUE if the message map is successfully added to the collection. В противном случае — значение FALSE.Otherwise, FALSE.

КомментарииRemarks

Если значение двчаинид уже существует в коллекции, связанный объект и схема сообщения заменяются объект и двмсгмапид соответственно.If the dwChainID value already exists in the collection, its associated object and message map are replaced by pObject and dwMsgMapID, respectively. В противном случае добавляется новая запись.Otherwise, a new entry is added.

См. также разделSee also

Класс КвиндовимплCWindowImpl Class
Общие сведения о классахClass Overview