Documentos ativo
Documentos ativo estendem a tecnologia de documento composto de OLE.Essas extensões são fornecidas na forma de interfaces adicionais gerenciar modos de exibição, para que objetos possam funcionar dentro de recipientes e ainda manter controle sobre sua exibição e funções de impressão.Este processo torna possível exibir documentos em quadros externos (sistema autônomo o Microsoft Office Binder ou o Microsoft Internet Explorer) e em quadros nativo (sistema autônomo portas de modo de exibição do produto).
Esta seção descreve o funcional requisitos para documentos ativo.O documento ativo possui um conjunto de dados e tenha acesso ao armazenamento de onde os dados podem ser salvos e recuperados.Ele pode criar e gerenciar um ou mais modos de exibição em seus dados.Juntamente com suporte a incorporação usual e interfaces de ativação no local dos documentos OLE, o documento ativo se comunica a sua capacidade de criar modos de exibição por meio de IOleDocument. Através dessa interface, o contêiner pode pedir para criar os modos de exibição do documento ativo pode exibir (e possivelmente enumerar).Através dessa interface, o documento ativo também pode fornecer diversas informações sobre si, sistema autônomo, por exemplo, se ela oferece suporte para vários modos de exibição ou retângulos complexos.
Este é o IOleDocument interface.Observe que o IEnumOleDocumentViews interface é um enumerador OLE padrão para IOleDocumentView * tipos.
interface IOleDocument : IUnknown
{
HRESULT CreateView(
[in] IOleInPlaceSite *pIPSite,
[in] IStream *pstm,
[in] DWORD dwReserved,
[out] IOleDocumentView **ppView);
HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);
HRESULT EnumViews(
[out] IEnumOleDocumentViews **ppEnum,
[out] IOleDocumentView **ppView);
}
Cada documento ativo deve ter um provedor de quadro de modo de exibição com essa interface.Se o documento não é incorporado dentro de um contêiner, o próprio servidor do documento ativo deve fornecer o quadro de modo de exibição.No entanto, quando o documento ativo é incorporado em um contêiner do documento ativo, o recipiente fornece o quadro de modo de exibição.
Um documento ativo pode criar um ou mais tipos de modos de exibição seus dados (por exemplo, normal, de estrutura de tópicos, layout da página e assim por diante).Modos de exibição atuam como filtros através do qual os dados podem ser vistos.Mesmo se o documento tiver apenas um tipo de modo de exibição, ainda convém oferecer suporte a vários modos de exibição sistema autônomo um meio de oferecer suporte à nova funcionalidade de janela (por exemplo, a Nova janela item o Janela menu aplicativos do Office).
Requisitos para documentos ativo
Um documento ativo que pode ser exibido em um contêiner do documento ativo deve:
Use arquivos composto do OLE sistema autônomo seu mecanismo de armazenamento implementando IPersistStorage.
Suporte aos recursos básicos de incorporação do OLE documentos, incluindo Criar do arquivo.Necessita das interfaces IPersistFile, IOleObject, e IDataObject.
Suporte a um ou mais modos de exibição, cada um deles é capaz de ativação no local.Ou seja, sistema autônomo modos de exibição devem oferecer suporte a interface IOleDocumentView Assim sistema autônomo sistema autônomo interfaces IOleInPlaceObject e IOleInPlaceActiveObject (usando o contêiner IOleInPlaceSite and IOleInPlaceFrame interfaces).
Suporte a interfaces de padrão de documento ativo IOleDocument, IOleCommandTarget, e IPrint.
Conhecimento sobre quando e como usar as interfaces de contêiner for implicado nesses requisitos.
Requisitos para exibir objetos
Um documento ativo pode criar um ou mais modos de exibição de seus dados.Funcionalmente, essas exibições são como as portas em um método específico para exibir os dados.Se um documento ativo só oferece suporte a um único modo de exibição, o documento ativo e o único modo de exibição podem ser implementados usando uma única classe.IOleDocument::CreateView retorna IOleDocumentView ponteiro de interface.
Para ser representado dentro de um contêiner do documento ativo, um componente de visualização deve oferecer suporte a IOleInPlaceObject and IOleInPlaceActiveObject e IOleDocumentView:
interface IOleDocumentView : IUnknown
{
HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);
HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);
HRESULT GetDocument([out] IUnknown **ppunk);
[input_sync] HRESULT SetRect([in] LPRECT prcView);
HRESULT GetRect([in] LPRECT prcView);
[input_sync] HRESULT SetRectComplex(
[in] LPRECT prcView,
[in] LPRECT prcHScroll,
[in] LPRECT prcVScroll,
[in] LPRECT prcSizeBox);
HRESULT Show([in] BOOL fShow);
HRESULT UIActivate([in] BOOL fUIActivate);
HRESULT Open(void);
HRESULT CloseView([in] DWORD dwReserved);
HRESULT SaveViewState([in] IStream *pstm);
HRESULT ApplyViewState([in] IStream *pstm);
HRESULT Clone(
[in] IOleInPlaceSite *pIPSiteNew,
[out] IOleDocumentView **ppViewNew);
}
Todos os modos de exibição tem um site de exibição associada, que encapsula o quadro de modo de exibição e a porta de visualização (HWND e uma área retangular em que a janela).O site expõe esta funcionalidade porém o padrão IOleInPlaceSite interface.Observe que é possível ter mais de uma porta de modo de exibição em um único HWND.
Normalmente, cada tipo de exibição tem uma representação impressa diferente.Assim, exibições e os sites de modo de exibição correspondente devem implementar as interfaces de impressão se IPrint e IContinueCallback, respectivamente. O quadro de modo de exibição deve negociar com o provedor de modo de exibição por meio de IPrint durante a impressão começa, para que cabeçalhos, rodapés, margens e elementos relacionados sejam impressos corretamente.O provedor de visualização notifica o quadro de eventos relacionados à impressão através de IContinueCallback. Para obter mais informações sobre o uso dessas interfaces, consulte Impressão através de programação.
Observe que se um documento ativo só oferece suporte a um único modo de exibição, em seguida, o documento ativo e o único modo de exibição podem ser implementadas usando uma única classe concreta.IOleDocument::CreateView simplesmente retorna IOleDocumentView ponteiro de interface. Em resumo, não é necessário que haver duas instâncias de objeto separado que é necessário apenas um modo de exibição.
Um objeto de exibição também pode ser um destino de comando.Implementando IOleCommandTarget um modo de exibição pode receber comandos que se originam na interface do usuário do contêiner (sistema autônomo Novo, em aberto, Salvar sistema autônomo, Impressão on the Arquivo menu; and Cópia, Colar, Desfazer sobre o edição menu).Para obter mais informações, consulte Manipulação de mensagem e destinos de comando.