Click here to Skip to main content
Click here to Skip to main content

Hosting Windows Forms User Control in MFC Dialogs

By , 7 May 2013
 

Introduction

Sometimes we need to use integration legacy systems with a new technology. In this tip/trick, I will discuss about hosting .NET Windows Form user controls in an MFC dialog box so we can develop our legacy systems in MFC with .NET and related components after that.

Background

In the past if you wanted to use .NET components in your MFC application, you could use COM technology and it would be terrible. But after Visual Studio 2005, Microsoft introduced the C++/CLI technology. With this new technology, developers can use C# or VB.NET and any other language supported with .NET in MFC projects.

Using the Code

First of all, we need to open two projects, MFC and Windows Form User Control Library, so:

  1. Open Visual Studio preferably Visual Studio 2012.
  2. Select File/New Project/Visual C++ and then select MFC application project template.
  3. Click next and select dialog based in MFC application wizard window and at the finally 'Finish'.
  4. Right click on project and select properties. Later, you should change Common Language Runtime Support to Common Language Runtime Support (/clr).
  5. Build your project
  6. Add the following header file include to your stdafx.h.
#include <afxwinforms.h> 

Now, we need to open the second project:

  1. From the Solution Explorer window, right click on the MFC project solution and select Add/New Project item.
  2. Select other language/Visual C#/Windows/Windows Forms Control Library.
  3. Set the project name WinFormUserControl and then press OK.
  4. Right click on the C# project and click properties, change Target Framework to .NET 4 if it is .NET 4.5.
  5. Right click on the MFC project and click properties, Common Properties/Add New Reference/ Add your C# project DLL from here.
  6. Add User Control in your project.
  7. Open your dialog box header file "MFCApplication1Dlg.h" and define CWinFormsControl member with this name: "m_ctrl".
// MFCApplication1Dlg.h : header file
//

#pragma once


// CMFCApplication1Dlg dialog
class CMFCApplication1Dlg : public CDialogEx
{
    CWinFormsControl<WinFormUserControl::UserControl1> m_ctrl;

// Construction
public:
    CMFCApplication1Dlg(CWnd* pParent = NULL);    // standard constructor

// Dialog Data
    enum { IDD = IDD_MFCAPPLICATION1_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
}; 

After that you should go to MFCApplication1Dlg.cpp and override the DoDateExchange method:

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_ManagedControl(pDX,IDC_STATIC,m_ctrl);
}  

Now it is finished and you can run your project. For more information, click here.

History

  • April 28, 2013 - First published.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

AYDIN EBRAHIMI HOMAY
Software Developer (Senior) KTC-Industrial Automation
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
Member
Hi.i.prefer not to tell so much about my biografy, i am an eternal student.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
-- There are no messages in this forum --
Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130513.1 | Last Updated 7 May 2013
Article Copyright 2013 by AYDIN EBRAHIMI HOMAY
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid