Compartilhar via


Os controles ActiveX MFC: Adicionar propriedades personalizadas

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

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

  • Adicionar propriedade de assistente alterações para propriedades personalizadas

Propriedades personalizadas têm quatro variedades de implementação: Variável de membro, a variável de membro com notificação, métodos get/conjunto e parametrizados.

  • Implementação de variável de membro

    Essa implementação representa o estado da propriedade sistema autônomo uma variável de membro na classe controle.Use a implementação da variável de membro quando não é importante saber quando o valor da propriedade será 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 MAP de despacho para implementação de variável de membro é DISP_PROPERTY.

  • Variável de membro com a 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 após a alteração do valor da propriedade.Use a variável de membro com a implementação de notificação quando precisar ser notificado depois que um valor da propriedade é alterada.Essa implementação requer mais time porque requer uma telefonar de função.A macro de entrada de MAP de despacho para essa implementação é DISP_PROPERTY_NOTIFY.

  • Obtém/define métodos de implementação

    Essa implementação consiste em um emparelhar 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 corrente da propriedade e a função de membro do conjunto quando usuário do controle de solicita que a propriedade ser alterada.Use essa implementação quando você precisa calcular o valor de uma propriedade durante o time de execução, validar um valor passado pelo usuário do controle antes de alterar a propriedade real ou implementar um tipo de propriedade de leitura ou somente gravar.A macro de entrada de MAP de despacho para essa implementação é DISP_PROPERTY_EX.A seção a seguir, Usando a propriedade de Assistente 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 é compatível com o Assistente para adicionar propriedade.Uma propriedade parametrizada (às vezes chamada de uma matriz de propriedade) pode ser usada para acessar um conjunto de valores por meio de uma única propriedade de seu controle.A macro de entrada de MAP de despacho para essa implementação é DISP_PROPERTY_PARAM. Para obter mais informações sobre a implementação desse tipo, consulte Implementação de uma propriedade parametrizada no artigo controles ActiveX: Tópicos avançados.

Usando a propriedade de Assistente para adicionar uma propriedade personalizada

O procedimento a seguir demonstra a adição de uma propriedade personalizada, CircleOffset, que usa a implementação de métodos get/conjunto.A propriedade personalizada CircleOffset permite que usuário do controle deslocar o círculo do centralizar do retângulo delimitador do controle.O procedimento para adicionar propriedades personalizadas com uma implementação Outros de métodos get/conjunto é muito semelhante.

Este mesmo procedimento também pode ser usado para adicionar outras propriedades personalizadas que você deseja.Substitua a propriedade personalizada nome o nome da propriedade CircleOffset e os 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, expandir o nó de biblioteca do seu controle.

  3. 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.

  4. No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar propriedade.

    Isso abre o Adicionar Assistente de propriedade.

  5. No Nome da propriedade box, type CircleOffset.

  6. For Tipo de implementação, clicar Obtém/define métodos.

  7. No Tipo da propriedade caixa de seleção curto.

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

  9. Clique em Finish.

Adicionar propriedade Changes assistente para propriedades personalizadas

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

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

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

A seguinte linha é adicionada ao arquivo .IDL do controle:

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

Esta linha atribui a propriedade CircleOffset um número de ID específico, obtido 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 MAP de despacho (no arquivo .CPP da classe de controle) 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 do GetCircleOffset e SetCircleOffset funções são adicionadas ao participante do arquivo .CPP do controle. Na maioria dos casos, você modificará a função get para retornar o valor da propriedade.A função conjunto geralmente irá conter código que deve ser executado antes ou após as alterações na 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 telefonar para SetModifiedFlag, ao corpo da função conjunto.Chamar essa função marca do controle sistema autônomo 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 sistema autônomo parte de estado persistente do controle, altera o valor.

Consulte também

Conceitos

Controles do ActiveX MFC

Os controles ActiveX MFC: Propriedades

Os controles ActiveX MFC: Métodos

Referência

Classe COleControl