1

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

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

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

4

2 回答 2

1

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

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

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

关联

于 2009-03-13T10:31:28.493 回答
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);
于 2009-03-18T08:07:38.940 回答