Compartilhar via


Visão geral sobre aplicativos do Windows Forms e aplicativos não gerenciados

Aplicativos do Windows Forms e controles podem interoperar com aplicativos não gerenciados, com algumas restrições. As seções a seguir descrevem os cenários e as configurações com suporte em controles e aplicativos do Windows Forms e aqueles que não têm suporte.

Aplicativos ActiveX e controles do Windows Forms

Com exceção do Microsoft Internet Explorer e MFC (Microsoft Foundation Classes), não há suporte aos controles do Windows Forms em aplicativos projetados para hospedar controles ActiveX. Outros aplicativos e ferramentas de desenvolvimento que são capazes de hospedar controles ActiveX, inclusive os contêineres de teste ActiveX de versões do Visual Studio anteriores ao Visual Studio .NET 2003, não são hosts com suporte para controles do Windows Forms.

Essas restrições também se aplicam ao uso de controles do Windows Forms por meio da interoperabilidade COM (Component Object Model). Há suporte para o uso de um controle do Windows Forms por meio de um CCW de COM (COM callable wrapper) somente no Internet Explorer. Para obter mais informações sobre a interoperabilidade COM, consulte

Interoperabilidade COM.

A tabela a seguir mostra o suporte para hospedagem do ActiveX para controles do Windows Forms.

Versão do Windows Forms Suporte
.NET Framework versão 1.0 Internet Explorer 5.01 e versões posteriores
.NET framework versão 1.1 e posterior Internet Explorer 5.01 e versões posteriores

MFC (Microsoft Foundation Classes) 7.0 e posterior

Hospedando componentes do Windows Forms 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 contêiner totalmente compatível com contêiner de controle ActiveX do MFC 7.0 e posterior.

No entanto, não há suporte para registro dos controles do Windows Forms como controles ActiveX. Além disso, não há suporte chamar o método com.ms.win32.Ole32.CoCreateInstance para controles do Windows Forms. Há suporte somente para a ativação gerenciada de controles do Windows Forms. Depois de criar um controle do Windows Forms, você pode hospedá-lo em um aplicativo MFC assim como faz para um controle ActiveX.

Para usar controles do Windows Forms em seu aplicativo não gerenciado, hospede o CLR usando as APIs de hospedagem de CLR não gerenciadas ou use os recursos de interoperabilidade C++. A solução recomendada é usar os recursos de interoperabilidade C++.

Windows Forms 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 se comportar de modo inesperado. Por exemplo, quando você pressiona a tecla TAB, o foco não muda de um controle para outro. Quando você pressiona a tecla ENTER enquanto um botão de comando tem foco, o evento do Click botão não é gerado. Você também pode enfrentar um comportamento inesperado de pressionamentos de teclas ou atividade do mouse.

Esse comportamento ocorre porque o aplicativo não gerenciado não implementa o suporte de loop de mensagem que o Windows Forms requer para funcionar corretamente. O loop de mensagem fornecido pelo aplicativo cliente COM é fundamentalmente diferente do loop de mensagem do Windows Forms.

Um loop de mensagem do aplicativo é um loop interno do programa que recupera mensagens da fila de mensagens do thread, converte-as e envia-as para o aplicativo para serem processadas. O loop de mensagem para um Windows Form não tem a mesma arquitetura que loops de mensagem que aplicativos anteriores, como aplicativos do Visual Basic 6.0 e do MFC, forneciam. As mensagens de janela que são lançadas para o loop de mensagem podem ser processadas de maneira diferente daquela que o Formulário do Windows espera. Portanto, pode ocorrer um comportamento inesperado. Algumas combinações de teclas e atividades do mouse podem não funcionar ou alguns eventos podem não ser gerados como o esperado.

Resolvendo problemas de interoperabilidade

Você pode resolver esses problemas exibindo o formulário em um loop de mensagem do .NET Framework, que é criado usando o Application.Run método.

Para fazer um Formulário do Windows funcionar corretamente em um aplicativo cliente COM, execute-o em um loop de mensagem do Windows Forms. Para fazer isso, use uma das abordagens a seguir:

Confira também