Partilhar via


Macros de mapa de mensagem (ATL)

Essas macros definem mapas de mensagens e entradas.

Nome Descrição
ALT_MSG_MAP Marca o início de um mapa de mensagens alternativo.
BEGIN_MSG_MAP Marca o início do mapa de mensagens padrão.
CHAIN_MSG_MAP_ALT Encadeia um mapa de mensagens alternativo na classe base.
CHAIN_MSG_MAP_ALT_MEMBER Encadeia um mapa de mensagens alternativo em um membro de dados da classe.
CHAIN_MSG_MAP Encadeia o mapa de mensagens padrão na classe base.
CHAIN_MSG_MAP_DYNAMIC Encadeia o mapa de mensagens em outra classe em tempo de execução.
CHAIN_MSG_MAP_MEMBER Encadeia o mapa de mensagens padrão em um membro de dados da classe.
COMMAND_CODE_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no código de notificação.
COMMAND_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no código de notificação e no identificador do item de menu, controle ou acelerador.
COMMAND_ID_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no identificador do item de menu, controle ou acelerador.
COMMAND_RANGE_CODE_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no código de notificação e em um intervalo contíguo de identificadores de controle.
COMMAND_RANGE_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base em um intervalo contíguo de identificadores de controle.
DECLARE_EMPTY_MSG_MAP Implementa um mapa de mensagens vazio.
DEFAULT_REFLECTION_HANDLER Fornece um manipulador padrão para mensagens refletidas que não são tratadas de outra forma.
END_MSG_MAP Marca o final de um mapa de mensagem.
FORWARD_NOTIFICATIONS Encaminha mensagens de notificação para a janela pai.
MESSAGE_HANDLER Mapeia uma mensagem do Windows para uma função de manipulador.
MESSAGE_RANGE_HANDLER Mapeia um intervalo contíguo de mensagens do Windows para uma função de manipulador.
NOTIFY_CODE_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no código de notificação.
NOTIFY_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no código de notificação e no identificador de controle.
NOTIFY_ID_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no identificador de controle.
NOTIFY_RANGE_CODE_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no código de notificação e em um intervalo contíguo de identificadores de controle.
NOTIFY_RANGE_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base em um intervalo contíguo de identificadores de controle.
REFLECT_NOTIFICATIONS Reflete as mensagens de notificação de volta à janela que as enviou.
REFLECTED_COMMAND_CODE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no código de notificação.
REFLECTED_COMMAND_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no código de notificação e no identificador do item de menu, controle ou acelerador.
REFLECTED_COMMAND_ID_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no identificador do item de menu, controle ou acelerador.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no código de notificação e em um intervalo contíguo de identificadores de controle.
REFLECTED_COMMAND_RANGE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base em um intervalo contíguo de identificadores de controle.
REFLECTED_NOTIFY_CODE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no código de notificação.
REFLECTED_NOTIFY_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no código de notificação e no identificador de controle.
REFLECTED_NOTIFY_ID_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no identificador de controle.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no código de notificação e em um intervalo contíguo de identificadores de controle.
REFLECTED_NOTIFY_RANGE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base em um intervalo contíguo de identificadores de controle.

Requisitos

Cabeçalho: atlwin.h

ALT_MSG_MAP

Marca o início de um mapa de mensagens alternativo.

ALT_MSG_MAP(msgMapID)

Parâmetros

msgMapID
[in] O identificador do mapa de mensagem.

Comentários

A ATL identifica cada mapa de mensagens por um número. O mapa de mensagens padrão (declarado com a macro BEGIN_MSG_MAP) é identificado por 0. Um mapa de mensagens alternativo é identificado por msgMapID.

Mapas de mensagens são usados para processar mensagens enviadas para uma janela. Por exemplo, CContainedWindow permite especificar o identificador de um mapa de mensagem no objeto que contém. CContainedWindow::WindowProc usa esse mapa de mensagens para direcionar as mensagens da janela contida para a função de manipulador apropriada ou para outro mapa de mensagem. Para obter uma lista de macros que declaram funções de manipulador, consulte BEGIN_MSG_MAP.

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativos subsequentes.

A macro END_MSG_MAP marca o final do mapa da mensagem. Observe que há sempre exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Exemplo

O exemplo a seguir mostra o mapa de mensagens padrão e um mapa de mensagem alternativo, cada um contendo uma função de manipulador:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

O exemplo a seguir mostra dois mapas de mensagens alternativos. O mapa de mensagem padrão está vazio.

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

Requisitos

Cabeçalho: atlwin.h

BEGIN_MSG_MAP

Marca o início do mapa de mensagens padrão.

BEGIN_MSG_MAP(theClass)

Parâmetros

theClass
[in] O nome da classe que contém o mapa da mensagem.

Comentários

CWindowImpl::WindowProc usa o mapa de mensagem padrão para processar mensagens enviadas para a janela. O mapa da mensagem direciona as mensagens para a função de manipulador apropriada ou para outro mapa de mensagens.

As macros a seguir mapeiam uma mensagem para uma função de manipulador. Essa função deve ser definida no TheClass.

Macro Descrição
MESSAGE_HANDLER Mapeia uma mensagem do Windows para uma função de manipulador.
MESSAGE_RANGE_HANDLER Mapeia um intervalo contíguo de mensagens do Windows para uma função de manipulador.
COMMAND_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no código de notificação e no identificador do item de menu, controle ou acelerador.
COMMAND_ID_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no identificador do item de menu, controle ou acelerador.
COMMAND_CODE_HANDLER Mapeia uma mensagem WM_COMMAND para uma função de manipulador, com base no código de notificação.
COMMAND_RANGE_HANDLER Mapeia um intervalo contíguo de mensagens WM_COMMAND para uma função de manipulador, com base no identificador do item de menu, controle ou acelerador.
NOTIFY_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no código de notificação e no identificador de controle.
NOTIFY_ID_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no identificador de controle.
NOTIFY_CODE_HANDLER Mapeia uma mensagem WM_NOTIFY para uma função de manipulador, com base no código de notificação.
NOTIFY_RANGE_HANDLER Mapeia um intervalo contíguo de mensagens WM_NOTIFY para uma função de manipulador, com base no identificador de controle.

As macros a seguir direcionam mensagens para outro mapa de mensagens. Esse processo é chamado de "encadeamento".

Macro Descrição
CHAIN_MSG_MAP Encadeia o mapa de mensagens padrão na classe base.
CHAIN_MSG_MAP_MEMBER Encadeia o mapa de mensagens padrão em um membro de dados da classe.
CHAIN_MSG_MAP_ALT Encadeia um mapa de mensagens alternativo na classe base.
CHAIN_MSG_MAP_ALT_MEMBER Encadeia um mapa de mensagens alternativo em um membro de dados da classe.
CHAIN_MSG_MAP_DYNAMIC Encadeia o mapa de mensagens padrão em outra classe em tempo de execução.

As macros a seguir direcionam mensagens "refletidas" da janela pai. Por exemplo, um controle normalmente envia mensagens de notificação para sua janela pai para processamento, mas a janela pai pode refletir a mensagem de volta ao controle.

Macro Descrição
REFLECTED_COMMAND_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no código de notificação e no identificador do item de menu, controle ou acelerador.
REFLECTED_COMMAND_ID_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no identificador do item de menu, controle ou acelerador.
REFLECTED_COMMAND_CODE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no código de notificação.
REFLECTED_COMMAND_RANGE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base em um intervalo contíguo de identificadores de controle.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função de manipulador, com base no código de notificação e em um intervalo contíguo de identificadores de controle.
REFLECTED_NOTIFY_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no código de notificação e no identificador de controle.
REFLECTED_NOTIFY_ID_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no identificador de controle.
REFLECTED_NOTIFY_CODE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no código de notificação.
REFLECTED_NOTIFY_RANGE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base em um intervalo contíguo de identificadores de controle.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função de manipulador, com base no código de notificação e em um intervalo contíguo de identificadores de controle.

Exemplo

class CMyExtWindow : public CMyBaseWindow
{
public:
   BEGIN_MSG_MAP(CMyExtWindow)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      CHAIN_MSG_MAP(CMyBaseWindow)
   END_MSG_MAP()

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

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

Quando um objeto CMyExtWindow recebe uma mensagem WM_PAINT, a mensagem é direcionada para CMyExtWindow::OnPaint para o processamento real. Se OnPaint indicar que a mensagem requer processamento adicional, a mensagem será direcionada para o mapa de mensagens padrão em CMyBaseWindow.

Além do mapa de mensagens padrão, você pode definir um mapa de mensagens alternativo com ALT_MSG_MAP. Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativos subsequentes. O exemplo a seguir mostra o mapa de mensagens padrão e um mapa de mensagem alternativo, cada um contendo uma função de manipulador:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

O exemplo a seguir mostra dois mapas de mensagens alternativos. O mapa de mensagem padrão está vazio.

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

A macro END_MSG_MAP marca o final do mapa da mensagem. Observe que há sempre exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Requisitos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_ALT

Define uma entrada em um mapa de mensagens.

CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)

Parâmetros

theChainClass
[in] O nome da classe base que contém o mapa da mensagem.

msgMapID
[in] O identificador do mapa de mensagem.

Comentários

CHAIN_MSG_MAP_ALT direciona mensagens para um mapa de mensagem alternativo em uma classe base. Você deve ter declarado esse mapa de mensagens alternativo com ALT_MSG_MAP(msgMapID). Para direcionar mensagens para o mapa de mensagens padrão de uma classe base (declarado com BEGIN_MSG_MAP), use CHAIN_MSG_MAP. Para ver um exemplo, consulte CHAIN_MSG_MAP.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Requisitos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_ALT_MEMBER

Define uma entrada em um mapa de mensagens.

CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)

Parâmetros

theChainMember
[in] O nome do membro de dados que contém o mapa da mensagem.

msgMapID
[in] O identificador do mapa de mensagem.

Comentários

CHAIN_MSG_MAP_ALT_MEMBER direciona mensagens para um mapa de mensagem alternativo em um membro de dados. Você deve ter declarado esse mapa de mensagens alternativo com ALT_MSG_MAP(msgMapID). Para direcionar mensagens para o mapa de mensagens padrão de um membro de dados (declarado com BEGIN_MSG_MAP), use CHAIN_MSG_MAP_MEMBER. Para ver um exemplo, consulte CHAIN_MSG_MAP_MEMBER.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Requisitos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP

Define uma entrada em um mapa de mensagens.

CHAIN_MSG_MAP(theChainClass)

Parâmetros

theChainClass
[in] O nome da classe base que contém o mapa da mensagem.

Comentários

CHAIN_MSG_MAP direciona mensagens para o mapa de mensagens padrão de uma classe base (declarado com BEGIN_MSG_MAP). Para direcionar mensagens para o mapa de mensagens alternativo de uma classe base (declarado com ALT_MSG_MAP), use CHAIN_MSG_MAP_ALT.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Exemplo

class CMyExtClass : public CMyBaseClass
{
public:
  BEGIN_MSG_MAP(CMyExtClass)
     MESSAGE_HANDLER(WM_PAINT, OnPaint)
     // chain to default message map in CMyBaseClass
     CHAIN_MSG_MAP(CMyBaseClass)
  ALT_MSG_MAP(1)
     // chain to first alternative message map in CMyBaseClass
     CHAIN_MSG_MAP(CMyBaseClass)
  ALT_MSG_MAP(2)
     MESSAGE_HANDLER(WM_CHAR, OnChar)
     // chain to alternate message map in CMyBaseClass
     CHAIN_MSG_MAP_ALT(CMyBaseClass, 1)
  END_MSG_MAP()

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

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

Este exemplo ilustra o seguinte:

  • Se um procedimento de janela estiver usando o mapa de mensagens padrão de CMyClass e OnPaint não manipular uma mensagem, a mensagem será direcionada para o mapa de mensagens padrão de CMyBaseClass para processamento.

  • Se um procedimento de janela estiver usando o primeiro mapa de mensagens alternativo em CMyClass, todas as mensagens serão direcionadas para o mapa de mensagens padrão de CMyBaseClass.

  • Se um procedimento de janela estiver usando o segundo mapa de mensagens de CMyClass alternativo e OnChar não manipular uma mensagem, a mensagem será direcionada para o mapa de mensagens alternativo especificado em CMyBaseClass. CMyBaseClass deve ter declarado este mapa de mensagens com ALT_MSG_MAP(1).

Requisitos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_DYNAMIC

Define uma entrada em um mapa de mensagens.

CHAIN_MSG_MAP_DYNAMIC(dynaChainID)

Parâmetros

dynaChainID
[in] O identificador exclusivo do mapa de mensagens de um objeto.

Comentários

CHAIN_MSG_MAP_DYNAMIC direciona mensagens, em tempo de execução, para o mapa de mensagem padrão em outro objeto. O objeto e seu mapa de mensagem estão associados a dynaChainID, que você define por meio de CDynamicChain::SetChainEntry. Você deve derivar sua classe de CDynamicChain para usar CHAIN_MSG_MAP_DYNAMIC. Para obter um exemplo, confira a visão geral de CDynamicChain.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Requisitos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_MEMBER

Define uma entrada em um mapa de mensagens.

CHAIN_MSG_MAP_MEMBER(theChainMember)

Parâmetros

theChainMember
[in] O nome do membro de dados que contém o mapa da mensagem.

Comentários

CHAIN_MSG_MAP_MEMBER direciona mensagens para o mapa de mensagens padrão de um membro de dados (declarado com BEGIN_MSG_MAP). Para direcionar mensagens para o mapa de mensagens alternativo de um membro de dados (declarado com ALT_MSG_MAP), use CHAIN_MSG_MAP_ALT.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Exemplo

class CMyContainerClass : public CWindowImpl<CMyContainerClass>
{
public:
   CMyContainedClass m_obj;

   BEGIN_MSG_MAP(CMyContainerClass)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      // chain to default message map of m_obj
      CHAIN_MSG_MAP_MEMBER(m_obj)
   ALT_MSG_MAP(1)
      // chain to default message map of m_obj
      CHAIN_MSG_MAP_MEMBER(m_obj)
   ALT_MSG_MAP(2)
      MESSAGE_HANDLER(WM_CHAR, OnChar)
      // chain to alternate message map of m_obj
      CHAIN_MSG_MAP_ALT_MEMBER(m_obj, 1)
   END_MSG_MAP()

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

Este exemplo ilustra o seguinte:

  • Se um procedimento de janela estiver usando o mapa de mensagens padrão de CMyClass e OnPaint não manipular uma mensagem, a mensagem será direcionada para o mapa de mensagens padrão de m_obj para processamento.

  • Se um procedimento de janela estiver usando o primeiro mapa de mensagens alternativo em CMyClass, todas as mensagens serão direcionadas para o mapa de mensagens padrão de m_obj.

  • Se um procedimento de janela estiver usando o segundo mapa de mensagens de CMyClass alternativo e OnChar não manipular uma mensagem, a mensagem será direcionada para o mapa de mensagens alternativo especificado de m_obj. A classe CMyContainedClass deve ter declarado este mapa de mensagens com ALT_MSG_MAP(1).

Requisitos

Cabeçalho: atlwin.h

COMMAND_CODE_HANDLER

Semelhante a COMMAND_HANDLER, mas mapeia uma mensagem WM_COMMAND com base apenas no código de notificação.

COMMAND_CODE_HANDLER(code, func)

Parâmetros

code
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

COMMAND_HANDLER

Define uma entrada em um mapa de mensagens.

COMMAND_HANDLER(id, code, func)

Parâmetros

id
[in] O identificador do item de menu, controle ou acelerador.

code
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Comentários

COMMAND_HANDLER mapeia uma mensagem WM_COMMAND para a função de manipulador especificada, com base no código de notificação e no identificador de controle. Por exemplo:

class ATL_NO_VTABLE CPolyProp :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CPolyProp, &CLSID_PolyProp>,
   public IPropertyPageImpl<CPolyProp>,
   public CDialogImpl<CPolyProp>
{
public:
BEGIN_COM_MAP(CPolyProp)
   COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()

BEGIN_MSG_MAP(CPolyProp)
   COMMAND_HANDLER(IDC_SIDES, EN_CHANGE, OnEnChangeSides)
   CHAIN_MSG_MAP(IPropertyPageImpl<CPolyProp>)
END_MSG_MAP()

   // When a CPolyProp object receives a WM_COMMAND message identified 
   // by IDC_SIDES and EN_CHANGE, the message is directed to 
   // CPolyProp::OnEnChangeSides for the actual processing.
   LRESULT OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, 
      BOOL& /*bHandled*/);

Qualquer função especificada em uma macro COMMAND_HANDLER deve ser definida da seguinte maneira:

LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);

O mapa da mensagem define bHandled como TRUE antes de CommandHandler ser chamado. Se CommandHandler não manipular totalmente a mensagem, ela deverá definir bHandled como FALSE para indicar que a mensagem precisa de processamento adicional.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Além de COMMAND_HANDLER, você pode usar MESSAGE_HANDLER para mapear uma mensagem de WM_COMMAND sem considerar um identificador ou código. Nesse caso, MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) direcionará todas as mensagens WM_COMMAND para OnHandlerFunction.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Requisitos

Cabeçalho: atlwin.h

COMMAND_ID_HANDLER

Semelhante a COMMAND_HANDLER, mas mapeia uma mensagem WM_COMMAND com base apenas no identificador do item de menu, controle ou acelerador.

COMMAND_ID_HANDLER(id, func)

Parâmetros

id
[in] O identificador do item de menu, controle ou acelerador que envia a mensagem.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

COMMAND_RANGE_CODE_HANDLER

Semelhante a COMMAND_RANGE_HANDLER, mas mapeia mensagens WM_COMMAND com um código de notificação específico de um intervalo de controles para uma única função de manipulador.

COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

code
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Comentários

Esse intervalo é baseado no identificador do item de menu, controle ou acelerador que envia a mensagem.

Requisitos

Cabeçalho: atlwin.h

COMMAND_RANGE_HANDLER

Semelhante a COMMAND_HANDLER, mas mapeia mensagens WM_COMMAND de um intervalo de controles para uma única função de manipulador.

COMMAND_RANGE_HANDLER( idFirst, idLast, func)

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

func
[in] O nome da função de manipulador de mensagens.

Comentários

Esse intervalo é baseado no identificador do item de menu, controle ou acelerador que envia a mensagem.

Requisitos

Cabeçalho: atlwin.h

DECLARE_EMPTY_MSG_MAP

Declara um mapa de mensagem vazio.

DECLARE_EMPTY_MSG_MAP()

Comentários

DECLARE_EMPTY_MSG_MAP é uma macro de conveniência que chama as macros BEGIN_MSG_MAP e END_MSG_MAP para criar um mapa de mensagens vazio:

BEGIN_MSG_MAP(CExample)
END_MSG_MAP()

DEFAULT_REFLECTION_HANDLER

Fornece um manipulador padrão para a janela filho (controle) que receberá mensagens refletidas; o manipulador passará corretamente mensagens sem tratamento para DefWindowProc.

DEFAULT_REFLECTION_HANDLER()

Requisitos

Cabeçalho: atlwin.h

END_MSG_MAP

Marca o final de um mapa de mensagem.

END_MSG_MAP()

Comentários

Sempre use a macro BEGIN_MSG_MAP para marcar o início de um mapa de mensagens. Use ALT_MSG_MAP para declarar mapas de mensagens alternativos subsequentes.

Observe que há sempre exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Exemplo

O exemplo a seguir mostra o mapa de mensagens padrão e um mapa de mensagem alternativo, cada um contendo uma função de manipulador:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

O exemplo a seguir mostra dois mapas de mensagens alternativos. O mapa de mensagem padrão está vazio.

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

Requisitos

Cabeçalho: atlwin.h

FORWARD_NOTIFICATIONS

Encaminha mensagens de notificação para a janela pai.

FORWARD_NOTIFICATIONS()

Comentários

Especifique essa macro como parte do mapa da mensagem.

Requisitos

Cabeçalho: atlwin.h

MESSAGE_HANDLER

Define uma entrada em um mapa de mensagens.

MESSAGE_HANDLER( msg, func )

Parâmetros

msg
[in] A mensagem do Windows.

func
[in] O nome da função de manipulador de mensagens.

Comentários

MESSAGE_HANDLER mapeia uma mensagem do Windows para a função de manipulador especificada.

Qualquer função especificada em uma macro MESSAGE_HANDLER deve ser definida da seguinte maneira:

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

O mapa da mensagem define bHandled como TRUE antes de MessageHandler ser chamado. Se MessageHandler não manipular totalmente a mensagem, ela deverá definir bHandled como FALSE para indicar que a mensagem precisa de processamento adicional.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Além de MESSAGE_HANDLER, você pode usar COMMAND_HANDLER e NOTIFY_HANDLER para mapear mensagens WM_COMMAND e WM_NOTIFY, respectivamente.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Exemplo

class CMyBaseWindow : public CWindowImpl<CMyBaseWindow>
{
public:
   BEGIN_MSG_MAP(CMyBaseWindow)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
   END_MSG_MAP()

   // When a CMyBaseWindow object receives a WM_CREATE message, the message
   // is directed to CMyBaseWindow::OnCreate for the actual processing.
   LRESULT OnCreate(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }
};

Requisitos

Cabeçalho: atlwin.h

MESSAGE_RANGE_HANDLER

Semelhante a MESSAGE_HANDLER, mas mapeia um intervalo de mensagens do Windows para uma única função de manipulador.

MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )

Parâmetros

msgFirst
[in] Marca o início de um intervalo contíguo de mensagens.

msgLast
[in] Marca o fim de um intervalo contíguo de mensagens.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

NOTIFY_CODE_HANDLER

Semelhante a NOTIFY_HANDLER, mas mapeia uma mensagem WM_NOTIFY com base apenas no código de notificação.

NOTIFY_CODE_HANDLER(cd, func)

Parâmetros

cd
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

NOTIFY_HANDLER

Define uma entrada em um mapa de mensagens.

NOTIFY_HANDLER( id, cd, func )

Parâmetros

id
[in] O identificador do controle que envia a mensagem.

cd
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Comentários

NOTIFY_HANDLER mapeia uma mensagem WM_NOTIFY para a função de manipulador especificada, com base no código de notificação e no identificador de controle.

Qualquer função especificada em uma macro NOTIFY_HANDLER deve ser definida da seguinte maneira:

LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

O mapa da mensagem define bHandled como TRUE antes de NotifyHandler ser chamado. Se NotifyHandler não manipular totalmente a mensagem, ela deverá definir bHandled como FALSE para indicar que a mensagem precisa de processamento adicional.

Observação

Sempre comece um mapa de mensagens com BEGIN_MSG_MAP. Em seguida, você pode declarar mapas de mensagens alternativas subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o final do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Além de NOTIFY_HANDLER, você pode usar MESSAGE_HANDLER para mapear uma mensagem de WM_NOTIFY sem considerar um identificador ou código. Nesse caso, MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction) direcionará todas as mensagens WM_NOTIFY para OnHandlerFunction.

Para obter mais informações sobre como usar mapas de mensagens na ATL, consulte Mapas de Mensagens.

Exemplo

class CMyDialog2 : public CDialogImpl<CMyDialog2>
{
public:
   enum { IDD = IDD_MYDLG };

   BEGIN_MSG_MAP(CMyDialog2)
      NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
   END_MSG_MAP()

public:
   // When a CMyDialog2 object receives a WM_NOTIFY message 
   // identified by IDC_TREE1 and NM_CLICK, the message is 
   // directed to CMyDialog2::OnNMClickTree1 for the actual
   // processing.
   LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
};

Requisitos

Cabeçalho: atlwin.h

NOTIFY_ID_HANDLER

Semelhante a NOTIFY_HANDLER, mas mapeia uma mensagem WM_NOTIFY com base apenas no identificador de controle.

NOTIFY_ID_HANDLER( id, func )

Parâmetros

id
[in] O identificador do controle que envia a mensagem.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

NOTIFY_RANGE_CODE_HANDLER

Semelhante a NOTIFY_RANGE_HANDLER, mas mapeia mensagens WM_NOTIFY com um código de notificação específico de um intervalo de controles para uma única função de manipulador.

NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

cd
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Comentários

Esse intervalo é baseado no identificador do controle que envia a mensagem.

Requisitos

Cabeçalho: atlwin.h

NOTIFY_RANGE_HANDLER

Semelhante a NOTIFY_HANDLER, mas mapeia mensagens WM_NOTIFY de um intervalo de controles para uma única função de manipulador.

NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

func
[in] O nome da função de manipulador de mensagens.

Comentários

Esse intervalo é baseado no identificador do controle que envia a mensagem.

Requisitos

Cabeçalho: atlwin.h

REFLECT_NOTIFICATIONS

Reflete as mensagens de notificação de volta para a janela filho (controle) que as enviou.

REFLECT_NOTIFICATIONS()

Comentários

Especifique essa macro como parte do mapa de mensagens da janela pai.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_CODE_HANDLER

Semelhante a COMMAND_CODE_HANDLER, mas mapeia comandos refletidos da janela pai.

REFLECTED_COMMAND_CODE_HANDLER( code, func )

Parâmetros

code
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_HANDLER

Semelhante a COMMAND_HANDLER, mas mapeia comandos refletidos da janela pai.

REFLECTED_COMMAND_HANDLER( id, code, func )

Parâmetros

id
[in] O identificador do item de menu, controle ou acelerador.

code
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_ID_HANDLER

Semelhante a COMMAND_ID_HANDLER, mas mapeia comandos refletidos da janela pai.

REFLECTED_COMMAND_ID_HANDLER( id, func )

Parâmetros

id
[in] O identificador do item de menu, controle ou acelerador.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_RANGE_CODE_HANDLER

Semelhante a COMMAND_RANGE_CODE_HANDLER, mas mapeia comandos refletidos da janela pai.

REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

code
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_RANGE_HANDLER

Semelhante a COMMAND_RANGE_HANDLER, mas mapeia comandos refletidos da janela pai.

REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_CODE_HANDLER

Semelhante a NOTIFY_CODE_HANDLER, mas mapeia as notificações refletidas da janela pai.

REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )

Parâmetros

cd
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_HANDLER

Semelhante a NOTIFY_HANDLER, mas mapeia as notificações refletidas da janela pai.

REFLECTED_NOTIFY_HANDLER( id, cd, func )

Parâmetros

id
[in] O identificador do item de menu, controle ou acelerador.

cd
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_ID_HANDLER

Semelhante a NOTIFY_ID_HANDLER, mas mapeia as notificações refletidas da janela pai.

REFLECTED_NOTIFY_ID_HANDLER( id, func )

Parâmetros

id
[in] O identificador do item de menu, controle ou acelerador.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_RANGE_CODE_HANDLER

Semelhante a NOTIFY_RANGE_CODE_HANDLER, mas mapeia as notificações refletidas da janela pai.

REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

cd
[in] O código de notificação.

func
[in] O nome da função de manipulador de mensagens.

Requisitos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_RANGE_HANDLER

Semelhante a NOTIFY_RANGE_HANDLER, mas mapeia as notificações refletidas da janela pai.

REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parâmetros

idFirst
[in] Marca o início de um intervalo contíguo de identificadores de controle.

idLast
[in] Marca o fim de um intervalo contíguo de identificadores de controle.

func
[in] O nome da função de manipulador de mensagens.

Confira também

Macros