COMに表示されるWindowsフォームのユーザーコントロールがあります。今、私はそのコントロールをATLダイアログGUIに埋め込みたいと思っています。管理されていないATL GUIにWindowsフォームを埋め込む方法は?
ATLプロジェクト(アンマネージドC++)は、winformのprogIDのみを取得し、実行時に動的に作成して埋め込みます。
これは可能なのですか?もしそうなら、どうすればいいですか?
COMに表示されるWindowsフォームのユーザーコントロールがあります。今、私はそのコントロールをATLダイアログGUIに埋め込みたいと思っています。管理されていないATL GUIにWindowsフォームを埋め込む方法は?
ATLプロジェクト(アンマネージドC++)は、winformのprogIDのみを取得し、実行時に動的に作成して埋め込みます。
これは可能なのですか?もしそうなら、どうすればいいですか?
私はそれが動作するように取得する方法を考え出しました。
次のコードでは、m_Controlという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);
ATLについてはわかりませんが、これはCWinFormsViewクラスとCWinFormsControlクラスを使用して簡単にMFCで実行できます。
私はATLウィンドウでWinFormコントロールをホストするbulitinサポートはないと思うが、私はあなたのwinformコントロールのHWNDを取得し、その親としてATLコントロールを設定するだけで簡単にできると思います。しかし、これは困難な道のりかもしれません。
これは同じ種類のものと思われます。私はそれを自分でテストしなかった。
リンクされたページに記載されているアプローチは、winformでありActiveXではないため適用できません。後者は.Netで実際にサポートされていません。このようにwinformsを使用すると、予期しないことが起こっています。 –
CWinFormsControlを使用する場合、テンプレートであるため、既存のwinformクラス名を指定する必要があります。しかし、私は与えられたprogIDで仲裁winformを作成したい。実際のクラスはコンパイル時にはわかりません! –