DirectX em Gadgets da Sidebar Usando Windows Forms

Porque não usar Silverlight?

Em posts anteriores já foi mencionada a intenção de usar o Silverlight como forma de renderizar o conteúdo 3D do V-ART dentro de um gadget da sidebar do Windows Vista. No entanto, diversos problemas se apresentaram com esse approach. Em primeiro lugar, o Silverlight por si só parece não estar muito bem consolidado: a documentação ainda é fragmentada e existem alguns problemas de compatibilidade entre versões. Em segundo lugar não existe um modo padrão de fazer renderização 3D usando Silverlight, apenas algumas bibliotecas criadas por desenvolvedores mais como um hobby do que como uma ferramenta para uso em produção.

Essa aparente inadequação do Silverlight como solução para o problema de integração do V-ART com a Sidebar do Vista fez com que eu buscasse novas alternativas. Depois de um longo período de busca finalmente esbarrei com o que parece ser a solução ideal, ou pelo menos um caminho seguro para ela.

Usando Classes .NET em um Gadget

A primeira possibilidade da qual tomei conhecimento foi a de usar código .NET escrito em C# (ou qualquer linguagem suportada, a princípio) dentro de um gadget do Vista. Fazer isso é possível exportando a classe desejada como um componente COM. É um processo bem simples sobre o qual não entrarei em detalhes nesse post. Tendo o objeto exportado como um COM é possível carregá-lo como um controle ActiveX dentro do HTML do gadget através do JScript.

Apesar de eu conseguir finalmente executar chamadas de métodos que eu escrevi em C# dentro de um gadget, isso ainda não era suficiente para a renderização 3D. Para isso eu precisava de uma área do gadget que fosse desenhada e gerenciada pelo meu código C#. O próximo passo, então, foi encontrar uma maneira de exibir um controle do WindowsForms dentro da área desenhada do gadget. Descobri como fazer isso nesse artigo que eu encontrei.

DirectX + WindowsForms

Para escrever um gadget que desenhasse algo em 3D eu precisava primeiro de uma API gráfica e uma janela onde a API pudesse desenhar. Então eu apenas procurei como integrar o DirectX da Microsoft com o WindowsForms, o que está explicado nesse outro artigo.

Aprendendo a integrar essas tecnologias eu pude escrever minha própria classe de controle do WindowsForms que desenha com DirectX e é exportada como um objeto COM para ser carregada no HTML do gadget. Uma simples tag <object> é usada para inserir o controle no HTML. Logo abaixo vai um screenshot do teste que eu consegui produzir:

gadget_dx.jpg

Last edited Sep 26, 2008 at 10:53 PM by kcfelix, version 2

Comments

No comments yet.