Partilhar via


Controles ActiveX MFC: Adicionando métodos personalizados

Os métodos personalizados diferem dos métodos de estoque porque ainda não foram implementados pela COleControl. Você deve fornecer a implementação para cada método personalizado que você adiciona ao seu controle.

Importante

ActiveX é uma tecnologia herdada que não deve ser usada para novos desenvolvimentos. Para obter mais informações sobre tecnologias modernas que substituem o ActiveX, consulte Controles ActiveX.

Um usuário de controle ActiveX pode chamar um método personalizado a qualquer momento para executar ações específicas do controle. A entrada do mapa de despacho para métodos personalizados é do formato DISP_FUNCTION.

Adicionando um método personalizado com o Assistente de Adição de Método

O procedimento a seguir demonstra a adição do método personalizado PtInCircle ao código esqueleto de um controle ActiveX. PtInCircle determina se as coordenadas passadas para o controle estão dentro ou fora do círculo. Este mesmo procedimento também pode ser usado para adicionar outros métodos personalizados. Substitua o nome do método personalizado e seus parâmetros pelo nome e parâmetros do método PtInCircle.

Observação

Este exemplo usa a InCircle função do artigo Eventos. Para obter mais informações sobre essa função, consulte o artigo Controles ActiveX MFC: Adicionando eventos personalizados a um controle ActiveX.

Para adicionar o método personalizado PtInCircle usando o Assistente para Adicionar Método

  1. Carregue o projeto do controle.

  2. Na Vista de Classe, expanda o nó da biblioteca do seu controle.

  3. Clique com o botão direito do mouse no nó da interface do seu controle (o segundo nó do nó da biblioteca) para abrir o menu de atalho.

  4. No menu de atalho, clique em Adicionar e, em seguida, clique em Adicionar método.

    Abrir-se-á o Assistente para Adicionar Método.

  5. Na caixa Nome do método , digite PtInCircle.

  6. Na caixa Nome interno , digite o nome da função interna do método ou use o valor padrão (neste caso, PtInCircle).

  7. Na caixa Tipo de retorno , clique em VARIANT_BOOL para o tipo de retorno do método.

  8. Usando os controles Parameter Type e Parameter Name , adicione um parâmetro chamado xCoord (tipo OLE_XPOS_PIXELS).

  9. Usando os controles Parameter Type e Parameter Name , adicione um parâmetro chamado yCoord (tipo OLE_YPOS_PIXELS).

  10. Clique em Concluir.

Alterações do Assistente de Adição de Método para Métodos Personalizados

Quando se adiciona um método personalizado, o Assistente para Adicionar Método faz algumas alterações no cabeçalho da classe de controlo (.H) e implementação (.CPP). A linha a seguir é adicionada à declaração do mapa de despacho no cabeçalho da classe de controle (ficheiro .H):

VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Este código declara um manipulador de método de despacho chamado PtInCircle. Esta função pode ser chamada pelo usuário de controle usando o nome PtInCircleexterno.

A seguinte linha é adicionada ao ficheiro .IDL do controlo:

[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Esta linha atribui ao PtInCircle método um número de ID específico, a posição do método na lista de métodos e propriedades do Assistente para Adicionar Método. Como o Assistente para Adicionar Método foi usado para adicionar o método personalizado, a entrada para ele foi adicionada automaticamente ao ficheiro .IDL do projeto.

Além disso, a seguinte linha, localizada na implementação (. CPP) da classe de controle, é adicionado ao mapa de despacho do controle:

DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

A macro DISP_FUNCTION mapeia o método PtInCircle para a função de manipulador do controle, PtInCircledeclara o tipo de retorno a ser VARIANT_BOOL e declara dois parâmetros do tipo VTS_XPOS_PIXELS e VTS_YPOSPIXELS a serem passados para PtInCircle.

Finalmente, o Assistente para Adicionar Método adiciona a função CSampleCtrl::PtInCircle stub à parte inferior da implementação do controle (. CPP). Para PtInCircle funcionar como indicado anteriormente, ele deve ser modificado da seguinte forma:

VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   CPoint point(xCoord, yCoord);
   return InCircle(point);
}

Ver também

Controles ActiveX MFC
Ícones da Visualização de Classe e do Navegador de Objetos