Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As propriedades personalizadas diferem das propriedades de estoque porque as propriedades personalizadas ainda não foram implementadas pela COleControl classe. Uma propriedade personalizada é usada para expor um determinado estado ou aparência de um controle ActiveX para um programador usando o controle.
Este artigo descreve como adicionar uma propriedade personalizada ao controle ActiveX usando o Assistente para Adicionar Propriedade e explica as modificações de código resultantes. Os tópicos incluem:
Usar o Assistente de Adição de Propriedades para adicionar uma propriedade personalizada
Adicionar alterações do Assistente de Propriedades para propriedades personalizadas
As propriedades personalizadas vêm em quatro variedades de implementação: Variável Membro, Variável Membro com Notificação, Métodos Get/Set, e Parametrizada.
Implementação da variável membro
Essa implementação representa o estado da propriedade como uma variável membro na classe de controle. Use a implementação da variável Member quando não for importante saber quando o valor da propriedade muda. Dos três tipos, essa implementação cria a menor quantidade de código de suporte para a propriedade. A macro de entrada do mapa de despacho para implementação da variável membro é DISP_PROPERTY.
Variável de Membro com Implementação de Notificação
Implementação consiste numa variável de membro e numa função de notificação criada pelo Assistente de Adição de Propriedades. A função de notificação é chamada automaticamente pela estrutura depois que o valor da propriedade é alterado. Use a implementação Variável Membro com Notificação quando precisar ser notificado depois que o valor de uma propriedade for alterado. Esta implementação requer mais tempo porque requer uma chamada de função. A macro de entrada do mapa de despacho para esta implementação é DISP_PROPERTY_NOTIFY.
Implementação de métodos Get/set
Essa implementação consiste em um par de funções de membro na classe de controle. A implementação Get/set Methods chama automaticamente a função Get member quando o usuário do controle solicita o valor atual da propriedade e a função set member quando o usuário do controle solicita que a propriedade seja alterada. Use essa implementação quando precisar calcular o valor de uma propriedade durante o tempo de execução, validar um valor passado pelo usuário do controle antes de alterar a propriedade real ou implementar um tipo de propriedade somente leitura ou gravação. A macro de entrada do mapa de despacho para esta implementação é DISP_PROPERTY_EX. A seção a seguir, Usando o Assistente de Adição de Propriedades para Adicionar uma Propriedade Personalizada, usa a propriedade personalizada CircleOffset para demonstrar esta implementação.
Implementação Parametrizada
A implementação parametrizada é suportada pelo Assistente para Adicionar Propriedade. Uma propriedade parametrizada (às vezes chamada de matriz de propriedades) pode ser usada para acessar um conjunto de valores por meio de uma única propriedade do seu controle. A macro de entrada do mapa de despacho para a esta implementação é DISP_PROPERTY_PARAM. Para obter mais informações sobre como implementar esse tipo, consulte Implementando uma propriedade parametrizada no artigo Controles ActiveX: tópicos avançados.
Usando o Assistente de Adição de Propriedade para Adicionar uma Propriedade Personalizada
O procedimento a seguir demonstra a adição de uma propriedade personalizada, CircleOffset, que usa a implementação Get/set Methods. A propriedade personalizada CircleOffset permite que o usuário do controle desloque o círculo do centro do retângulo delimitador do controle. O procedimento para adicionar propriedades personalizadas com uma implementação diferente de Get/set Methods é muito semelhante.
Esse mesmo procedimento também pode ser usado para adicionar outras propriedades personalizadas desejadas. Substitua o seu nome de propriedade personalizada pelo nome e parâmetros da propriedade CircleOffset.
Para adicionar a propriedade personalizada CircleOffset usando o Assistente de Adição de Propriedades
Carregue o projeto do seu controlador.
Na Vista de Classe, expanda o nó da biblioteca do seu controle.
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.
No menu de atalho, clique em Adicionar e, em seguida, clique em Adicionar propriedade.
Isso abre o Assistente para Adicionar Propriedade.
Na caixa Nome da propriedade , digite CircleOffset.
Para Tipo de implementação, clique em Obter/definir métodos.
Na caixa Tipo de propriedade , selecione
short.Digite nomes exclusivos para as funções Obter e Definir ou aceite os nomes padrão.
Clique em Concluir.
Assistente para Adicionar Alterações a Propriedades Personalizadas
Quando se adiciona a propriedade personalizada CircleOffset, o Assistente de Adição de Propriedades faz alterações no cabeçalho (.H) e na implementação (.CPP) da classe de controlo.
As seguintes linhas são adicionadas ao . H para declarar duas funções chamadas GetCircleOffset e SetCircleOffset:
SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);
A linha seguinte é adicionada ao ficheiro .IDL do seu controlo.
[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;
Esta linha atribui à propriedade CircleOffset um número de ID específico, retirado da posição do método na lista de métodos e propriedades do Assistente para Adicionar Propriedade.
Além disso, a seguinte linha é adicionada ao mapa de despacho (no arquivo .CPP da classe de controlo) para mapear a propriedade CircleOffset às duas funções gestoras do controlo:
DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
Finalmente, as implementações das funções GetCircleOffset e SetCircleOffset são adicionadas ao final do arquivo .CPP do controle. Na maioria dos casos, você modificará a função Get para retornar o valor da propriedade. A função set geralmente conterá código que deve ser executado antes ou depois das alterações de propriedade.
void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Observe que o Assistente para Adicionar Propriedade adiciona automaticamente uma chamada a SetModifiedFlag ao corpo da função Set. Chamar essa função marca o controle como modificado. Se um controle tiver sido modificado, seu novo estado será salvo quando o contêiner for salvo. Essa função deve ser chamada sempre que uma propriedade, salva como parte do estado persistente do controle, altera o valor.
Ver também
Controles ActiveX MFC
Controles ActiveX MFC: Propriedades
Controles ActiveX MFC: Métodos
Classe COleControl