如何在非托管ATL GUI中嵌入Windows窗体?

时间:2009-03-13 10:21:09

标签: c++ winforms atl

我有一个Windows窗体用户控件,使COM可见。现在我想将该控件嵌入到ATL对话框GUI中。

ATL项目(非托管C ++)只能获取winform的progID并在运行时动态创建和嵌入它。

这可能吗?如果可行,我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不确定ATL,但可以使用CWinFormsView和CWinFormsControl类在MFC中轻松完成。

我认为在ATL窗口中托管WinForm控件没有bulitin支持,但我认为你可以通过简单获取winform控件的HWND并将ATL控件设置为其父控件来实现。这可能是一条艰难的道路。

这似乎是一种类似的事情。我自己没有测试过它。

Link

答案 1 :(得分:1)

我找到了让它发挥作用的方法 下面的代码使用一个名为m_Control的CWnd,它通过一个简单记录的CreateControl版本来托管winform。到目前为止似乎工作正常。如果有人发现任何缺点,请发表评论或回复。

AfxEnableControlContainer();
Microsoft::VisualC::MFC::CControlCreationInfoEx i;
i.Init(System::Type::GetTypeFromProgID(gcnew System::String(sProgID)),
       CControlCreationInfo::ReflectionType);
i.m_clsid = CLSID_WinFormsControl;
POINT pt;
pt.x = pt.y = 0;
SIZE sz;
sz.cx = sz.cy = 100;
m_Control.CreateControl(i, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
                        &pt, &sz, CWnd::FromHandle(m_hWnd), ID_CONTROL);