Compartilhar via


Como criar o controle de usuário e hospedar uma exibição MDI

As etapas a seguir mostram como criar um controle de usuário .NET Framework, criar o controle de usuário em uma biblioteca de classes de controle (especificamente, um projeto da Biblioteca de Controle do Windows) e, em seguida, compilar o projeto em um assembly. Em seguida, o controle pode ser consumido de um aplicativo MFC que usa classes derivadas da classe CView e da classe CWinFormsView.

Para obter informações sobre como criar um controle de usuário Windows Forms e criar uma biblioteca de classes de controle, consulte Como criar controles de usuário.

Observação

Em alguns casos, os controles Windows Forms, como um controle de Grid de terceiros, podem não se comportar de forma confiável quando hospedados em um aplicativo MFC. Uma solução alternativa recomendada é colocar um controle de usuário Windows Forms no aplicativo MFC e colocar o controle de Grid de terceiros dentro do controle de Usuário.

Este procedimento pressupõe que você criou um projeto da Biblioteca de Controles Windows Forms chamado WindowsFormsControlLibrary1, de acordo com o procedimento em Como criar o controle de usuário e o host em uma caixa de diálogo.

Para criar o aplicativo host do MFC

  1. Crie um projeto de aplicativo MFC.

    No menu Arquivo, selecione Novo e, em seguida, clique em Projeto. Na pasta Visual C++, selecione Aplicativo MFC.

    Na caixa Nome, insira MFC02 e altere a configuração da Solução para Adicionar à Solução. Clique em OK.

    No Assistente de Aplicativo MFC, aceite todos os padrões e clique em Concluir. Será criado um aplicativo MFC com uma interface de documentos múltiplos.

  2. Configure o projeto para suporte a CLR (Common Language Runtime).

    No Gerenciador de Soluções, clique com o botão direito do mouse no nó projeto MFC01 e, no menu de contexto, selecione Propriedades. A caixa de diálogo Páginas de Propriedades é aberta.

    Em Propriedades de Configuração, selecione Geral. Na seção Padrões do Projeto, defina o suporte do Common Language Runtime para como Common Language Runtime Support (/clr).

    Em Propriedades de Configuração, expanda C/C++ e clique no nó Geral. Defina Formato de Informações de Depuração para Programar Banco de Dados (/Zi).

    Clique no nó Geração de Código. Defina Habilitar Recompilação Mínima como Não (/Gm-). Defina também Verificações Básicas de Runtime como Padrão.

    Clique em OK para aplicar suas alterações.

  3. Em pch.h (stdafx.h no Visual Studio 2017 e anteriores), adicione a seguinte linha:

    #using <System.Windows.Forms.dll>
    
  4. Adicione uma referência ao controle do .NET.

    No Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto MFC02 e selecione Adicionar, Referências. Na Página de Propriedades, clique em Adicionar Nova Referência, selecione WindowsFormsControlLibrary1 (na guia Projetos) e clique em OK. Isso adiciona uma referência na forma de uma opção de compilador /FU para que o programa seja compilado; ele também copia WindowsFormsControlLibrary1.dll no diretório do projeto MFC02 para que o programa seja executado.

  5. Em stdafx.h, localize esta linha:

    #endif // _AFX_NO_AFXCMN_SUPPORT
    

    Adicione estas linhas acima dela:

    #include <afxwinforms.h>   // MFC Windows Forms support
    
  6. Modifique a classe de exibição de forma que ela herde de CWinFormsView.

    Em MFC02View.h, substitua CView por CWinFormsView para que o código apareça da seguinte maneira:

    class CMFC02View : public CWinFormsView
    {
    };
    

    Se você quiser adicionar exibições adicionais ao aplicativo MDI, precisará chamar CWinApp::AddDocTemplate para cada exibição criada.

  7. Modifique o arquivo MFC02View.cpp para alterar o CView para CWinFormsView no mapa de macros e mensagens IMPLEMENT_DYNCREATE e substitua o construtor vazio existente pelo construtor mostrado abaixo:

    IMPLEMENT_DYNCREATE(CMFC02View, CWinFormsView)
    
    CMFC02View::CMFC02View(): CWinFormsView(WindowsFormsControlLibrary1::UserControl1::typeid)
    {
    }
    BEGIN_MESSAGE_MAP(CMFC02View, CWinFormsView)
    //leave existing body as is
    END_MESSAGE_MAP()
    
  8. Compile e execute o projeto.

    No Gerenciador de Soluções, clique com o botão direito do mouse em MFC02 e selecione Definir como Projeto de Inicialização.

    No menu Compilar, clique em Compilar Solução.

    No menu Depurar, clique em Iniciar sem depurar.

Confira também

Hospedando um controle de usuário do Windows Forms como uma exibição do MFC