Visão Geral de Aplicativos de Formulários do Windows e Aplicativos Não Gerenciados
Aplicativos e controles de Formulários do Windows podem interagir com aplicativos não gerenciados, com algumas restrições. As seções seguintes descrevem os cenários e configurações que as aplicações e os controles de Formulários do Windows suportam e os que os mesmos não suportam.
Controles de Formulários do Windows e Aplicativos ActiveX
Com a exceção do Microsoft Internet Explorer e das Microsoft Foundation Classes (MFC), os controles de Formulários do Windows não são suportados em aplicativos projetados para hospedar controles ActiveX. Outros aplicativos e ferramentas de desenvolvimento que são capazer de hospedar controles ActiveX, inclusive os recipientes de teste ActiveX de versões do Visual Studio que são anteriores ao Visual Studio.NET 2003, não são hosts com suporte para controles de Formulários do Windows.
Esta restrição também se aplica ao uso de controles de Formulários do Windows através do Component Object Model COM interop. O uso de um contrle de Formulários do Windows através de CCW (COM Callable Wrapper) possui suporte apenas no Internet Explorer. Para obter mais informações sobre COM interop., veja Sobre Rastramento SQL
Interoperabilidade COM (Visual Basic) e Interoperabilidade de COM avançadas.
A tabela seguinte mostra o suporte à hospedagem de controles de Formulários do Windows disponível.
Versão dos Formulários do Windows. |
Suporte |
---|---|
.NET Framework versão 1.0. |
Internet Explorer 5.01 e versões posteriores. |
NET Framework versão 1.1 e posteriores |
Internet Explorer 5.01 e versões posteriores. Microsoft Foundation Classes(MFC) 7.0 e posteriores |
Hospedando componentes de Formulários do Windows como controles ActiveX
No .NET Framework 1.1, o suporte foi estendido para incluir MFC 7.0 e versões posteriores. Esse suporte inclui qualquer recipiente que é totalmente compatível com o MFC 7.0 e recipientes de controles ActiveX posteriores.
No entanto, o registro de Formulários do Windows controles como controles ActiveX não é suportado. Além disso, não há suporte para chamar o método com.ms.win32.Ole32.CoCreateInstance para controles Formulários do Windows. Somente a ativação gerenciada de controles de Formulários do Windows é suportada. Uma vez que você criou um controle Formulários do Windows, você pode hospedá-lo em um aplicativo MFC assim como um controle ActiveX.
Para usar controles Formulários do Windows no seu aplicativo não gerenciado, você deve ou hospedar o CLR usando as APis de hospedagem de CLR não gerenciado ou usar os recursos de interoperabilidade C++. Usar os recursos de interoperabilidade C++ é a solução recomendada.
Formulários do Windows em aplicativos cliente COM
Quando você abre um Formulário do Windows de um aplicativo cliente COM, como um aplicativo Visual Basic 6.0 ou um aplicativo MFC, o formulário pode comportar-se de maneira inesperada. Por exemplo, quando você pressiona a tecla Tab, o foco não muda de um controle para outro controle. Quando você pressiona a tecla ENTER enquanto um botão de comando tiver o foco, o evento do Click botão não é gerado. Você também pode enfrentar um comportamento inesperado por pressionamento de teclas ou de atividade do mouse.
Esse comportamento ocorre porque o aplicativo não gerenciado não implementa o suporte de loop de mensagens que os Formulários do Windows necessitam para funcionar corretamente. O loop de mensagens fornecido pelo aplicativo cliente COM é fundamentalmente diferente do loop de mensagens dos Formulários do Windows.
O loop de mensagens do aplicativo é um loop interno do programa que recupera as mensagens da fila de mensagens de um thread, tradu-las, e as envia para o aplicativo para serem tratadas. O loop de mensagens para um Formulário do Windows não tem a mesma arquitetura que os loops de mensagens que aplicativos anteriores, como aplicativos Visual Basic 6.0 e aplicativos MFC, fornecem. As mensagens em janelas que são postadas para o loop de mensagens podem ser tratadas de forma diferente que Formulário do Windows espera. Portanto, pode ocorrer um comportamento inesperado. Algumas combinações de teclas podem não funcionar, alguma atividade do mouse pode não funcionar, ou alguns eventos não podem ser gerados como esperado.
Resolvendo Problemas de Interoperabilidade
Você pode resolver esses problemas, exibindo a forma em uma .NET Framework mensagem executar um loop, que é criado usando o método Application.Run.
Para fazer um Formuláriodo do Windows funcionar corretamente de um aplicativo cliente COM, você deve executá-lo em um loop de mensagem dos Formulários do Windows. Para fazer isso, use uma das seguintes abordagens:
Use o método Form.ShowDialog para exibir um Formulário do Windows. Para obter mais informações, consulte Como: Suporte para interoperabilidade COM, exibindo um formulário do Windows com o método ShowDialog.
Exiba cada Formulário do Windows em um novo thread. Para obter mais informações, consulte Como: Suporte para interoperabilidade COM, exibindo cada Windows Form em seu próprio segmento.
Consulte também
Tarefas
Como: Suporte para interoperabilidade COM, exibindo um formulário do Windows com o método ShowDialog
Como: Suporte para interoperabilidade COM, exibindo cada Windows Form em seu próprio segmento
Referência
Aximp. exe (Importador de controle de ActiveX do Windows Forms)
Conceitos
Expondo.NET Framework para COM
Empacotamento de um Assembly para COM
Outros recursos
Formulários do Windows e Aplicativos Não Gerenciados
Interoperabilidade COM (Visual Basic)
Interoperabilidade de COM avançadas
Interoperabilidade COM em aplicativos .NET Framework (Visual Basic)