Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As propriedades personalizadas diferem das propriedades de estoque em que as propriedades personalizadas ainda não são implementadas pela COleControl classe. Uma propriedade personalizada é usada para expor um determinado estado ou aparência de um controle ActiveX a 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:
Usando o Assistente para Adicionar Propriedade para adicionar uma propriedade personalizada
Adicionar alterações do Assistente de Propriedade para propriedades personalizadas
As propriedades personalizadas vêm em quatro variedades de implementação: Variável de Membro, Variável de Membro com Notificação, Métodos Get/Set e Parametrizados.
Implementação de variável de membro
Essa implementação representa o estado da propriedade como uma variável de membro na classe de controle. Use a implementação da Variável de Membro quando não for importante saber quando o valor da propriedade é alterado. 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 expedição para implementação de variável de membro é DISP_PROPERTY.
Variável de membro com implementação de notificação
Essa implementação consiste em uma variável de membro e uma função de notificação criada pelo Assistente para Adicionar Propriedade. A função de notificação é chamada automaticamente pela estrutura depois que o valor da propriedade é alterado. Use a variável de membro com implementação de notificação quando precisar ser notificado depois que um valor de propriedade for alterado. Essa implementação requer mais tempo porque requer uma chamada de função. A macro de entrada do mapa de expedição para essa 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 de Métodos Get/Set chama automaticamente a função Get member quando o usuário do controle solicita o valor atual da propriedade e a função Definir membro 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 expedição para essa implementação é DISP_PROPERTY_EX. A seção a seguir, Usando o Assistente para Adicionar Propriedade para Adicionar uma Propriedade Personalizada, usa a propriedade personalizada CircleOffset para demonstrar essa implementação.
Implementação parametrizada
A implementação parametrizada é compatível com o 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 controle. A macro de entrada do mapa de expedição para essa 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 para Adicionar 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 compense o círculo do centro do retângulo delimitador do controle. O procedimento para adicionar propriedades personalizadas com uma implementação diferente de Métodos Get/Set é muito semelhante.
Esse mesmo procedimento também pode ser usado para adicionar outras propriedades personalizadas desejadas. Substitua o nome da propriedade personalizada pelo nome e parâmetros da propriedade CircleOffset.
Para adicionar a propriedade personalizada CircleOffset usando o Assistente para Adicionar Propriedade
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 seu controle (o segundo nó do nó da biblioteca) para abrir o menu de atalho.
No menu de atalho, clique em Adicionar e clique em Adicionar Propriedade.
Isso abre o Assistente para Adicionar Propriedade.
Na caixa Nome da Propriedade , digite CircleOffset.
Para o Tipo de Implementação, clique em Obter/Definir Métodos.
Na caixa Tipo de Propriedade , selecione
short.Digite nomes exclusivos para suas funções Get e Set ou aceite os nomes padrão.
Clique em Concluir.
Adicionar alterações do Assistente de Propriedade para Propriedades Personalizadas
Quando você adiciona a propriedade personalizada CircleOffset, o Assistente para Adicionar Propriedade faz alterações no cabeçalho (. H) e a implementação (. Arquivos CPP) da classe de controle.
As linhas a seguir são adicionadas ao . Arquivo H para declarar duas funções chamadas GetCircleOffset e SetCircleOffset:
SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);
A linha a seguir é adicionada ao controle. Arquivo IDL:
[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;
Essa linha atribui à propriedade CircleOffset um número de ID específico, extraído da posição do método na lista de métodos e propriedades do Assistente para Adicionar Propriedade.
Além disso, a linha a seguir é adicionada ao mapa de expedição (no . Arquivo CPP da classe de controle) para mapear a propriedade CircleOffset para as duas funções de manipulador do controle:
DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
Por fim, as implementações do e SetCircleOffset das GetCircleOffset funções são adicionadas ao final do controle. Arquivo CPP. 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.
Consulte também
Controles MFC ActiveX
Controles ActiveX do MFC: Propriedades
Controles ActiveX do MFC: métodos
Classe COleControl