Partilhar via


Macros do Mapa de Mensagens (ATL)

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Estas macros definem mapas e entradas de mensagens.

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

Requerimentos

Cabeçalho: atlwin.h

ALT_MSG_MAP

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

ALT_MSG_MAP(msgMapID)

Parâmetros

msgMapID
[dentro] O identificador do mapa da mensagem.

Observações

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

Os mapas de mensagens são usados para processar mensagens enviadas para uma janela. Por exemplo, o CContainedWindow permite-lhe especificar o identificador de um mapa de mensagem no objeto que o contém. CContainedWindow::WindowProc usa então este mapa de mensagens para direcionar as mensagens da janela contida para a função handler apropriada ou para outro mapa de mensagens. Para uma lista de macros que declaram funções handler, veja BEGIN_MSG_MAP.

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes.

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

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Example

O exemplo seguinte mostra o mapa de mensagens por defeito e um mapa alternativo, cada um contendo uma função handler:

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

O exemplo seguinte mostra dois mapas de mensagens alternativos. O mapa de mensagens por defeito 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()

Requerimentos

Cabeçalho: atlwin.h

BEGIN_MSG_MAP

Marca o início do mapa de mensagens por defeito.

BEGIN_MSG_MAP(theClass)

Parâmetros

a Classe
[dentro] O nome da classe que contém o mapa da mensagem.

Observações

CWindowImpl::WindowProc usa o mapa de mensagens padrão para processar mensagens enviadas para a janela. O mapa de mensagens direciona as mensagens quer para a função handler apropriada, quer para outro mapa de mensagens.

As macros seguintes mapeiam uma mensagem para uma função handler. Esta função deve ser definida em theClass.

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

Os macros seguintes direcionam as mensagens para outro mapa de mensagens. Este processo chama-se "encadeamento".

Macro Description
CHAIN_MSG_MAP Chains para o mapa de mensagens padrão na classe base.
CHAIN_MSG_MAP_MEMBER Chains para a mensagem por defeito mapeiam num membro de dados da classe.
CHAIN_MSG_MAP_ALT Chains para um mapa alternativo de mensagens na classe base.
CHAIN_MSG_MAP_ALT_MEMBER Chains para uma mensagem alternativa mapeiam num membro de dados da classe.
CHAIN_MSG_MAP_DYNAMIC Chains para o mapa de mensagens padrão noutra classe em tempo de execução.

As macros seguintes direcionam mensagens "refletidas" da janela principal. Por exemplo, um controlo normalmente envia mensagens de notificação para a sua janela mãe para processamento, mas a janela mãe pode refletir a mensagem de volta para o controlo.

Macro Description
REFLECTED_COMMAND_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função handler, com base no código de notificação e no identificador do item do menu, controlo ou acelerador.
REFLECTED_COMMAND_ID_HANDLER Mapeia uma mensagem WM_COMMAND refletida para uma função handler, com base no identificador do item do menu, controlo ou acelerador.
REFLECTED_COMMAND_CODE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função handler, com base no código de notificação.
REFLECTED_COMMAND_RANGE_HANDLER Mapeia uma mensagem de WM_COMMAND refletida para uma função handler, com base numa gama contígua de identificadores de controlo.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Mapeia uma mensagem WM_COMMAND refletida para uma função handler, com base no código de notificação e numa gama contígua de identificadores de controlo.
REFLECTED_NOTIFY_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função handler, com base no código de notificação e no identificador de controlo.
REFLECTED_NOTIFY_ID_HANDLER Mapeia uma mensagem WM_NOTIFY refletida para uma função handler, com base no identificador de controlo.
REFLECTED_NOTIFY_CODE_HANDLER Mapeia uma mensagem WM_NOTIFY refletida para uma função handler, com base no código de notificação.
REFLECTED_NOTIFY_RANGE_HANDLER Mapeia uma mensagem WM_NOTIFY refletida para uma função handler, com base numa gama contígua de identificadores de controlo.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Mapeia uma mensagem de WM_NOTIFY refletida para uma função handler, com base no código de notificação e numa gama contígua de identificadores de controlo.

Example

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 CMyExtWindow objeto recebe uma mensagem WM_PAINT, a mensagem é direcionada para CMyExtWindow::OnPaint o processamento propriamente dito. Se OnPaint indicar que a mensagem requer processamento adicional, a mensagem será então direcionada para o mapa de mensagens padrão em CMyBaseWindow.

Além do mapa de mensagens predefinido, pode definir um mapa de mensagens alternativo com ALT_MSG_MAP. Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes. O exemplo seguinte mostra o mapa de mensagens por defeito e um mapa alternativo, cada um contendo uma função handler:

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

O exemplo seguinte mostra dois mapas de mensagens alternativos. O mapa de mensagens por defeito 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 fim do mapa da mensagem. Note que há sempre exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Requerimentos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_ALT

Define uma entrada num mapa de mensagens.

CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)

Parâmetros

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

msgMapID
[dentro] O identificador do mapa da mensagem.

Observações

CHAIN_MSG_MAP_ALT direciona mensagens para um mapa de mensagens alternativo numa classe base. Deves ter declarado este mapa alternativo de mensagens 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 um exemplo, veja CHAIN_MSG_MAP.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Requerimentos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_ALT_MEMBER

Define uma entrada num mapa de mensagens.

CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)

Parâmetros

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

msgMapID
[dentro] O identificador do mapa da mensagem.

Observações

CHAIN_MSG_MAP_ALT_MEMBER direciona mensagens para um mapa alternativo de mensagens num membro de dados. Deves ter declarado este mapa alternativo de mensagens com ALT_MSG_MAP(msgMapID). Para direcionar mensagens para o mapa de mensagens predefinido de um membro de dados (declarado com BEGIN_MSG_MAP), use CHAIN_MSG_MAP_MEMBER. Para um exemplo, veja CHAIN_MSG_MAP_MEMBER.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Requerimentos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP

Define uma entrada num mapa de mensagens.

CHAIN_MSG_MAP(theChainClass)

Parâmetros

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

Observações

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 alternativo de mensagens de uma classe base (declarado com ALT_MSG_MAP), use CHAIN_MSG_MAP_ALT.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Example

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 a usar CMyClasso mapa de mensagens por defeito e OnPaint não tratar uma mensagem, a mensagem é direcionada para CMyBaseClasso 'mapa de mensagens por defeito para processamento.

  • Se um procedimento de janela estiver a usar o primeiro mapa de mensagens alternativo em CMyClass, todas as mensagens são direcionadas para CMyBaseClasso 'mapa de mensagens predefinido.

  • Se um procedimento janela estiver a usar CMyClasso segundo mapa alternativo de mensagens e OnChar não tratar uma mensagem, a mensagem é direcionada para o mapa alternativo especificado em CMyBaseClass. CMyBaseClass deve ter declarado este mapa de mensagens com ALT_MSG_MAP(1).

Requerimentos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_DYNAMIC

Define uma entrada num mapa de mensagens.

CHAIN_MSG_MAP_DYNAMIC(dynaChainID)

Parâmetros

dynaChainID
[dentro] O identificador único para o mapa de mensagens de um objeto.

Observações

CHAIN_MSG_MAP_DYNAMIC direciona as mensagens, em tempo de execução, para o mapa de mensagens predefinido noutro objeto. O objeto e o seu mapa de mensagens estão associados ao dynaChainID, que defines através do CDynamicChain::SetChainEntry. Tens de derivar a tua classe para CDynamicChain usares CHAIN_MSG_MAP_DYNAMIC. Para um exemplo, veja a visão geral do CDynamicChain .

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Requerimentos

Cabeçalho: atlwin.h

CHAIN_MSG_MAP_MEMBER

Define uma entrada num mapa de mensagens.

CHAIN_MSG_MAP_MEMBER(theChainMember)

Parâmetros

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

Observações

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 alternativo de mensagens de um membro de dados (declarado com ALT_MSG_MAP), use CHAIN_MSG_MAP_ALT_MEMBER.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Example

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 a usar CMyClasso mapa de mensagens por defeito e OnPaint não tratar uma mensagem, a mensagem é direcionada para m_objo 'mapa de mensagens por defeito para processamento.

  • Se um procedimento de janela estiver a usar o primeiro mapa de mensagens alternativo em CMyClass, todas as mensagens são direcionadas para m_objo 'mapa de mensagens predefinido.

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

Requerimentos

Cabeçalho: atlwin.h

COMMAND_CODE_HANDLER

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

COMMAND_CODE_HANDLER(code, func)

Parâmetros

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

COMMAND_HANDLER

Define uma entrada num mapa de mensagens.

COMMAND_HANDLER(id, code, func)

Parâmetros

ID
[dentro] O identificador do item do menu, controlo ou acelerador.

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

func
[dentro] O nome da função handler de mensagens.

Observações

COMMAND_HANDLER mapeia uma mensagem WM_COMMAND para a função handler especificada, com base no código de notificação e no identificador de controlo. 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 numa COMMAND_HANDLER macro deve ser definida da seguinte forma:

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

O mapa da mensagem define bHandled para TRUE antes de CommandHandler ser chamado. Se CommandHandler não tratar totalmente a mensagem, deve definir bHandled para FALSE para indicar que a mensagem necessita de processamento adicional.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim 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, pode usar MESSAGE_HANDLER para mapear uma mensagem WM_COMMAND sem considerar um identificador ou código. Neste caso, MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) irá direcionar todas as mensagens WM_COMMAND para OnHandlerFunction.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Requerimentos

Cabeçalho: atlwin.h

COMMAND_ID_HANDLER

Semelhante ao COMMAND_HANDLER, mas mapeia uma mensagem WM_COMMAND apenas com base no identificador do item do menu, controlo ou acelerador.

COMMAND_ID_HANDLER(id, func)

Parâmetros

ID
[dentro] O identificador do item do menu, controlo ou acelerador que envia a mensagem.

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

COMMAND_RANGE_CODE_HANDLER

Semelhante ao COMMAND_RANGE_HANDLER, mas mapeia WM_COMMAND mensagens com um código de notificação específico de uma variedade de controlos para uma única função handler.

COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

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

func
[dentro] O nome da função handler de mensagens.

Observações

Este intervalo baseia-se no identificador do item do menu, controlo ou acelerador que envia a mensagem.

Requerimentos

Cabeçalho: atlwin.h

COMMAND_RANGE_HANDLER

Semelhante ao COMMAND_HANDLER, mas mapeia WM_COMMAND mensagens de uma variedade de controlos para uma única função handler.

COMMAND_RANGE_HANDLER( idFirst, idLast, func)

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

func
[dentro] O nome da função handler de mensagens.

Observações

Este intervalo baseia-se no identificador do item do menu, controlo ou acelerador que envia a mensagem.

Requerimentos

Cabeçalho: atlwin.h

DECLARE_EMPTY_MSG_MAP

Declara um mapa de mensagens vazio.

DECLARE_EMPTY_MSG_MAP()

Observações

DECLARE_EMPTY_MSG_MAP é uma macro de conveniência que chama os 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 handler predefinido para a janela filho (controlo) que receberá mensagens refletidas; O handler irá passar corretamente mensagens não tratadas para DefWindowProc.

DEFAULT_REFLECTION_HANDLER()

Requerimentos

Cabeçalho: atlwin.h

END_MSG_MAP

Marca o fim de um mapa de mensagens.

END_MSG_MAP()

Observações

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

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

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Example

O exemplo seguinte mostra o mapa de mensagens por defeito e um mapa alternativo, cada um contendo uma função handler:

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

O exemplo seguinte mostra dois mapas de mensagens alternativos. O mapa de mensagens por defeito 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()

Requerimentos

Cabeçalho: atlwin.h

FORWARD_NOTIFICATIONS

Encaminha as mensagens de notificação para a janela principal.

FORWARD_NOTIFICATIONS()

Observações

Especifique esta macro como parte do seu mapa de mensagens.

Requerimentos

Cabeçalho: atlwin.h

MESSAGE_HANDLER

Define uma entrada num mapa de mensagens.

MESSAGE_HANDLER( msg, func )

Parâmetros

msg
[dentro] A mensagem do Windows.

func
[dentro] O nome da função handler de mensagens.

Observações

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

Qualquer função especificada numa macro MESSAGE_HANDLER deve ser definida da seguinte forma:

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

O mapa da mensagem define bHandled para TRUE antes de MessageHandler ser chamado. Se MessageHandler não tratar totalmente a mensagem, deve definir bHandled para FALSE para indicar que a mensagem necessita de processamento adicional.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim do mapa da mensagem. Cada mapa de mensagens deve ter exatamente uma instância de BEGIN_MSG_MAP e END_MSG_MAP.

Além do MESSAGE_HANDLER, pode usar COMMAND_HANDLER e NOTIFY_HANDLER para mapear mensagens WM_COMMAND e WM_NOTIFY , respetivamente.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Example

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

Requerimentos

Cabeçalho: atlwin.h

MESSAGE_RANGE_HANDLER

Semelhante ao MESSAGE_HANDLER, mas mapeia uma série de mensagens do Windows para uma única função handler.

MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )

Parâmetros

msgFirst
[dentro] Marca o início de uma série contígua de mensagens.

msgLast
[dentro] Marca o fim de uma série contígua de mensagens.

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

NOTIFY_CODE_HANDLER

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

NOTIFY_CODE_HANDLER(cd, func)

Parâmetros

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

NOTIFY_HANDLER

Define uma entrada num mapa de mensagens.

NOTIFY_HANDLER( id, cd, func )

Parâmetros

ID
[dentro] O identificador do controlo que envia a mensagem.

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

func
[dentro] O nome da função handler de mensagens.

Observações

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

Qualquer função especificada numa NOTIFY_HANDLER macro deve ser definida da seguinte forma:

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

O mapa da mensagem define bHandled para TRUE antes de NotifyHandler ser chamado. Se NotifyHandler não tratar totalmente a mensagem, deve definir bHandled para FALSE para indicar que a mensagem necessita de processamento adicional.

Observação

Comece sempre um mapa de mensagens com BEGIN_MSG_MAP. Pode então declarar mapas alternativos de mensagens subsequentes com ALT_MSG_MAP. A macro END_MSG_MAP marca o fim 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, pode usar MESSAGE_HANDLER para mapear uma mensagem WM_NOTIFY sem considerar identificador ou código. Neste caso, MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction) irá direcionar todas as mensagens WM_NOTIFY para OnHandlerFunction.

Para mais informações sobre o uso de mapas de mensagens em ATL, consulte Mapas de Mensagens.

Example

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*/);
};

Requerimentos

Cabeçalho: atlwin.h

NOTIFY_ID_HANDLER

Semelhante ao NOTIFY_HANDLER, mas mapeia uma mensagem WM_NOTIFY apenas com base no identificador de controlo.

NOTIFY_ID_HANDLER( id, func )

Parâmetros

ID
[dentro] O identificador do controlo que envia a mensagem.

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

NOTIFY_RANGE_CODE_HANDLER

Semelhante ao NOTIFY_RANGE_HANDLER, mas mapeia mensagens WM_NOTIFY com um código de notificação específico de uma variedade de controlos para uma única função handler.

NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

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

func
[dentro] O nome da função handler de mensagens.

Observações

Este intervalo baseia-se no identificador do controlo que envia a mensagem.

Requerimentos

Cabeçalho: atlwin.h

NOTIFY_RANGE_HANDLER

Semelhante ao NOTIFY_HANDLER, mas mapeia WM_NOTIFY mensagens de uma variedade de controlos para uma única função handler.

NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

func
[dentro] O nome da função handler de mensagens.

Observações

Este intervalo baseia-se no identificador do controlo que envia a mensagem.

Requerimentos

Cabeçalho: atlwin.h

REFLECT_NOTIFICATIONS

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

REFLECT_NOTIFICATIONS()

Observações

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

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_CODE_HANDLER

Semelhante ao COMMAND_CODE_HANDLER, mas mapeia comandos refletidos da janela principal.

REFLECTED_COMMAND_CODE_HANDLER( code, func )

Parâmetros

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_HANDLER

Semelhante ao COMMAND_HANDLER, mas mapeia comandos refletidos da janela principal.

REFLECTED_COMMAND_HANDLER( id, code, func )

Parâmetros

ID
[dentro] O identificador do item do menu, controlo ou acelerador.

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_ID_HANDLER

Semelhante ao COMMAND_ID_HANDLER, mas mapeia comandos refletidos da janela principal.

REFLECTED_COMMAND_ID_HANDLER( id, func )

Parâmetros

ID
[dentro] O identificador do item do menu, controlo ou acelerador.

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_RANGE_CODE_HANDLER

Semelhante ao COMMAND_RANGE_CODE_HANDLER, mas mapeia comandos refletidos da janela principal.

REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_COMMAND_RANGE_HANDLER

Semelhante ao COMMAND_RANGE_HANDLER, mas mapeia comandos refletidos da janela principal.

REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_CODE_HANDLER

Semelhante ao NOTIFY_CODE_HANDLER, mas mapeia notificações refletidas pela janela principal.

REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )

Parâmetros

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_HANDLER

Semelhante ao NOTIFY_HANDLER, mas com notificações de mapas refletidas pela janela principal.

REFLECTED_NOTIFY_HANDLER( id, cd, func )

Parâmetros

ID
[dentro] O identificador do item do menu, controlo ou acelerador.

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_ID_HANDLER

Semelhante ao NOTIFY_ID_HANDLER, mas mapeia notificações refletidas pela janela principal.

REFLECTED_NOTIFY_ID_HANDLER( id, func )

Parâmetros

ID
[dentro] O identificador do item do menu, controlo ou acelerador.

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_RANGE_CODE_HANDLER

Semelhante ao NOTIFY_RANGE_CODE_HANDLER, mas mapeia notificações refletidas pela janela principal.

REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

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

func
[dentro] O nome da função handler de mensagens.

Requerimentos

Cabeçalho: atlwin.h

REFLECTED_NOTIFY_RANGE_HANDLER

Semelhante ao NOTIFY_RANGE_HANDLER, mas mapeia notificações refletidas pela janela principal.

REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parâmetros

idFirst
[dentro] Marca o início de uma gama contígua de identificadores de controlo.

idLast
[dentro] Marca o fim de um intervalo contíguo de identificadores de controlo.

func
[dentro] O nome da função handler de mensagens.

Consulte também

Macros