Compartilhar via


Controles ActiveX do MFC

Um controle ActiveX é um componente de software reutilizável baseado no COM (Component Object Model) que dá suporte a uma ampla variedade de funcionalidades OLE e pode ser personalizado para atender a muitas necessidades de software.

Importante

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

Os controles ActiveX são projetados para uso em contêineres de controle ActiveX comuns e na Internet, em páginas da World Wide Web. Você pode criar controles ActiveX com o MFC, descrito aqui ou com a ATL (Biblioteca de Modelos Ativos).

Um controle ActiveX pode se desenhar em sua própria janela, responder a eventos (como cliques do mouse) e ser gerenciado por meio de uma interface que inclui propriedades e métodos semelhantes aos dos objetos de Automação.

Esses controles podem ser desenvolvidos para muitos usos, como acesso ao banco de dados, monitoramento de dados ou grafo. Além de sua portabilidade, os controles ActiveX dão suporte a recursos anteriormente não disponíveis para controles ActiveX, como compatibilidade com contêineres OLE existentes e a capacidade de integrar seus menus com os menus de contêiner OLE. Além disso, um controle ActiveX dá suporte total à Automação, que permite que o controle exponha propriedades de leitura/gravação e um conjunto de métodos que podem ser chamados pelo usuário de controle.

Você pode criar controles e controles ActiveX sem janelas que só criam uma janela quando eles se tornam ativos. Os controles sem janela aceleram a exibição do aplicativo e possibilitam ter controles transparentes e não retangulares. Você também pode carregar as propriedades de controle ActiveX de forma assíncrona.

Um controle ActiveX é implementado como um servidor em processo (normalmente um objeto pequeno) que pode ser usado em qualquer contêiner OLE. Observe que a funcionalidade completa de um controle ActiveX está disponível somente quando usada em um contêiner OLE projetado para estar ciente dos controles ActiveX. Consulte Os Controles ActiveX de Porta para Outros Aplicativos para obter uma lista de contêineres que dão suporte a controles ActiveX. Esse tipo de contêiner, chamado posteriormente de "contêiner de controle", pode operar um controle ActiveX usando as propriedades e métodos do controle e recebe notificações do controle ActiveX na forma de eventos. A figura a seguir demonstra essa interação.

Interação de controle e contêiner de controle ActiveX.
Interação entre um contêiner de controle ActiveX e um controle ActiveX com janelas

Para obter algumas informações recentes sobre como otimizar seus controles ActiveX, consulte Controles ActiveX do MFC: Otimização.

Para criar um controle ActiveX do MFC, consulte Criar um projeto de controle ActiveX.

Para obter mais informações, consulte:

Componentes básicos de um controle ActiveX

Um controle ActiveX usa vários elementos programáticos para interagir com eficiência com um contêiner de controle e com o usuário. Estas são a classe COleControl, um conjunto de funções de acionamento de eventos e um mapa de expedição.

Cada objeto de controle ActiveX que você desenvolve herda um conjunto poderoso de recursos de sua classe base MFC. COleControl Esses recursos incluem ativação in-loco e lógica de Automação. COleControl pode fornecer ao objeto de controle a mesma funcionalidade que um objeto de janela MFC, além da capacidade de disparar eventos. COleControl também pode fornecer controles sem janelas, que dependem de seu contêiner para obter ajuda com algumas das funcionalidades que uma janela fornece (captura do mouse, foco do teclado, rolagem), mas oferecem uma exibição muito mais rápida.

Como a classe de controle deriva de COleControl, ela herda a capacidade de enviar ou "disparar", mensagens, chamadas de eventos, para o contêiner de controle quando determinadas condições são atendidas. Esses eventos são usados para notificar o contêiner de controle quando algo importante acontece no controle. Você pode enviar informações adicionais sobre um evento para o contêiner de controle anexando parâmetros ao evento. Para obter mais informações sobre eventos de controle ActiveX, consulte o artigo Controles ActiveX do MFC: Eventos.

O elemento final é um mapa de expedição, que é usado para expor um conjunto de funções (chamados métodos) e atributos (chamados de propriedades) ao usuário de controle. As propriedades permitem que o contêiner de controle ou o usuário de controle manipule o controle de várias maneiras. O usuário pode alterar a aparência do controle, alterar determinados valores do controle ou fazer solicitações do controle, como acessar um dado específico que o controle mantém. Essa interface é determinada pelo desenvolvedor de controle e é definida usando o Modo de Exibição de Classe. Para obter mais informações sobre métodos e propriedades de controle ActiveX, consulte os artigos MFC ActiveX Controls: Métodos e Propriedades.

Interação entre controles com contêineres de controle Do Windows e ActiveX

Quando um controle é usado em um contêiner de controle, ele usa dois mecanismos para se comunicar: expõe propriedades e métodos e aciona eventos. A figura a seguir demonstra como esses dois mecanismos são implementados.

O controle ActiveX se comunica com seu contêiner.
Comunicação entre um contêiner de controle ActiveX e um controle ActiveX

A figura anterior também ilustra como outras interfaces OLE (além de automação e eventos) são tratadas por controles.

Toda a comunicação de um controle com o contêiner é executada por COleControl. Para lidar com algumas das solicitações do contêiner, COleControl chamará as funções de membro que são implementadas na classe de controle. Todos os métodos e algumas propriedades são tratados dessa forma. A classe do controle também pode iniciar a comunicação com o contêiner chamando funções de membro de COleControl. Os eventos são disparados dessa maneira.

Estados ativos e inativos de um controle ActiveX

Um controle tem dois estados básicos: ativo e inativo. Tradicionalmente, esses estados eram distinguidos por se o controle tinha uma janela. Um controle ativo tinha uma janela; um controle inativo não. Com a introdução da ativação sem janelas, essa distinção não é mais universal, mas ainda se aplica a muitos controles.

Quando um controle sem janelas fica ativo, ele invoca a captura do mouse, o foco do teclado, a rolagem e outros serviços de janela de seu contêiner. Você também pode fornecer interação com o mouse para controles inativos, bem como criar controles que esperam até que sejam ativados para criar uma janela.

Quando um controle com uma janela se torna ativo, ele é capaz de interagir totalmente com o contêiner de controle, o usuário e o Windows. A figura a seguir demonstra os caminhos de comunicação entre o controle ActiveX, o contêiner de controle e o sistema operacional.

Processamento msg no controle ActiveX com janelas ativas.
Processamento de mensagens do Windows em um controle ActiveX com janelas (quando ativo)

Serialização

A capacidade de serializar dados, às vezes chamados de persistência, permite que o controle escreva o valor de suas propriedades no armazenamento persistente. Os controles podem ser recriados lendo o estado do objeto do armazenamento.

Observe que um controle não é responsável por obter acesso ao meio de armazenamento. Em vez disso, o contêiner do controle é responsável por fornecer o controle com um meio de armazenamento a ser usado nos momentos apropriados. Para obter mais informações sobre serialização, consulte o artigo Controles ActiveX do MFC: Serializando. Para obter informações sobre como otimizar a serialização, consulte Otimizando a persistência e a inicialização em controles ActiveX: otimização.

Instalando classes e ferramentas de controle ActiveX

Quando você instala o Visual C++, as classes de controle ActiveX do MFC e as DLLs de tempo de execução do controle ActiveX de varejo e depuração são instaladas automaticamente se os controles ActiveX são selecionados na Instalação (eles são selecionados por padrão).

Por padrão, as classes e as ferramentas de controle ActiveX são instaladas nos seguintes subdiretórios em \Arquivos de Programas\Microsoft Visual Studio .NET:

  • \Common7\Tools

    Contém os arquivos de Contêiner de Teste (TstCon32.exe, bem como seus arquivos de Ajuda).

  • \Vc7\atlmfc\include

    Contém os arquivos de inclusão necessários para desenvolver controles ActiveX com MFC

  • \Vc7\atlmfc\src\mfc

    Contém o código-fonte para classes de controle ActiveX específicas no MFC

  • \Vc7\atlmfc\lib

    Contém as bibliotecas necessárias para desenvolver controles ActiveX com o MFC

Também há exemplos para controles ActiveX do MFC. Para obter mais informações sobre esses exemplos, consulte Exemplos de controles: MFC-Based controles ActiveX

Consulte também

Elementos de interface de usuário