Compartilhar via


Implementar a ativação in-loco

Com a ativação in-loco, um usuário pode interagir com um objeto incorporado sem sair do documento de contêiner. Quando um usuário ativa o objeto, uma barra de menus composta que compreende elementos das barras de menus do aplicativo de contêiner e do aplicativo de servidor substitui a barra de menus principal do contêiner. Os comandos e recursos de ambos os aplicativos estão, portanto, disponíveis para o usuário, inclusive a ajuda sensível ao contexto para o objeto ativo. Quando um usuário começa a trabalhar com uma parte do documento que não é objeto, 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 editados. Os videoclipes podem ser visualizados em vez de editados. A ativação no local é especialmente adequada no caso de videoclipes, pois permite que eles sejam executados no local, sem chamar uma janela separada. Isso poderá ser essencial se o vídeo for visualizado 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. O OLE ainda aceita o modelo em que a ativação de um objeto faz com que o aplicativo do servidor abra uma janela separada. Os objetos vinculados sempre são abertos 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::DoVerb do respectivo contêiner. Essa chamada geralmente ocorre em resposta a um usuário que clica duas vezes no objeto ou que seleciona um comando (verbo) no menu Editar do aplicativo de 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 quem possui o menu suspenso específico selecionado. A entrada por meio de réguas, barras de ferramentas ou adornos de estrutura de um objeto vai diretamente para o objeto incorporado, que tem essas janelas.

Um objeto inserido 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 videoclipe 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 in-loco permanecerá ativo se o usuário clicar na barra de título, na barra de rolagem ou, especificamente, 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 a 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 do servidor do objeto incorporado, mas a respectiva 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