Os controles ActiveX MFC: Adicionando eventos personalizado

Eventos personalizados diferem dos eventos de ações de eles não são acionados automaticamente pela classe COleControl. Um evento personalizado reconhece uma determinada ação, determinada pelo desenvolvedor de controle, sistema autônomo um evento.As entradas de MAP de evento para eventos personalizados são representadas pelo EVENT_CUSTOM macro. A seção a seguir implementa um evento personalizado para um projeto de controle ActiveX que foi criado usando o ActiveX Control assistente.

Adicionar um evento personalizado com o Assistente de eventos

O procedimento a seguir adiciona um evento personalizado específico, ClickIn.Você pode usar este procedimento para adicionar outros eventos personalizados.Substitua o nome do evento personalizado e seus parâmetros para o nome do evento ClickIn e parâmetros.

Para adicionar o evento personalizado ClickIn usando o Assistente para adicionar eventos

  1. Carregar projeto do controle.

  2. No Modo de Exibição de Classe, clicar com o botão direito do mouse em sua classe de controle ActiveX para em em aberto o menu de atalho.

  3. No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar evento.

    Isso abre o ' Assistente para adicionar evento '.

  4. No Nome do evento box, type ClickIn.

  5. No Nome interno caixa, digite o nome do evento de acionamento função.Neste exemplo, use o valor padrão fornecido pelo Assistente de evento adicionar (FireClickIn).

  6. Adicionar um parâmetro, chamado xCoord (tipo OLE_XPOS_PIXELS), usando o Nome de parâmetro and Tipo de parâmetro controles.

  7. Adicionar um segundo parâmetro, chamado yCoord (tipo OLE_YPOS_PIXELS).

  8. clicar Concluir para criar o evento.

Adicionar evento Assistente alterações para eventos personalizados

Quando você adiciona um evento personalizado, o Assistente para adicionar eventos faz alterações para os arquivos de .h .CPP e .idl de classe do controle.Os exemplos de código a seguir são específicos para o evento ClickIn.

As seguintes linhas são adicionadas ao arquivo de cabeçalho (.H) de sua classe de controle:

void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}

Esse código declara uma embutido função chamada FireClickIn que chama COleControl::FireEvent com o evento ClickIn e parâmetros definidos usando o Assistente para adicionar eventos.

Além disso, a seguinte linha é adicionada ao MAP de evento para o controle, no arquivo de implementação (.CPP) de sua classe de controle:

EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

Esse código mapeia o evento ClickIn à função embutida FireClickIn, passando os parâmetros definidos usando o Assistente para adicionar eventos.

Finalmente, a seguinte linha é adicionada ao arquivo .IDL do controle:

[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Esta linha atribui o evento ClickIn um número de ID específico, obtido da posição do evento na lista de eventos do Assistente para adicionar eventos.A entrada na lista de eventos permite que um contêiner prever o evento.Por exemplo, ele poderá fornecer código de manipulador a ser executado quando o evento é acionado.

Chamar FireClickIn

Agora que você adicionou o evento personalizado ClickIn usando o Assistente para adicionar eventos, você deve decidir quando esse evento deverá ser acionado.Faça isso chamando FireClickIn Quando ocorre a ação apropriada. Para esta discussão, o controle usa o InCircle função dentro de um WM_LBUTTONDOWN manipulador de mensagens para acionar o evento ClickIn quando um usuário clica dentro de uma região circular ou elíptica. O procedimento a seguir adiciona o WM_LBUTTONDOWN manipulador.

Para adicionar um manipulador de mensagens com o ' Assistente para adicionar evento '

  1. Carregar projeto do controle.

  2. No Modo de Exibição de Classe, selecionar sua classe de controle ActiveX.

  3. Na janela Propriedades, clicar no Mensagens botão.

    janela Propriedades exibe uma lista de mensagens que podem ser manipulados pelo controle ActiveX.Qualquer mensagem mostrada em negrito já tem uma função de manipulador atribuída a ele.

  4. Na janela Propriedades, selecionar a mensagem que você deseja manipular.Neste exemplo, selecionar WM_LBUTTONDOWN.

  5. Na caixa de listagem suspensa à direita, selecionar <add>OnLButtonDown.

  6. clicar duas vezes a nova função de manipulador classe View para saltar para o código de manipulador de mensagens no arquivo de implementação (.CPP) do seu controle ActiveX.

O exemplo de código a seguir chama o InCircle função sempre esquerda botão do mouse é clicada dentro da janela do controle.Este exemplo pode ser encontrado no WM_LBUTTONDOWN função de manipulador OnLButtonDown, na Exemplo de circ resumo.

void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
   if (InCircle(point))
      FireClickIn(point.x, point.y);

    COleControl::OnLButtonDown(nFlags, point);
}
Observação:

Quando o Assistente para adicionar eventos cria manipuladores de mensagens para mouse ações de botão do mouse, uma telefonar para o mesmo manipulador de mensagens da classe base é um utomaticamente adicionado.Não remova essa telefonar.Se o seu controle usa uma das mensagens de ações do mouse, os manipuladores de mensagens na classe base devem ser chamados para garantir a capturar do mouse é manipulada corretamente.

No exemplo a seguir, o evento é acionado somente quando o clicar ocorre dentro de uma região circular ou elíptica dentro do controle.Para obter esse comportamento, você pode colocar o InCircle função no arquivo de implementação (.CPP) do controle:

VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
    CRect rc;
    GetClientRect(rc);
    // Determine radii
    double a = (rc.right - rc.left) / 2;
    double b = (rc.bottom - rc.top) / 2;

    // Determine x, y
    double x = point.x - (rc.left + rc.right) / 2;
    double y = point.y - (rc.top + rc.bottom) / 2;

    // Apply ellipse formula
    return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}

Você também precisará adicionar a seguinte declaração do InCircle função para o arquivo de cabeçalho (.H) do controle:

VARIANT_BOOL InCircle(CPoint& point);

Eventos personalizados com nomes de ações

Você pode criar eventos personalizados com o mesmo nome de eventos de ações, no entanto, você não pode implementar ambos no mesmo controle.Por exemplo, convém criar um evento personalizado chamado clicar não dispara quando o evento ações clicar normalmente seria acionado.Você foi acionado, em seguida, o evento clicar a qualquer momento chamando a função de acionamento.

O procedimento a seguir adiciona um clicar personalizado evento.

Para adicionar um evento personalizado que usa um nome de evento das ações

  1. Carregar projeto do controle.

  2. No Modo de Exibição de Classe, clicar com o botão direito do mouse em sua classe de controle ActiveX para em em aberto o menu de atalho.

  3. No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar evento.

    Isso abre o ' Assistente para adicionar evento '.

  4. No Nome do evento drop-down, selecionar um nome de evento das ações.Neste exemplo, selecionar clicar.

  5. For Tipo de evento, selecionar Personalizado.

  6. clicar Concluir para criar o evento.

  7. De telefonarFireClick em lugares apropriados em seu código.

Consulte também

Conceitos

Controles do ActiveX MFC

Os controles ActiveX MFC: Métodos

Referência

Classe COleControl