Partilhar via


Etapa 5: Adicionar um evento

Nesta etapa, você adicionará um ClickIn e um ClickOut evento em seu controle ATL. Você irá disparar o ClickIn evento se o usuário clicar dentro do polígono e um incêndio ClickOut Se o usuário clica fora. sistema autônomo tarefas para adicionar um evento são:

  • Adicionando o ClickIn e ClickOut Métodos

  • Gerando a biblioteca de tipos

  • Implementar as interfaces de ponto de conexão

Adicionando ClickIn e ClickOut métodos

Quando você criou o controle ATL na etapa 2, você selecionou o Pontos de conexão a caixa de seleção.Isso criou o _IPolyCtlEvents interface no arquivo Polygon.idl. Observe que o nome da interface começa com um sublinhado.Esta é uma convenção para indicar que a interface é uma interface interna.Assim, programas que permitem navegar objetos COM podem optar por não exibir a interface para o usuário.Observe também que selecionar Pontos de conexão adicionado a seguinte linha no arquivo Polygon.idl para indicar que _IPolyCtlEvents é a interface de fonte padrão:

[default, source] dispinterface _IPolyCtlEvents;

O atributo de fonte indica que o controle é fonte de notificações, portanto, ele será telefonar desta interface no contêiner.

Agora, adicione o ClickIn e ClickOut métodos para o _IPolyCtlEvents interface.

Para adicionar os métodos ClickIn e ClickOut

  1. Em classe View, expandir polígono e PolygonLib exibir _IPolyCtlEvents.

  2. clicar com o botão direito do mouse _IPolyCtlEvents.No menu de atalho, clicar Adicionare, em seguida, clicar Método Add.

  3. selecionar um Tipo de retorno of void.

  4. Digite ClickIn no Nome do método box.

  5. Em Atributos de parâmetro, selecionar o em box.

  6. selecionar um Tipo de parâmetro of LONGO.

  7. Tipo de x sistema autônomo o Nome do parâmetroe clicar Adicionar.

  8. Repetir as etapas 5 a 7, desta vez para um Nome do parâmetro of y.

  9. Clique em Finish.

  10. Repetir as etapas acima para definir um ClickOut método com o mesmo LONGO parâmetros de x e y, o mesmo Atributos de parâmetro e o mesmo void tipo de retorno.

Verifique o arquivo Polygon.idl para ver se o código foi adicionado à _IPolyCtlEvents Dispinterface.

The _IPolyCtlEvents dispinterface em seu arquivo Polygon.idl deve agora parecer com isso:

dispinterface _IPolyCtlEvents
{
   properties:
   methods:
      [id(1), helpstring("method ClickIn")] void ClickIn([in] LONG x, [in] LONG y);
      [id(2), helpstring("method ClickOut")] void ClickOut([in] LONG x, [in] LONG y);
};

The ClickIn e ClickOut métodos têm o x e y coordenadas do ponto clicado sistema autônomo parâmetros.

Gerando a biblioteca de tipos

gerar a biblioteca de tipos neste momento porque o Assistente para ponto de conexão usará para obter as informações necessárias para construir uma interface de ponto de conexão e uma interface de contêiner de ponto de conexão para o seu controle.

Para gerar a biblioteca de tipos

  1. Reconstrua seu projeto.

    - ou -

  2. clicar com o botão direito do mouse no arquivo Polygon.idl no gerenciador de soluções e clique em Compilar no menu de atalho.

Isso criará o arquivo Polygon.tlb, que é a biblioteca de tipos.Arquivo Polygon.tlb não é visível do gerenciador de soluções, porque ele é um arquivo binário e não pode ser exibido ou editado diretamente.

Implementar as interfaces de ponto de conexão

Implemente uma interface de ponto de conexão e uma interface de contêiner de ponto de conexão para o seu controle.No COM, eventos são implementados por meio do mecanismo de pontos de conexão.Para receber eventos de um objeto COM, um contêiner estabelece uma conexão comunicado com o ponto de conexão que implementa o objeto COM.Como um objeto COM pode ter vários pontos de conexão, o objeto COM também implementa uma interface de contêiner de ponto de conexão.Através dessa interface, o contêiner pode determinar quais pontos de conexão são suportados.

A interface que implementa um ponto de conexão é chamada IConnectionPointe a interface que implementa um contêiner de ponto de conexão é chamado IConnectionPointContainer.

Para ajudar a implementar IConnectionPoint, você usará o Assistente para ponto de conexão de implementar.Este assistente gera o IConnectionPoint interface lendo sua biblioteca de tipos e implementar uma função para cada evento que pode ser acionado.

Para usar o Assistente para ponto de conexão implementar

  1. No modo de exibição de classe, clicar com o botão direito do mouse de classe de implementação do controle CPolyCtl.

  2. No menu de atalho, clicar Adicionare, em seguida, clicar Adicionar ponto de conexão.

  3. selecionar _IPolyCtlEvents from the Interfaces de fonte lista e clicar duas vezes nele para adicioná-lo ao Implementar pontos de conexão coluna.Clique em Finish.Uma classe proxy para o ponto de conexão será gerada neste caso, CProxy_IPolyCtlEvents.

Se você examinar o arquivo _IPolyCtlEvents_CP.h gerado no gerenciador de soluções, você verá que ele tem uma classe chamada CProxy_IPolyCtlEvents que deriva de IConnectionPointImpl. _IPolyCtlEvents_CP.h também define os dois métodos Fire_ClickIn e Fire_ClickOut, o que levar os dois parâmetros de coordenada. Você chamar esses métodos quando quiser acionar um evento em seu controle.

O assistente também adicionado CProxy_PolyEvents e IConnectionPointContainerImpl a lista de herança vários do controle. O assistente também expostos IConnectionPointContainer para que você adicionando entradas adequadas para o MAP COM.

Terminar de implementar o código para dar suporte a eventos.Agora, adicione algum código para disparar os eventos no momento apropriado.Lembre-se de que você irá disparar um ClickIn ou ClickOut evento quando o usuário clica botão do mouse esquerdo do mouse no controle. Para saber quando o usuário clica no botão, adicionar um manipulador para o WM_LBUTTONDOWN mensagem.

Para adicionar um manipulador para a mensagem WM_LBUTTONDOWN

  1. Em Modo de Exibição de Classe, clicar com o botão direito do mouse em classe CPolyCtl e clique em Propriedades no menu de atalho.

  2. No Propriedades janela, clicar no Mensagens ícone e, em seguida, clicar WM_LBUTTONDOWN na lista à esquerda.

  3. Na lista suspensa que aparece, clicar <Adicionar > OnLButtonDown.The OnLButtonDown declaração do manipulador será adicionada ao PolyCtl.h e a implementação do manipulador será adicionada ao PolyCtl.cpp.

Em seguida, modifique o manipulador.

Para modificar o método OnLButtonDown

  • Alterar o código que compreende o OnLButtonDown método em PolyCtl.cpp (excluir qualquer código colocado pelo assistente), de modo que ele tenha a seguinte aparência:

    LRESULT CPolyCtl::OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, 
       BOOL& /*bHandled*/)
    {
       HRGN hRgn;
       WORD xPos = LOWORD(lParam);  // horizontal position of cursor
       WORD yPos = HIWORD(lParam);  // vertical position of cursor
    
       CalcPoints(m_rcPos);
    
       // Create a region from our list of points
       hRgn = CreatePolygonRgn(&m_arrPoint[0], m_nSides, WINDING);
    
       // If the clicked point is in our polygon then fire the ClickIn
       //  event otherwise we fire the ClickOut event
       if (PtInRegion(hRgn, xPos, yPos))
          Fire_ClickIn(xPos, yPos);
       else
          Fire_ClickOut(xPos, yPos);
    
       // Delete the region that we created
       DeleteObject(hRgn);
       return 0;
    }
    

Este código faz uso de pontos de calculado no OnDraw função para criar uma região que detecta os cliques do mouse do usuário com a telefonar para PtInRegion.

The uMsg parâmetro é a ID de mensagem do Windows sendo manipulada. Isso permite que você tenha uma função que manipula uma variedade de mensagens.The wParam e o lParam parâmetros são os valores padrão para a mensagem sendo manipulado. O parâmetro bHandled permite que você especifique se a função manipula a mensagem ou não. Por padrão, o valor é definido como TRUE para indicar que a função tratada a mensagem, mas você pode defini-la como FALSE. Isso fará com que o ATL continuar procurando por outra função de manipulador de mensagens para enviar a mensagem.

Criando e testando o controle

Agora, tente seus eventos.Cria o controle e inicie novamente o contêiner de teste do controle ActiveX.Desta vez, exibir a janela de log de eventos.Para rotear os eventos para a janela de saída, clicar Registro em registrar registrar registrar em log from the Opções menu e selecionar registrar registrar registrar em log de janela de saída.Inserir o controle e tente clicar na janela.Observe que ClickIn é acionado se clicar dentro do polígono preenchido, e ClickOut é disparado quando você clicar fora dela.

Em seguida, você adicionará um propriedade página.

Voltar para etapa 4 | A etapa 6

Consulte também

Referência

Tutorial do ATL