COM を表示できる Windows フォーム ユーザー コントロールがあります。次に、そのコントロールを ATL ダイアログ GUI に埋め込みたいと思います。
ATL プロジェクト (アンマネージ C++) は、winform の progID のみを取得し、実行時に動的に作成して埋め込む必要があります。
これは可能ですか?可能であれば、どうすればよいですか?
ATL についてはよくわかりませんが、これは MFC で CWinFormsView および CWinFormsControl クラスを使用して簡単に実行できます。
ATL ウィンドウで WinForm コントロールをホストするための Bulitin サポートはないと思いますが、winform コントロールの HWND を取得し、ATL コントロールを親として設定するだけでできると思います。これは大変な道のりかもしれませんが。
これも似たようなタイプのようです。私はそれを自分でテストしていません。
私はそれを機能させる方法を考え出しました。
次のコードは、m_Control と呼ばれる CWnd を使用しています。この CWnd は、少し文書化されたバージョンの CreateControl を介して winform をホストするように作成されています。これまでのところうまくいくようです。誰かが欠点を見つけたら、コメントまたは返信してください。
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);