Controles de ActiveX MFC: Adicionar propriedades personalizadas

Propriedades personalizadas diferem das propriedades de ações que propriedades personalizadas já não são 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 para o controle de ActiveX usando o Assistente para adicionar propriedade e explica as modificações de código resultante.Os tópicos incluem:

  • Usando o Assistente para adicionar propriedade para adicionar uma propriedade personalizada

  • Adicionar propriedade Assistente alterações para propriedades personalizadas

Propriedades personalizadas são fornecidos em quatro variedades de implementação: variável de membro, variável de membro com notificação, métodos Get/Set e Parameterized.

  • 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 de variável de membro quando não é importante saber quando o valor da propriedade alterada.Dos três tipos, essa implementação cria a menor quantidade de código de suporte para a propriedade.A macro de entrada de mapa de despacho 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 criado pelo Assistente para adicionar propriedade.A função de notificação é chamada automaticamente pela estrutura após as alterações de valor da propriedade.Use a variável de membro com implementação de notificação quando você precisar ser notificado após um valor de propriedade foi alterada.Essa implementação requer mais tempo porque requer uma chamada de função.A macro de entrada de mapa de despacho desta 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 automaticamente chama o membro Get funcionam quando o usuário do controle solicita o valor atual da propriedade e a função de membro do conjunto quando o usuário do controle solicita a propriedade ser alterada.Use essa implementação quando você precisa para calcular o valor de uma propriedade de tempo de execução, validar um valor passado por usuário do controle antes de alterar a propriedade real ou implementar um tipo de propriedade ou gravação-somente leitura.A macro de entrada de mapa de despacho desta 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 com parâmetros

    Implementação com parâmetros é suportada pelo Assistente para adicionar propriedade.Uma propriedade parametrizada (às vezes chamada de uma matriz de propriedade) pode ser usada para acessar um conjunto de valores através de uma única propriedade de seu controle.A macro de entrada de mapa de despacho desta implementação é DISP_PROPERTY_PARAM.Para obter mais informações sobre a implementação desse tipo, consulte Implementando uma propriedade parametrizada no artigo ActiveX controles: tópicos avançados.

Usando o Assistente de propriedade para adicionar uma propriedade personalizada para adicionar

O procedimento a seguir demonstra a adição de uma propriedade personalizada, CircleOffset, que usa a implementação de métodos Get/Set.A propriedade personalizada CircleOffset permite que usuário do controle deslocar 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.

Este mesmo procedimento também pode ser usado para adicionar outras propriedades personalizadas que você deseja.Substitua o nome de propriedade personalizada para o nome da propriedade CircleOffset e parâmetros.

Para adicionar a propriedade personalizada CircleOffset usando o Assistente para adicionar propriedade

  1. Carregar projeto do controle.

  2. No modo de exibição de classe, expanda o nó da biblioteca do seu controle.

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

  4. No menu de atalho, clique em Add e clique em Adicionar propriedade de.

    Isso abre o Assistente para adicionar propriedade.

  5. No O nome da propriedade , digite CircleOffset.

  6. Para O tipo de implementação, clique Métodos Get/Set.

  7. No Tipo de propriedade caixa, selecione curto.

  8. Digite nomes exclusivos para seu Get e Set funções ou aceitar os nomes padrão.

  9. Clique em Concluir.

Adicionar propriedade Assistente alterações para propriedades personalizadas

Quando você adiciona a propriedade personalizada CircleOffset, o Assistente para adicionar propriedade faz alterações para o cabeçalho (.H) e a implementação (.Arquivos CPP) da classe control.

As seguintes linhas são adicionadas para o.Arquivo h para declarar duas funções chamadas GetCircleOffset e SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

A seguinte linha ao seu controle.Arquivo IDL:

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

Esta linha atribui a propriedade CircleOffset um número de identificação específico, extraído 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 (da.Arquivo CPP da classe control) para mapear a propriedade CircleOffset para duas funções de manipulador do controle:

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

Finalmente, as implementações de GetCircleOffset e SetCircleOffset funções são adicionadas ao final do controle.Arquivo CPP.Na maioria dos casos, você modificará a função de Get para retornar o valor da propriedade.A função de conjunto normalmente conterá código que deve ser executado antes ou após as 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 para SetModifiedFlag, no corpo da função conjunto.Chamar esta função marca o controle como modificadas.Se um controle tiver sido modificado, o novo estado será salvo quando o contêiner é salvo.Esta função deve ser chamada sempre que uma propriedade, salva como parte do estado persistente do controle, altera o valor.

Consulte também

Referência

Classe COleControl

Conceitos

Controles de ActiveX do MFC

Controles de ActiveX MFC: propriedades

Controles de ActiveX MFC: métodos