Класс 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 соответственно. В противном случае добавляется новая запись.