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
Em classe View, expandir polígono e PolygonLib exibir _IPolyCtlEvents.
clicar com o botão direito do mouse _IPolyCtlEvents.No menu de atalho, clicar Adicionare, em seguida, clicar Método Add.
selecionar um Tipo de retorno of void.
Digite ClickIn no Nome do método box.
Em Atributos de parâmetro, selecionar o em box.
selecionar um Tipo de parâmetro of LONGO.
Tipo de x sistema autônomo o Nome do parâmetroe clicar Adicionar.
Repetir as etapas 5 a 7, desta vez para um Nome do parâmetro of y.
Clique em Finish.
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
Reconstrua seu projeto.
- ou -
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
No modo de exibição de classe, clicar com o botão direito do mouse de classe de implementação do controle CPolyCtl.
No menu de atalho, clicar Adicionare, em seguida, clicar Adicionar ponto de conexão.
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
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.
No Propriedades janela, clicar no Mensagens ícone e, em seguida, clicar WM_LBUTTONDOWN na lista à esquerda.
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