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

StackOverflow https://stackoverflow.com/questions/642082

  •  22-07-2019
  •  | 
  •  

Вопрос

У меня есть пользовательский элемент управления формы 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 в качестве его родительского элемента. Это может быть трудной дорогой, хотя.

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

Ссылка

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top