I have an MFC application that uses some specific files with CLR but not the whole project.
The challenge is I want to embed a WinForms user control inside the MFC project without the whole project compiled with CLR.
As mentioned before, in one of the existing managed files I created a method that does the exchange with the ctrl like so:
#include <afxwin.h>
#include <afxwinforms.h>
#include "Managedfile.h"
void CWinformsUtil::CreateFullListeUc(CDataExchange* pDX, int Idc)
{
CWinFormsControl<MainuserControlLib::UserControl2> m_ctrl1;
DDX_ManagedControl(pDX, Idc, m_ctrl1);
}
And I am calling this method inside the DoDataExchange
method in the MFC app source:
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
CWinformsUtil::CreateFullListeUc(pDX, IDC_STATIC1);
}
But the problem with this approach is that it does not display the WinForms user control.
CodePudding user response:
In order to acheive this what i've did was to compile the view.cpp file in wich i want to display the user control in clr,then included <afxwinforms.h> in it .Also in the header file i need to import that library but it should only be visile to managed code by simply making a condition :
//view.h
#ifdef _MANAGED
#include <afxwinforms.h>
#endif
and for declaring the control in the header file we need also the same approach:
//view.h
#ifdef _MANAGED
CWinFormsControl<MainuserControlLib::UserControl2> m_ctrl1;
#endif