Controles ActiveX MFC: adicionando métodos personalizados
Os métodos personalizados diferem dos métodos de estoque por não serem ainda implementados por COleControl
. Você deve fornecer a implementação para cada método personalizado adicionado ao seu controle.
Importante
O ActiveX é uma tecnologia herdada que não deve ser usada para novo desenvolvimento. Para mais informações sobre tecnologias modernas que substituem o ActiveX, confira Controles do ActiveX.
Um usuário do controle ActiveX pode chamar um método personalizado a qualquer momento para executar ações específicas de controle. A entrada do mapa de expedição para métodos personalizados tem a forma DISP_FUNCTION.
Adicionar um método personalizado com o Assistente para adicionar método
O procedimento a seguir demonstra a adição do método personalizado PtInCircle ao código esqueleto de um controle ActiveX. O PtInCircle determina se as coordenadas passadas para o controle estão dentro ou fora do círculo. Esse mesmo procedimento também pode ser usado para adicionar outros métodos personalizados. Substitua o nome e os parâmetros do seu método personalizado pelo nome e os parâmetros do método PtInCircle.
Observação
Este exemplo usa a função InCircle
do artigo Eventos. Para mais informações sobre essa função, consulte o artigo Controles ActiveX MFC: adicionar eventos personalizados a um controle ActiveX.
Para adicionar o método personalizado PtInCircle usando o Assistente para adicionar método
Carregue o projeto do controle.
No Modo de Exibição de Classe, expanda o nó de biblioteca do controle.
Clique com o botão direito do mouse no nó de interface do controle (o segundo nó do nó da biblioteca) para abrir o menu de atalho.
No menu de atalho, clique em Adicionar e, em seguida, clique em Adicionar método.
Isso abrirá o Assistente para adicionar evento.
Na caixa Nome de método, digite PtInCircle.
Na caixa Nome interno, digite o nome da função interna do método ou use o valor padrão (nesse caso, PtInCircle).
Na caixa Tipo de retorno, clique em VARIANT_BOOL para o tipo de retorno do método.
Usando os controles Tipo de parâmetro e Nome do parâmetro, adicione um parâmetro chamado xCoord (tipo OLE_XPOS_PIXELS).
Usando os controles Tipo de parâmetro e Nome do parâmetro, adicione um parâmetro chamado yCoord (tipo OLE_YPOS_PIXELS).
Clique em Concluir.
Adicionar alterações de assistente de método para métodos personalizados
Quando você adiciona um método personalizado, o Assistente para adicionar método promove alterações nos arquivos de cabeçalho da classe de controle (.H) e de implementação (.CPP). A linha a seguir é adicionada à declaração do mapa de expedição no arquivo do cabeçalho da classe de controle (. H):
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Esse código declara um manipulador de método de expedição chamado PtInCircle
. Essa função pode ser chamada pelo usuário de controle usando o nome externo PtInCircle
.
A seguinte linha é adicionada ao arquivo .IDL do controle:
[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Essa linha atribui ao método PtInCircle
um número de ID específico, a posição do método na lista de propriedades e métodos 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 arquivo .IDL do projeto.
Além disso, a linha a seguir, localizada no arquivo de implementação (.CPP) da classe de controle, é adicionado ao mapa de expedição 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
à função de manipulador do controle, PtInCircle
declara o tipo de retorno como VARIANT_BOOL e declara dois parâmetros do tipo VTS_XPOS_PIXELS e VTS_YPOSPIXELS a serem passados para PtInCircle
.
Por fim, o Assistente para adicionar método adiciona a função stub CSampleCtrl::PtInCircle
à parte inferior do arquivo de implementação do controle (arquivo .CPP). Para que PtInCircle
funcione conforme indicado anteriormente, ele deve ser modificado da seguinte maneira:
VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPoint point(xCoord, yCoord);
return InCircle(point);
}
Confira também
Controles ActiveX do MFC
Ícones do Pesquisador de Objetos e do Modo de Exibição de Classe