Etapa 5: Adicionar um evento

Agora você irá adicionar um ClickIn e um ClickOut evento para o Controlarar do ATL. Você será acionado o ClickIn evento se o usuário clicar dentro do polígono e o fogo ClickOut se o usuário clicar fora.

Qua&ndo você criou o Controlarar completo na etapa 2, você selecionado a box.nbsp de seleção de Pontos de conexão de apoio ; Isto criou o IPolyCtlEvents interface no seu arquivo. 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 que você navegue COM objetos podem optar por não exibir a interface para o usuário. Também aviso no arquivo IDL que Suporte a pontos de conexão adicionada uma linha para indicar que IPolyCtlEvents é a interface de origem padrão. O atributo de origem indica que o Controlarar é a origem das notificações, então ele irá chamar esta interface no contêiner.

Agora você deve adicionar os ClickIn e ClickOut métodos para a IPolyCtlEvents interface:

  1. Clique com o botão direito em IPolyCtlEvents no ClassView e selecionando Adicionar método... no menu pop-up.

  2. Selecione um tipo de retorno devoid.

  3. Tipo ClickIn na caixa Nome do método..

  4. Digite [in] long x, [in] long y na caixa parâmetros.

  5. Clique em OK.

Verifique o arquivo IDL para ver que o código foi adicio&nado como um método para o IPolyCtlEvents dispinterface.nbsp; Em seguida, use o mesmo procedimento para definir um ClickOut Método com os mesmos parâmetros e o tipo de retorno.  A dispinterface IPolyCtlEvents no seu arquivo. IDL deve agora olhar como este:

dispinterface  IPolyCtlEvents
{
   Propriedades:
   Métodos:
   [id(1), helpstring ("Método ClickIn")] void ClickIn ([no] longa x, [no] longa y);
   [id(2), helpstring ("Método ClickOut")] void ClickOut ([no] longa x, [no] longa y);
}

O ClickIn e ClickOut métodos que levam o x e y coordenadas do ponto clicado como parâmetros.

Agora gere sua biblioteca de tipo. Para fazer isso Recompilar seu projeto ou direito-clique the arquivo. IDL em FileView e clique Compilação polígono. IDL. Isso criará o arquivo Polygon.tlb, que é a biblioteca de tipo.

Em seguida, implemente uma interface de ponto de conexão e uma interface de contêiner de ponto de conexão para o seu controle. (COM, eventos são implementados através do mecanismo de pontos de conexão. Para receber eventos de um objeto COM, um recipiente estabelece uma conexão comunicada ao ponto de conexão que implementa o objeto COM. Uma vez que um objeto COM pode ter Múltiplo pontos de conexão, o objeto de COM também implementa uma interface de contêiner de ponto de conexão. Por meio desta interface, o contêiner pode determinar os pontos de conexão são suportados.) A interface que implementa um ponto de conexão é chamada IConnectionPoint e a interface que implementa um contêiner de ponto de conexão é chamada IConnectionPointContainer.

Para ajudar a implementar IConnectionPoint, use ClassView para acessar um assistente de ponto de conexão. Este assistente gera o IConnectionPoint interface lendo sua biblioteca de tipo e implementar uma função para cada evento que pode ser acionado.

Para executar o assistente, siga estes passos:

  1. Vá para ClassView (no menu Exibir , clique em espaço de trabalho para ver ClassView).

  2. Clique com o botão direito na classe de implementação do Controlarar, neste caso CPolyCtl.

  3. No menu de atalho, selecione Implementar conexão ponto....

  4. _PolyEvents selecionar da lista de Interfaces em seguida, clique em OK e uma classe de proxy para o ponto de conexão serão gerados, neste caso, CProxy_IPolyCtlEvents.

Se você olhar para o arquivo PolygonCP.h gerado no FileView, verá que ele tem uma classe chamada CProxy_PolyCtlEvents que deriva de IConnectionPointImpl. PolygonCP.h também define dois métodos Fire_ClickIn e Fire_ClickOut , que tem dois parâmetros de coordenadas. Estes são os métodos que você chamar quando você deseja disparar um evento de seu controle.

O assiste&nte também acrescentou o CProxy_PolyEvents e IConnectionPointContainerImpl para Múltiplo herança list.nbsp do controle; O assistente também expõe IConnectionPointContainer para você adicionar as entradas apropriadas para o mapa COM.

Terminar de implementar o código para oferecer suporte a eventos. Agora, adicione algum código para os eventos de incêndio no momento apropriado. Lembre-se, você vai acionar um ClickIn ou ClickOut evento quando o usuário clica no botão esquerdo do mouse no controle. Para descobrir quando o usuário clica no botão, primeiro adicione um manipulador para a mensagem WM_LBUTTO&NDOWN . No ClassView, clique com o botão direito sobre a classe CPolyCtl e selecione Add Windows Mensagem Handler... de menu.nbsp de atalho; Em seguida, selecionar WM_LBUTTONDOWN na lista à esquerda e clique no botão Adicionar manipulador .  Clique em OK.

Em seguida, adicionar novo código para a função de OnLButtonDown PolyCtl. H (excluindo qualquer código colocado pelo assistente) para que OnLButtonDown agora se parece com isso:

LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
   HRGN hRgn;
   PALAVRA xPos = LOWORD(lParam);  / / horizontal posição do cursor
   PALAVRA yPos = HIWORD(lParam);  / / vertical posição do cursor

CalcPoints(m_rcPos);

/ / Criar uma região de nossa lista de pontos
   hRgn = CreatePolygonRgn (& m_arrPoint [0], m_nSides, enrolamento);

/ / Se o ponto clicado é nosso polígono, em seguida, acionar o ClickIn
   / / evento caso contrário podemos acionar o evento ClickOut
   se (PtInRegion (hRgn, xPos, yPos))
      Fire_ClickIn (xPos, yPos);
   outra pessoa
      Fire_ClickOut (xPos, yPos);

/ / Excluir a região que criamos
   DeleteObject(hRgn);
   return 0;
}

Uma vez que você já ter calculado os pontos do polígono no OnDraw função, usá-los em OnLButtonDown para criar uma região. Em seguida, use a função de PtInRegion API para determinar se o ponto clicado é dentro do polígono ou não.

O uMsg parâmetro é o ID da mensagem Windows está sendo Tratado. Isso permite que você tenha uma função que manipula uma série de mensagens. O wParam e o lParam são os valores padrão para a mensagem que está sendo Tratado. O parâmetro bHandled permite que você especifique se a função tratada a mensagem ou não. Por padrão, o valor é definido como TRUE para indicar que a função Tratado a mensagem, mas você pode configurá-lo falso. Isso fará com que ATL continuar procurando por outra função de manipulador de mensagem ao qual você deseja enviar a mensagem.

Agora, te&nte os seus eventos. Compilação o Controlarar e iniciar novamente o Controlarar ActiveX teste recipiente . Desta vez, exibir o log de eventos window.nbsp; A rota eventos na janela de saída, selecione log no menu Opções e selecione o Log para a janela de saída. Agora inserir o controle e tente clicar na janela. Observe que ClickIn é acionado se você clique dentro do polígono preenchido e ClickOut é disparado quando você clica fora do mesmo.

Avançar você irá adicionar uma página de propriedade.

Voltar para a etapa 4 |nbsp; A etapa 6

Index