Как встроить форму Windows в неуправляемый графический интерфейс ATL? - PullRequest
1 голос
/ 13 марта 2009

У меня есть пользовательский элемент управления формы Windows, который делает COM видимым. Теперь я хочу встроить этот элемент управления в графический интерфейс ATL.

Проект ATL (неуправляемый C ++) должен получать только progID winform и динамически создавать и вставлять его во время выполнения.

Возможно ли это, и если да, то как мне это сделать?

Ответы [ 2 ]

1 голос
/ 18 марта 2009

Я нашел способ заставить его работать.
В следующем коде используется 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);
1 голос
/ 13 марта 2009

Я не уверен насчет ATL, но это легко сделать в MFC с использованием классов CWinFormsView и CWinFormsControl.

Я думаю, что нет поддержки bulitin для размещения элемента управления WinForm в окне ATL, но я думаю, что вы можете сделать это, просто получив HWND вашего элемента управления winform и установив элемент управления ATL в качестве его родителя. Это может быть трудной дорогой, хотя.

Это похоже на подобные вещи. Хотя я сам не проверял.

Ссылка

...