2009-03-13 3 views
1

COMに表示されるWindowsフォームのユーザーコントロールがあります。今、私はそのコントロールをATLダイアログGUIに埋め込みたいと思っています。管理されていないATL GUIにWindowsフォームを埋め込む方法は?

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

これは可能なのですか?もしそうなら、どうすればいいですか?

答えて

1

私はそれが動作するように取得する方法を考え出しました。
次のコードでは、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); 
1

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

私はATLウィンドウでWinFormコントロールをホストするbulitinサポートはないと思うが、私はあなたのwinformコントロールのHWNDを取得し、その親としてATLコントロールを設定するだけで簡単にできると思います。しかし、これは困難な道のりかもしれません。

これは同じ種類のものと思われます。私はそれを自分でテストしなかった。

Link

+0

リンクされたページに記載されているアプローチは、winformでありActiveXではないため適用できません。後者は.Netで実際にサポートされていません。このようにwinformsを使用すると、予期しないことが起こっています。 –

+0

CWinFormsControlを使用する場合、テンプレートであるため、既存のwinformクラス名を指定する必要があります。しかし、私は与えられたprogIDで仲裁winformを作成したい。実際のクラスはコンパイル時にはわかりません! –

関連する問題