質問

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

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

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

役に立ちましたか?

解決 2

機能させる方法を見つけました。
次のコードは、CreateControlの少し文書化されたバージョンを介してwinformをホストするために作成されたm_Controlと呼ばれるCWndを使用しています。これまでのところうまくいくようです。誰かが欠点を見つけた場合は、コメントまたは返信してください。

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コントロールを親として設定することで簡単に実行できると思います。これは難しい道かもしれません。

これは同様のタイプのようです。自分でテストしたことはありません。

リンク

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top