Colocando o controle em uma página da Web (Tutorial ATL, parte 7)
Seu controle está concluído. Para ver o controle funcionando em uma situação do mundo real, coloque-o em uma página da Web. Foi criado um arquivo HTML que contém o controle quando você o definiu. Abra o arquivo PolyCtl.htm no Gerenciador de Soluções e você verá o controle em uma página da Web.
Nesta etapa, você adicionará funcionalidade ao controle e criará scripts para que página da Web responda a eventos. Você também modificará o controle para informar ao Internet Explorer que o controle é seguro para scripts.
Adição de nova funcionalidade
Para adicionar funcionalidade ao controle
Abra o PolyCtl.cpp e substitua o seguinte código:
if (PtInRegion(hRgn, xPos, yPos))
Fire_ClickIn(xPos, yPos);
else
Fire_ClickOut(xPos, yPos);
por
short temp = m_nSides;
if (PtInRegion(hRgn, xPos, yPos))
{
Fire_ClickIn(xPos, yPos);
put_Sides(++temp);
}
else
{
Fire_ClickOut(xPos, yPos);
put_Sides(--temp);
}
A forma agora adicionará ou removerá os lados dependendo do local que você clicar.
Criar script na página da Web
O controle ainda não faz nada, portanto, altere a página da Web para responder aos eventos que você envia.
Para criar script na página da Web
Abra o PolyCtl.htm e selecione a exibição HTML. Adicione as seguintes linhas ao código HTML. Elas devem ser adicionadas depois de
</OBJECT>
, mas antes de</BODY>
.<SCRIPT LANGUAGE="VBScript"> <!-- Sub PolyCtl_ClickIn(x, y) MsgBox("Clicked (" & x & ", " & y & ") - adding side") End Sub Sub PolyCtl_ClickOut(x, y) MsgBox("Clicked (" & x & ", " & y & ") - removing side") End Sub --> </SCRIPT>
Salve o arquivo HTML.
Você adicionou algum código de VBScript que obtém a propriedade Sides do controle. Ele aumentará o número de lados em um se você clicar dentro do controle. Ao clicar fora do controle, você reduzirá o número de lados em um.
Indicar que o controle é seguro para scripts
Você pode exibir a página da Web apenas com o controle no Internet Explorer. Outros navegadores não dão mais suporte a controles ActiveX devido a deficiências de segurança.
Observação
Se o controle não estiver visível, saiba que alguns navegadores exigem ajustes de configurações para executar controles ActiveX. Consulte a documentação do navegador sobre como habilitar controles ActiveX.
Com base nas configurações atuais de segurança do Internet Explorer, você poderá se deparar com uma caixa de diálogo de Alerta de Segurança. Ele declara que o controle pode não ser seguro para script e poderá causar danos. Por exemplo, se você tivesse um controle que exibia um arquivo, mas também tivesse um método Delete
que excluía um arquivo, seria seguro se você apenas o exibisse em uma página. Não seria seguro para script, no entanto, porque alguém poderia chamar o método Delete
.
Importante
Para este tutorial, você pode alterar suas configurações de segurança no Internet Explorer para executar controles ActiveX que não estejam marcados como seguros. No Painel de Controle, clique em Propriedades da Internet e clique em Segurança para alterar as configurações apropriadas. Quando concluir o tutorial, altere as configurações de segurança de volta para o estado original.
Você pode alertar programaticamente o Internet Explorer de que ele não precisa exibir a caixa de diálogo Alerta de Segurança para esse controle específico. Você pode fazer isso usando a interface IObjectSafety
. A ATL fornece uma implementação dessa interface na classe IObjectSafetyImpl. Para adicionar a interface ao controle, adicione IObjectSafetyImpl
à sua lista de classes herdadas e adicione uma entrada para ela no mapa do COM.
Para adicionar a IObjectSafetyImpl ao controle
Adicione a seguinte linha ao final da lista de classes herdadas no PolyCtl.h e adicione uma vírgula à linha anterior:
public IObjectSafetyImpl<CPolyCtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
Adicione a seguinte linha ao mapa do COM no PolyCtl.h:
COM_INTERFACE_ENTRY(IObjectSafety)
Compilação e teste do controle
Compile o controle. Depois que o build for concluído, abra o PolyCtl.htm no navegador novamente. Desta vez, a página da Web deve ser exibida diretamente sem a caixa de diálogo Alerta de Segurança. Se você clicar dentro do polígono, o número de lados aumentará em um. Clique fora do polígono para reduzir o número de lados.
Próximas etapas
Esta etapa conclui o tutorial da ATL. Para obter links para mais informações sobre a ATL, veja a página inicial da ATL.