Implementando a ativação in-loco

A ativação in-loco permite que um usuário interaja com um objeto incorporado 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 menus do aplicativo contêiner e do aplicativo 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 sensível ao 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.

Esse recurso originalmente atendia pelo nome de 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 edição. Os clipes de vídeo podem ser visualizados em vez de editados. A ativação in-loco é particularmente apropriada no caso de clipes de vídeo porque permite que eles sejam executados no lugar, sem chamar uma janela separada. Isso poderia ser crítico se o vídeo fosse visualizado, digamos, em conjunto com dados de texto adjacentes no documento de contêiner.

A implementação da ativação in-loco é estritamente opcional para aplicativos de contêiner e servidor. OLE ainda oferece suporte ao modelo no qual a ativação de 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 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 incorporado está ativo. Quando um usuário seleciona comandos na barra de menus composta, o comando e as mensagens de menu associadas são enviadas para o aplicativo de contêiner ou objeto, dependendo de qual é o proprietário do 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 incorporado, que possui essas janelas.

Um objeto incorporado ativado in-loco permanece ativo até que o contêiner o desative em resposta à entrada do usuário ou o objeto desista voluntariamente do estado ativo, como um clipe de vídeo pode fazer, por exemplo. Um usuário pode desativar um objeto clicando dentro do documento do 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, na barra de rolagem ou, em particular, na barra de menus do contêiner.

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

No caso de um servidor local, a janela de ativação in-loco pertence ao processo de aplicativo de servidor do objeto incorporado, 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 é despachada pelo loop de mensagens do servidor. As bibliotecas OLE são responsáveis por garantir que os comandos de menu e as mensagens sejam despachados corretamente.

Documentos compostos