Pergunta

Eu tenho um controle de usuário formulário do Windows que é feita COM visível. Agora eu quero incorporar esse controle em uma GUI de diálogo ATL.

O projeto ATL (não gerenciado C ++) só poderão obter a progID do winform e dinamicamente criar e incorporá-lo em tempo de execução.

Isso é possível e se assim for, como posso fazê-lo?

Foi útil?

Solução 2

Eu descobri uma maneira de obtê-lo para o trabalho.
O código a seguir está usando um CWnd chamado m_Control que é feita para hospedar um winform via um pouco documentado versão do CreateControl. Parece funcionar bem até agora. Se alguém vê quaisquer inconvenientes, por favor, comentário ou responder.

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);

Outras dicas

Eu não estou certo sobre ATL, mas isso pode ser feito facilmente em MFC usando classes CWinFormsView e CWinFormsControl.

Eu acho que não há apoio bulitin para hospedar um controle WinForm em uma janela do ATL, mas eu acho que você pode fazê-lo pelo simples obter o HWND de seu controle winform e definindo seu controle ATL como seu pai. Isso pode ser um caminho difícil embora.

Este parece ser um tipo semelhante de coisa. Eu ainda não testei me embora.

Fazer a ligação

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top