Поделиться через


Класс CDynamicChain

Этот класс предоставляет методы, поддерживающие динамическую цепочку карт сообщений.

Важно!

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.

Синтаксис

class CDynamicChain

Участники

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

Имя Описание
CDynamicChain::CDynamicChain Конструктор.
CDynamicChain::~CDynamicChain Деструктор

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

Имя Описание
CDynamicChain::CallChain Направляет сообщение Windows на карту сообщений другого объекта.
CDynamicChain::RemoveChainEntry Удаляет запись карты сообщений из коллекции.
CDynamicChain::SetChainEntry Добавляет запись карты сообщений в коллекцию или изменяет существующую запись.

Замечания

CDynamicChain управляет коллекцией карт сообщений, позволяя направлять сообщение Windows во время выполнения на карту сообщений другого объекта.

Чтобы добавить поддержку динамической цепочки карт сообщений, сделайте следующее:

  • Производный класс от CDynamicChain. В карте сообщений укажите макрос CHAIN_MSG_MAP_DYNAMIC для цепочки с картой сообщений по умолчанию другого объекта.

  • Наследуйте каждый класс, к которому требуется привязывать из CMessageMap. CMessageMap позволяет объекту предоставлять карты сообщений другим объектам.

  • Вызов, CDynamicChain::SetChainEntry чтобы определить объект и карту сообщений, к которой нужно приставить цепочку.

Например, предположим, что класс определен следующим образом:

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:

myCtl.SetChainEntry(1313, &chainedObj);

где chainedObj находится объект в цепочке и является экземпляром класса, производным от CMessageMap. Теперь, если myCtl получает сообщение, которое не обрабатывается OnPaint или OnSetFocusпроцедура окна направляет сообщение на chainedObjкарту сообщений по умолчанию.

Дополнительные сведения о цепочке карт сообщений Карты см. в статье "Классы окон ATL".

Требования

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

CDynamicChain::CallChain

Направляет сообщение Windows на карту сообщений другого объекта.

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

Параметры

dwChainID
[in] Уникальный идентификатор, связанный с цепочкой объекта и его картой сообщений.

hWnd
[in] Дескриптор окна, получающего сообщение.

uMsg
[in] Сообщение, отправленное в окно.

wParam
[in] Дополнительные сведения о сообщении.

lParam
[in] Дополнительные сведения о сообщении.

lResult
[out] Результат обработки сообщения.

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

ЗНАЧЕНИЕ TRUE, если сообщение полностью обработано; в противном случае — ЗНАЧЕНИЕ FALSE.

Замечания

Для вызова CallChainпроцедуры окна необходимо указать макрос CHAIN_MSG_MAP_DYNAMIC в карте сообщений. Пример см. в обзоре CDynamicChain .

CallChain Требуется предыдущий вызов SetChainEntry для связывания значения dwChainID с объектом и картой сообщений.

CDynamicChain::CDynamicChain

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

CDynamicChain();

CDynamicChain::~CDynamicChain

Деструктор

~CDynamicChain();

Замечания

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

CDynamicChain::RemoveChainEntry

Удаляет указанную карту сообщений из коллекции.

BOOL RemoveChainEntry(DWORD dwChainID);

Параметры

dwChainID
[in] Уникальный идентификатор, связанный с цепочкой объекта и его картой сообщений. Изначально это значение определяется с помощью вызова SetChainEntry.

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

Значение TRUE, если карта сообщений успешно удалена из коллекции. В противном случае — значение FALSE.

CDynamicChain::SetChainEntry

Добавляет в коллекцию указанную карту сообщений.

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

Параметры

dwChainID
[in] Уникальный идентификатор, связанный с цепочкой объекта и его картой сообщений.

pObject
[in] Указатель на объект в цепочке, объявляющий карту сообщений. Этот объект должен быть производным от CMessageMap.

dwMsgMapID
[in] Идентификатор карты сообщений в цепочке объекта. Значение по умолчанию равно 0, которое определяет карту сообщений по умолчанию, объявленную BEGIN_MSG_MAP. Чтобы указать альтернативную карту сообщений, объявленную с помощью ALT_MSG_MAP(msgMapID), передайте msgMapID.

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

Значение TRUE, если карта сообщений успешно добавлена в коллекцию. В противном случае — значение FALSE.

Замечания

Если значение dwChainID уже существует в коллекции, его связанный объект и карта сообщений заменяются pObject и dwMsgMapID соответственно. В противном случае добавляется новая запись.

См. также

Класс CWindowImpl
Общие сведения о классе