Incorporar aplicativo WTL no ATL ActiveX Control
-
24-09-2019 - |
Pergunta
Existe uma maneira de incorporar de alguma forma um aplicativo WTL Destop no ATL ActiveX (isto é, extensão)?
O que estou tentando alcançar é criar um controle ActiveX com o visualizador de arquivos do Office. Como base, tenho um aplicativo WTL de desktop (escrito há algum tempo), que usa a API OOO V3 para exibir documentos.
- Eu criei um projeto ActiveX, vinculei os LIBs necessários e inclui.
- Eu posso ligar para os métodos WTL e OO API.
- Algumas propriedades e métodos foram adicionados para atender aos requisitos do aplicativo host.
- Meu ActiveX é mostrado corretamente no aplicativo IE e host
E aqui minha sorte (e conhecimento?) Terminou.
Meu controle possui a propriedade M_HWND, mas está sempre definida como 0; Eu pesquisei um pouco no Google e descobri que posso obter o pai ou mãe com
this->m_spInPlaceSite->GetWindow()
Mas também não está funcionando. Toda vez que eu quero criar um tempo de execução da janela termina no método ISWindow () (chamado de ATL lib) com pai == null
Para criar e mostrar ooo :: docwindow, preciso de HWND da janela dos pais.
E aqui vai a pergunta:
De alguma forma, posso incorporar um aplicativo baseado em janela WTL na extensão ActiveX IE?
É possível sem reescrever o wrapper de API OOO inteiro?
Solução
Sim você pode.
Etapas com o assistente VS:
- Criar projeto ATL
- Adicione o controle ATL, com base em algum controle (botão, por exemplo). Nesse caso, você terá um mapa de mensagens com alguns manipuladores.
Em seguida, substitua o membro do CcontainedWindow em sua própria janela e isso é tudo.
Página de amostras ATL, Não verifiquei, mas espero que ajude.