1

COM を表示できる Windows フォーム ユーザー コントロールがあります。次に、そのコントロールを ATL ダイアログ GUI に埋め込みたいと思います。

ATL プロジェクト (アンマネージ C++) は、winform の progID のみを取得し、実行時に動的に作成して埋め込む必要があります。

これは可能ですか?可能であれば、どうすればよいですか?

4

2 に答える 2

1

ATL についてはよくわかりませんが、これは MFC で CWinFormsView および CWinFormsControl クラスを使用して簡単に実行できます。

ATL ウィンドウで WinForm コントロールをホストするための Bulitin サポートはないと思いますが、winform コントロールの HWND を取得し、ATL コントロールを親として設定するだけでできると思います。これは大変な道のりかもしれませんが。

これも似たようなタイプのようです。私はそれを自分でテストしていません。

リンク

于 2009-03-13T10:31:28.493 に答える
1

私はそれを機能させる方法を考え出しました。
次のコードは、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);
于 2009-03-18T08:07:38.940 に答える