Question

J'ai un contrôle d'utilisateur Windows Form qui rend COM visible. Maintenant, je veux intégrer ce contrôle dans une interface graphique de dialogue ATL.

Le projet ATL (C ++ non géré) ne doit obtenir que le progID du winform, le créer et l’intégrer de manière dynamique au moment de l’exécution.

Est-ce possible et si oui, comment puis-je le faire?

Était-ce utile?

La solution 2

J'ai trouvé un moyen de le faire fonctionner.
Le code suivant utilise un CWnd appelé m_Control qui héberge un winform via une version peu documentée de CreateControl. Semble fonctionner correctement jusqu'à présent. Si quelqu'un voit des inconvénients, merci de commenter ou de répondre.

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

Autres conseils

Je ne suis pas sûr d'ATL, mais cela peut être facilement réalisé dans MFC à l'aide des classes CWinFormsView et CWinFormsControl.

Je pense qu’il n’existe aucun support bulitin permettant d’héberger un contrôle WinForm dans une fenêtre ATL, mais vous pouvez le faire en obtenant simplement le HWND de votre contrôle winform et en définissant votre contrôle ATL comme parent. Cela pourrait être une route difficile cependant.

Cela semble être un type de chose similaire. Je n'ai cependant pas testé moi-même.

Lien

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top