Controles ActiveX 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 que pode ser personalizado para atender às várias necessidades de software.
Importante
O ActiveX é uma tecnologia herdada que não deve ser usada para novo desenvolvimento. Para obter mais informações, confira Controles ActiveX.
Os controles ActiveX foram projetados para uso em contêineres comuns de controle ActiveX e na Internet em páginas da World Wide Web. Você pode criar controles ActiveX com o MFC, descrito aqui ou com a Active Template Library (ATL).
Um controle ActiveX pode desenhar-se 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 de objetos de Automação.
Esses controles podem ser desenvolvidos para muitos usos, como acesso ao banco de dados, monitoramento de dados ou gráfico. Além de sua portabilidade, os controles ActiveX suportam 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 oferece 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 do controle.
Você pode criar controles ActiveX sem janelas e controles que só criam uma janela quando se tornam ativos. Os controles sem janelas aceleram a exibição do aplicativo e possibilitam ter controles transparentes e não retangulares. Você também pode carregar 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 reconhecer os controles ActiveX. Consulte Controles ActiveX de Porta para outros aplicativos para obter uma lista de contêineres que oferecem suporte a controles ActiveX. Esse tipo de contêiner, daqui em diante chamado 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 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 MFC: Otimização.
Para criar um controle ActiveX MFC, consulte Criar um projeto de controle ActiveX.
Para saber mais, veja:
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. Eles são a classe COleControl, um conjunto de funções de disparo 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 MFC: Eventos.
O elemento final é um mapa de expedição, que é usado para expor um conjunto de funções (chamados de 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 ou fazer solicitações, 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 Controles ActiveX MFC: 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 dispara eventos. A figura a seguir demonstra como esses dois mecanismos são implementados.
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 pelos 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 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 se distinguiam pelo fato de o controle ter ou não 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 do contêiner. Você também pode fornecer interação do mouse para controles inativos, além de criar controles que aguardem até serem 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 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 então 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 MFC: Serialização. 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 em tempo de execução do controle ActiveX de varejo e depuração são instaladas automaticamente se os controles ActiveX forem 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\Ferramentas
Contém os arquivos do Contêiner de Teste (TstCon32.exe, assim como seus arquivos de Ajuda).
\Vc7\atlmfc\include
Contém os arquivos de inclusão necessários para desenvolver controles ActiveX com o 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: controles ActiveX baseados em MFC