Partilhar via


Mapas de Eventos

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Sempre que um controlo deseja notificar o seu contentor de que alguma ação (determinada pelo programador do controlo) ocorreu (como um toque de tecla, clique do rato ou uma alteração no estado do controlo), chama uma função de disparo de eventos. Esta função notifica o contentor de controlo que alguma ação importante ocorreu ao disparar o evento relacionado.

A Microsoft Foundation Class Library oferece um modelo de programação otimizado para eventos de disparo. Neste modelo, os "mapas de eventos" são usados para designar quais funções ativam quais eventos para um determinado controlo. Os mapas de eventos contêm uma macro para cada evento. Por exemplo, um mapa de eventos que lança um evento clicar padrão pode ser assim:

BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()

A EVENT_STOCK_CLICK macro indica que o controlo irá disparar um evento de clique padrão sempre que detetar um clique do rato. Para uma lista mais detalhada de outros eventos de ações, consulte o artigo Controlos ActiveX: Eventos. Macros também estão disponíveis para indicar eventos personalizados.

Embora os macros de mapas de eventos sejam importantes, geralmente não os insere diretamente. Isto porque a janela de Propriedades (na Vista de Classes) cria automaticamente entradas de mapa de eventos nos seus ficheiros fonte quando a utiliza para associar funções de disparo de eventos a eventos. Sempre que quiseres editar ou adicionar uma entrada no mapa de eventos, podes usar a janela de Propriedades .

Para suportar mapas de eventos, o MFC fornece os seguintes macros:

Macros do Mapa de Eventos

Declaração e Demarcação do Mapa de Eventos

Nome Description
DECLARE_EVENT_MAP Declara que um mapa de eventos será usado numa classe para mapear eventos para funções que disparam eventos (deve ser usado na declaração de classe).
BEGIN_EVENT_MAP Inicia a definição de um mapa de eventos (deve ser usado na implementação da classe).
END_EVENT_MAP Termina a definição de um mapa de eventos (deve ser usado na implementação da classe).

Macros de Mapeamento de Eventos

Nome Description
EVENT_CUSTOM Indica qual a função de disparo de evento que irá disparar o evento especificado.
EVENT_CUSTOM_ID Indica qual a função de disparo de eventos que irá disparar o evento especificado, com um ID de despacho designado.

Macros de Mapeamento de Mensagens

Nome Description
ON_OLEVERB Indica um verbo personalizado tratado pelo controlo OLE.
ON_STDOLEVERB Sobrepõe-se a um mapeamento verbal padrão do controlo OLE.

DECLARE_EVENT_MAP

Cada COleControlclasse derivada no seu programa pode fornecer um mapa de eventos para especificar os eventos que o seu controlo irá disparar.

DECLARE_EVENT_MAP()

Observações

Usa a macro DECLARE_EVENT_MAP no final da tua declaração de aula. Depois, no ficheiro .cpp que define as funções membros da classe, use a macro BEGIN_EVENT_MAP, as entradas de macro de cada um dos eventos do controlo e a macro END_EVENT_MAP para declarar o fim da lista de eventos.

Para mais informações sobre mapas de eventos, consulte o artigo Controlos ActiveX: Eventos.

Requerimentos

Cabeçalho afxctl.h

BEGIN_EVENT_MAP

Começa a definição do seu mapa de eventos.

BEGIN_EVENT_MAP(theClass,  baseClass)

Parâmetros

a Classe
Especifica o nome da classe de controlo cujo event map pertence.

Classe base
Especifica o nome da classe base da Classe.

Observações

No ficheiro de implementação (.cpp) que define as funções membros da sua classe, inicie o mapa de eventos com a macro BEGIN_EVENT_MAP, depois adicione entradas de macro para cada um dos seus eventos e complete o mapa de eventos com a macro END_EVENT_MAP.

Para mais informações sobre mapas de eventos e a macro BEGIN_EVENT_MAP, consulte o artigo Controlos ActiveX: Eventos.

Requerimentos

Cabeçalho afxctl.h

END_EVENT_MAP

Use o macro END_EVENT_MAP para terminar a definição do seu mapa de eventos.

END_EVENT_MAP()

Requerimentos

Cabeçalho afxctl.h

EVENT_CUSTOM

Define uma entrada de event map para um evento personalizado.

EVENT_CUSTOM(pszName, pfnFire,  vtsParams)

Parâmetros

pszName
O nome do evento.

pfnFire
O nome da função de disparo de eventos.

vtsParams
Uma lista separada em espaço de uma ou mais constantes que especifica a lista de parâmetros da função.

Observações

O parâmetro vtsParams é uma lista separada do espaço dos valores das VTS_ constantes. Um ou mais destes valores, separados por espaços (não vírgulas), especifica a lista de parâmetros da função. Por exemplo:

VTS_COLOR VTS_FONT

especifica uma lista contendo um inteiro de 32 bits representando um valor de cor RGB, seguida de um ponteiro para a IFontDisp interface de um objeto fonte OLE.

As VTS_ constantes e os seus significados são os seguintes:

Symbol Tipo de parâmetro
VTS_I2 short
VTS_I4 long
VTS_R4 float
VTS_R8 double
VTS_COLOR OLE_COLOR
VTS_CY MOEDA
VTS_DATE DATE
VTS_BSTR const char*
VTS_DISPATCH LPDISPATCH
VTS_FONT IFontDispatch*
VTS_HANDLE PEGA
VTS_SCODE SCODE
VTS_BOOL BOOL
VTS_VARIANT const VARIANT*
VTS_PVARIANT VARIANT*
VTS_UNKNOWN LPUNKNOWN
VTS_OPTEXCLUSIVE OLE_OPTEXCLUSIVE
VTS_PICTURE IPictureDisp*
VTS_TRISTATE OLE_TRISTATE
VTS_XPOS_PIXELS OLE_XPOS_PIXELS
VTS_YPOS_PIXELS OLE_YPOS_PIXELS
VTS_XSIZE_PIXELS OLE_XSIZE_PIXELS
VTS_YSIZE_PIXELS OLE_YSIZE_PIXELS
TS_XPOS_HIMETRIC OLE_XPOS_HIMETRIC
VTS_YPOS_HIMETRIC OLE_YPOS_HIMETRIC
VTS_XSIZE_HIMETRIC OLE_XSIZE_HIMETRIC
VTS_YSIZE_HIMETRIC OLE_YSIZE_HIMETRIC

Observação

Foram definidas constantes variantes adicionais para todos os tipos de variantes, com exceção de VTS_FONT e VTS_PICTURE, que fornecem um ponteiro para a constante de dados variante. Estas constantes são nomeadas usando a VTS_Pconstantname convenção. Por exemplo, VTS_PCOLOR é um apontador para uma constante VTS_COLOR.

Requerimentos

Cabeçalho afxctl.h

EVENT_CUSTOM_ID

Define uma função de disparo de eventos para um evento personalizado pertencente ao ID de despacho especificado por dispid.

EVENT_CUSTOM_ID(
    pszName,
    dispid,
    pfnFire,
    vtsParams)

Parâmetros

pszName
O nome do evento.

dispid
O ID de despacho usado pelo controlo ao disparar o evento.

pfnFire
O nome da função de disparo de eventos.

vtsParams
Uma lista variável de parâmetros passada para o contentor de controlo quando o evento é lançado.

Observações

O argumento vtsParams é uma lista separada em espaço de valores das VTS_ constantes. Um ou mais destes valores, separados por espaços, e não por vírgulas, especificam a lista de parâmetros da função. Por exemplo:

VTS_COLOR VTS_FONT

especifica uma lista contendo um inteiro de 32 bits representando um valor de cor RGB, seguida de um ponteiro para a IFontDisp interface de um objeto fonte OLE.

Para uma lista das VTS_ constantes, veja EVENT_CUSTOM.

Requerimentos

Cabeçalho afxctl.h

ON_OLEVERB

Esta macro define uma entrada de mapa de mensagem que mapeia um verbo personalizado para uma função membro específica do seu controlo.

ON_OLEVERB(idsVerbName,  memberFxn)

Parâmetros

idsVerbName
O ID de recurso da cadeia do nome do verbo.

membroFxn
A função chamada pela estrutura quando o verbo é invocado.

Observações

O editor de recursos pode ser usado para criar nomes de verbos personalizados que são adicionados à sua tabela de cadeias.

O protótipo de função para memberFxn é:

BOOL memberFxn(
   LPMSG    lpMsg,
   HWND     hWndParent,
   LPCRECT  lpRect);

Os valores dos parâmetros lpMsg, hWndParent e lpRect são retirados dos parâmetros correspondentes da IOleObject::DoVerb função membro.

Requerimentos

Cabeçalho afxole.h

ON_STDOLEVERB

Use esta macro para sobrepor o comportamento padrão de um verbo padrão.

ON_STDOLEVERB(iVerb, memberFxn)

Parâmetros

iVerb
O índice verbal padrão para o verbo a ser sobreposto.

membroFxn
A função chamada pela estrutura quando o verbo é invocado.

Observações

O índice verbal padrão é da forma OLEIVERB_, seguido de uma ação. OLEIVERB_SHOW, OLEIVERB_HIDE e OLEIVERB_UIACTIVATE são alguns exemplos de verbos padrão.

Ver ON_OLEVERB para uma descrição do protótipo da função a ser usado como parâmetro memberFxn .

Requerimentos

Cabeçalho afxole.h

Consulte também

Macros e Globais