Compartilhar via


Controles ActiveX do MFC: implementação de propriedade avançada

Este artigo descreve tópicos relacionados à implementação de propriedades avançadas em um controle ActiveX.

Importante

O ActiveX é uma tecnologia herdada que não deve ser usada para o novo desenvolvimento. Para obter mais informações sobre tecnologias modernas que substituem o ActiveX, consulte Controles ActiveX.

Propriedades Read-Only e Write-Only

O Assistente para Adicionar Propriedade fornece um método rápido e fácil para implementar propriedades somente leitura ou somente gravação para o controle.

Para implementar uma propriedade somente leitura ou somente gravação

  1. Carregue o projeto do controle.

  2. No Modo de Exibição de Classe, expanda o nó de biblioteca do controle.

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

  4. No menu de atalho, clique em Adicionar e clique em Adicionar Propriedade.

    Isso abre o Assistente para Adicionar Propriedade.

  5. Na caixa Nome da Propriedade , digite o nome da sua propriedade.

  6. Para o Tipo de Implementação, clique em Obter/Definir Métodos.

  7. Na caixa Tipo de Propriedade , selecione o tipo adequado para a propriedade.

  8. Se você quiser uma propriedade somente leitura, desmarque o nome da função Definir. Se você quiser uma propriedade somente gravação, desmarque o nome da função Get.

  9. Clique em Concluir.

Quando você faz isso, o Assistente para Adicionar Propriedade insere a função SetNotSupported ou GetNotSupported na entrada do mapa de expedição no lugar de uma função Normal Set ou Get.

Se você quiser alterar uma propriedade existente para ser somente leitura ou somente gravação, poderá editar o mapa de expedição manualmente e remover a função Set ou Get desnecessária da classe de controle.

Se você quiser que uma propriedade seja somente leitura condicional ou somente gravação (por exemplo, somente quando o controle estiver operando em um modo específico), você poderá fornecer a função Definir ou Obter, normalmente, e chamar a função ou GetNotSupported a SetNotSupported função quando apropriado. Por exemplo:

void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   if (m_bReadOnlyMode)   //  some control-specific state
   {
      SetNotSupported();
   }
   else
   {
      m_iPropVal = newVal;   //  set property as normal
      SetModifiedFlag();
   }
}

Esse exemplo de código chamará SetNotSupported se o membro de m_bReadOnlyMode dados for TRUE. Se FALSE, a propriedade será definida como o novo valor.

Retornando códigos de erro de uma propriedade

Para indicar que ocorreu um erro ao tentar obter ou definir uma propriedade, use a COleControl::ThrowError função, que usa um SCODE (código de status) como um parâmetro. Você pode usar um SCODE predefinido ou definir um dos seus. Para obter uma lista de SCODEs predefinidos e instruções para definir SCODEs personalizados, consulte Tratamento de erros em seu controle ActiveX no artigo Controles ActiveX: Tópicos Avançados.

Existem funções auxiliares para os SCODEs predefinidos mais comuns, como COleControl::SetNotSupported, COleControl::GetNotSupported e COleControl::SetNotPermitted.

Observação

ThrowError destina-se a ser usado apenas como um meio de retornar um erro de dentro da função Get ou Set de uma propriedade ou um método de automação. Estas são as únicas vezes em que o manipulador de exceção apropriado estará presente na pilha.

Para obter mais informações sobre como relatar exceções em outras áreas do código, consulte COleControl::FireError e a seção Manipulando erros em seu controle ActiveX no artigo Controles ActiveX: Tópicos Avançados.

Consulte também

Controles MFC ActiveX
Controles ActiveX do MFC: Propriedades
Controles ActiveX do MFC: métodos
Classe COleControl