Partilhar via


Controles ActiveX MFC: implementação da 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 novo desenvolvimento. Para mais informações sobre tecnologias modernas que substituem o ActiveX, confira Controles do ActiveX.

Propriedades somente leitura e somente gravação

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 controle (o segundo nó do nó da biblioteca) para abrir o menu de atalho.

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

    Isso abre o Assistente para Adicionar Propriedade.

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

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

  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 Set. 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 para ser somente leitura ou somente gravação, poderá editar o mapa de expedição de modo manual 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), poderá fornecer a função Set ou Get normalmente e chamar a função SetNotSupported ou GetNotSupported 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 dados m_bReadOnlyMode for TRUE. Se FALSE, a propriedade será definida como o novo valor.

Como retornar códigos de erro de uma propriedade

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

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

Observação

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

Para mais informações sobre como relatar exceções em outras áreas do código, confira COleControl::FireError e a seção Como tratar erros em seu controle ActiveX no artigo Controles ActiveX: tópicos avançados.

Confira também

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