Как встроить форму Windows в неуправляемый графический интерфейс ATL?
Вопрос
У меня есть пользовательский элемент управления формы Windows, который делает COM видимым. Теперь я хочу встроить этот элемент управления в графический интерфейс ATL.
Проект ATL (неуправляемый C ++) должен получать только progID winform и динамически создавать и встраивать его во время выполнения.
Возможно ли это, и если да, то как мне это сделать?
Решение 2
Я нашел способ заставить его работать.
В следующем коде используется CWnd с именем m_Control, созданный для размещения winform с помощью небольшой документированной версии CreateControl. Кажется, до сих пор нормально работает. Если кто-то видит какие-либо недостатки, пожалуйста, прокомментируйте или ответьте.
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);
Другие советы
Я не уверен насчет ATL, но это легко сделать в MFC с помощью классов CWinFormsView и CWinFormsControl.
Я думаю, что нет поддержки bulitin для размещения элемента управления WinForm в окне ATL, но я думаю, что вы можете сделать это, просто получив HWND вашего элемента управления winform и установив элемент управления ATL в качестве его родительского элемента. Это может быть трудной дорогой, хотя.
Это похоже на подобные вещи. Я не проверял это сам, хотя.