Os controles ActiveX MFC: Adicionando métodos personalizado
Métodos personalizados diferem dos métodos de ações de eles já não são implementados por COleControl. Você deve fornecer a implementação de cada método personalizado que adicionar ao seu controle.
Um usuário do controle ActiveX pode chamar um método personalizado a qualquer momento para executar ações específicas do controle.A entrada de MAP de despacho para métodos personalizados é do formulário DISP_FUNCTION.
Adicionando um método personalizado com o Assistente de método
O procedimento a seguir demonstra como adicionar o 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 para o nome do método PtInCircle e parâmetros.
Observação: |
---|
Este exemplo usa o InCircle função do artigo eventos. Para obter mais informações sobre esta função, consulte o artigo Os controles ActiveX MFC: Adicionando eventos personalizados a um controle ActiveX. |
Para adicionar o método personalizado PtInCircle usando o Assistente para Adicionar método
Carregar projeto do controle.
No modo de exibição de classe, expandir o nó de biblioteca do seu controle.
clicar com o botão direito do mouse no nó de interface para o seu controle (o segundo nó do nó biblioteca) para em em aberto o menu de atalho.
No menu de atalho, clicar Adicionar e, em seguida, clicar Método Add.
Isso abre o Assistente para Adicionar método.
No Nome do método box, type PtInCircle.
No Nome interno caixa, digite o nome da função interna do método ou usar o valor padrão (no caso, PtInCircle).
No Tipo de retorno clicarVARIANT_BOOL para o tipo de retorno do método.
Usando o Tipo de parâmetro and Nome de parâmetro controles, adicionar um parâmetro chamado xCoord (tipo OLE_XPOS_PIXELS).
Usando o Tipo de parâmetro and Nome de parâmetro controles, adicionar um parâmetro chamado yCoord (tipo OLE_YPOS_PIXELS).
Clique em Finish.
Adicionar método Assistente alterações para métodos personalizados
Quando você adiciona um método personalizado, o Assistente para Adicionar método faz algumas alterações para o cabeçalho de classe de controle (.H) e arquivos de implementação (.CPP).A seguinte linha é adicionada à declaração de MAP de expedição no arquivo de cabeçalho (.H) de classe de controle:
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Esse código declara um manipulador de método de expedição denominado PtInCircle. Esta função pode ser chamada pelo usuário 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);
Esta linha atribui o método PtInCircle um número de ID específico, posição do método na lista de métodos e propriedades de 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 seguinte linha no arquivo de implementação (.CPP) da classe de controle, é adicionada ao MAP de despacho do controle:
DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
The DISP_FUNCTION macro mapeia o método PtInCircle para função de manipulador do controle, PtInCircle, declara o tipo de retorno para ser VARIANT_BOOLe declara dois parâmetros do tipo VTS_XPOS_PIXELS and VTS_YPOSPIXELS sejam passadas para PtInCircle.
Finalmente, o Assistente para Adicionar método adiciona a função de stub CSampleCtrl::PtInCircle para a parte inferior do arquivo de implementação (.CPP) do controle. For PtInCircle para funcionar sistema autônomo afirmado 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);
}