Pregunta

Tengo un control de usuario de formulario de Windows que se hace COM visible. Ahora quiero incrustar ese control en una GUI de diálogo ATL.

El proyecto ATL (C ++ no administrado) solo obtendrá el progID del winform y lo creará e incorporará dinámicamente en tiempo de ejecución.

¿Es esto posible y, de ser así, cómo lo hago?

¿Fue útil?

Solución 2

Descubrí una forma de hacerlo funcionar.
El siguiente código está usando un CWnd llamado m_Control que está hecho para alojar una forma de victoria a través de una pequeña versión documentada de CreateControl. Parece funcionar bien hasta ahora. Si alguien ve algún inconveniente, comente o responda.

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);

Otros consejos

No estoy seguro acerca de ATL, pero esto se puede hacer fácilmente en MFC usando las clases CWinFormsView y CWinFormsControl.

Creo que no hay soporte de bulitin para alojar un control WinForm en una ventana ATL, pero creo que puede hacerlo simplemente obteniendo el HWND de su control winform y configurando su control ATL como padre. Sin embargo, este podría ser un camino difícil.

Esto parece ser un tipo similar de cosas. Sin embargo, no lo he probado.

Enlace

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top