Implementando a ativação de In-Place

A ativação in-loco permite que um usuário interaja com um objeto inserido sem sair do documento do contêiner. Quando um usuário ativa o objeto, uma barra de menus composta composta por elementos das barras de menu do aplicativo de contêiner e do servidor substitui a barra de menus principal do contêiner. Comandos e recursos de ambos os aplicativos estão, portanto, disponíveis para o usuário, incluindo ajuda confidencial de contexto para o objeto ativo. Quando um usuário começa a trabalhar com alguma parte não objeto do documento, o objeto é desativado, fazendo com que o menu original do documento de contêiner substitua o menu composto.

Essa funcionalidade originalmente passou pelo nome da edição in-loco. O nome foi alterado porque a edição é apenas uma maneira de um usuário interagir com um objeto em execução. Clipes de som, por exemplo, podem ser ouvidos em vez de editar. Clipes de vídeo podem ser exibidos em vez de edição. A ativação in-loco é particularmente adequada no caso de clipes de vídeo porque permite que eles sejam executados no local, sem chamar uma janela separada. Isso poderia ser crítico se o vídeo fosse exibido, digamos, em conjunto com dados de texto adjacentes no documento do contêiner.

A implementação da ativação in-loco é estritamente opcional para aplicativos de contêiner e de servidor. O OLE ainda dá suporte ao modelo no qual ativar um objeto faz com que o aplicativo de servidor abra uma janela separada. Os objetos vinculados sempre abrem em uma janela separada para enfatizar que eles residem em um documento separado.

A ativação in-loco começa com o objeto em resposta a uma chamada IOleObject::D oVerb de seu contêiner. Essa chamada geralmente acontece em resposta a um usuário clicando duas vezes no objeto ou selecionando um comando (verbo) no menu Editar do aplicativo contêiner.

A janela in-loco recebe entrada de teclado e mouse enquanto o objeto inserido está ativo. Quando um usuário seleciona comandos na barra de menus de composição, o comando e as mensagens de menu associadas são enviadas para o contêiner ou aplicativo de objeto, dependendo do qual possui o menu suspenso específico selecionado. A entrada por meio de réguas, barras de ferramentas ou adornos de quadro de um objeto vai diretamente para o objeto inserido, que possui essas janelas.

Um objeto inserido ativado no local permanece ativo até que o contêiner o desative em resposta à entrada do usuário ou o objeto desative voluntariamente o estado ativo, como um clipe de vídeo pode fazer, por exemplo. Um usuário pode desativar um objeto clicando dentro do documento de contêiner, mas fora da janela de ativação in-loco do objeto ou simplesmente clicando em outro objeto. No entanto, um objeto ativado no local permanecerá ativo se o usuário clicar na barra de título do contêiner, na barra de rolagem ou, em particular, na barra de menus.

Você pode implementar um servidor de objeto de ativação in-loco como um servidor em processo (DLL) ou um EXE (servidor local). Em ambos os casos, a barra de menus composta contém itens (normalmente menus suspensos) dos processos de servidor e contêiner. No caso de um servidor em processo, a janela de ativação in-loco é simplesmente outra janela filho na hierarquia de janela do contêiner, recebendo sua entrada por meio da bomba de mensagem do aplicativo de contêiner.

No caso de um servidor local, a janela de ativação in-loco pertence ao processo de aplicativo do servidor do objeto inserido, mas sua janela pai pertence ao contêiner. A entrada para a janela de ativação in-loco aparece na fila de mensagens do servidor e é expedida pelo loop de mensagem do servidor. As bibliotecas OLE são responsáveis por ver que comandos de menu e mensagens são enviados corretamente.

Documentos compostos