Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico discute as interfaces e métodos específicos necessários para criar um manipulador de visualização.
Um manipulador de visualização deve implementar as seguintes interfaces:
- IInitializeWithStream::Initialize (fortemente preferido), IInitializeWithFileou IInitializeWithItem
- IObjectWithSite
- IOleWindow
- IPreviewHandler
Se o manipulador de visualização oferecer suporte a configurações visuais fornecidas pelo host, como cor de plano de fundo e fonte, ele também deverá implementar a seguinte interface:
Este tópico pressupõe que o manipulador de visualização seja inicializado com um fluxo e esteja registrado para uma extensão de nome de arquivo específica.
IInitializeWithStream::Inicializar
Armazena o IStream e os parâmetros de modo para que possas ler os dados do item quando estiveres pronto para visualizar o item. Não carregue os dados em inicializar. Carregue os dados no IPreviewHandler::D oPreview imediatamente antes de renderizar.
IObjectWithSite
IObjectWithSite::SetSite
Armazene o ponteiro IUnknown para acesso posterior.
Se atualmente tiver uma referência a um objeto IPreviewHandlerFrame, liberte-a. Use o ponteiro armazenado IUnknown para chamar QueryInterface no site para uma nova referência de IPreviewHandlerFrame.
Se você tem atualmente uma mesa de aceleração, destrua-a. Chame IPreviewHandlerFrame::GetWindowContext para obter uma nova tabela de aceleradores. Armazene esta tabela. Observe que ele é usado apenas como uma lista de teclas de aceleração que o quadro suporta. Os comandos nas entradas do acelerador são ignorados.
IObjectWithSite::GetSite
Devolva o ponteiro do site, seja ele qual for.
IOleWindow
IOleWindow::AjudaSensívelAoContexto
Retorne E_NOTIMPL para este método.
IOleWindow::GetWindow
Se a janela do manipulador de visualização existir atualmente, retorne o HWND dessa janela e S_OK. Se a janela não existir, retorne E_FAIL.
IPreviewHandler
- IPreviewHandler::SetWindow
- IPreviewHandler::SetRect
- IPreviewHandler::DoPreview
- IPreviewHandler::SetFocus
- IPreviewHandler::QueryFocus
- IPreviewHandler::TranslateAccelerator
- IPreviewHandler::Descarregar
IPreviewHandler::SetWindow
Defina o parâmetro hwnd deste método como o pai do HWND do seu manipulador de pré-visualização. Este método pode ser chamado várias vezes. Redimensione sua visualização para que ela seja renderizada somente na área descrita pelo parâmetro prc.
Se o pré-visualizador estiver no processo de renderização, use o método IPreviewHandler::SetWindow para alterar o pai do pré-visualizador. Altere também a área na qual o pré-visualizador está renderizando.
IPreviewHandler::SetRect
Redimensione sua visualização para que ela seja renderizada apenas na área descrita pelo prcdeste método.
Se o pré-visualizador estiver no processo de renderização, altere a área na qual o pré-visualizador renderiza.
IPreviewHandler::DoPreview
É aqui que o verdadeiro trabalho é feito. Como uma visualização é dinâmica, o conteúdo da visualização só deve ser carregado quando necessário. Não carregue conteúdo na inicialização.
Se a janela do manipulador de visualização não existir, crie-a. As janelas do manipulador de visualização devem ser filhas da janela fornecida por IPreviewHandler::SetWindow. Eles devem ter o tamanho fornecido por IPreviewHandler::SetWindow e IPreviewHandler::SetRect (o que foi chamado mais recentemente).
Depois de ter uma janela, carregue os dados do IStream com o qual o manipulador de visualização foi inicializado e renderize esses dados na janela do manipulador de visualização.
IPreviewHandler::SetFocus
Esse método é chamado quando o foco entra no painel de leitura por meio de uma ação de tabulação. Como a tabulação pode ser feita tanto para a frente como para trás, use o estado atual da tecla SHIFT para decidir se a primeira ou a última tabulação no painel de leitura deve ter o foco.
IPreviewHandler::QueryFocus
Esse método deve chamar a funçãoGetFocus e retornar o resultado dessa chamada no parâmetro phwnd.
IPreviewHandler::TranslateAccelerator
Esse método é chamado pela bomba de mensagens do processo do manipulador de visualização, seja prevhost.exe, ou um servidor local personalizado, em resposta às teclas pressionadas pelo usuário. Os manipuladores de visualização devem lidar com essas teclas pressionadas ou encaminhá-las para seu host de acordo com o algoritmo detalhado abaixo.
No entanto, como as visualizações são somente leitura, a entrada do teclado deve ser mínima e otimizações como essa não são necessárias em muitos casos.
Se o acelerador de teclado passado para este método através da bomba de mensagens for um acelerador que o manipulador de visualização aceita, processe-o e retorne S_OK. Se o manipulador não aceitar esse acelerador, a mensagem do acelerador poderá ser enviada de volta até o quadro a ser manipulado.
Há duas opções para encaminhar aceleradores de teclado de volta para o quadro:
O modelo mais simples é encaminhar todas as teclas pressionadas para o host usando IPreviewHandlerFrame::TranslateAccelerator. Isso é feito no exemplo de manipulador de visualização fornecido com o Windows Software Development Kit (SDK). Todos os manipuladores de visualização de baixa integridade devem usar esse modelo. Se o acelerador não for manipulado pelo manipulador de visualização, chame IPreviewHandlerFrame::TranslateAccelerator e retorne o seu resultado.
O outro modelo é usar uma tabela aceleradora como uma otimização para evitar o envio de muitos toques de teclas através dos limites do processo.
- Quando IObjectWithSite::SetSite for chamado em seu manipulador de visualização, adquira a tabela aceleradora por meio IPreviewHandlerFrame::GetWindowContext. (Certifique-se de liberar a alça para a tabela do acelerador quando o pré-visualizador for destruído.)
- Se o acelerador for manipulado pelo manipulador de visualização, manipule-o e retorne S_OK.
- Se o acelerador não for manipulado pelo manipulador de visualização, compare a mensagem usando IsAccelerator com a tabela de aceleração adquirida.
- Se o acelerador corresponder a uma entrada nessa tabela de aceleradores, chame IPreviewHandlerFrame::TranslateAccelerator e retorne o resultado.
- Se o acelerador não corresponder a nenhuma entrada na tabela do acelerador, retorne S_FALSE.
IPreviewHandler::Descarregar
Quando esse método é chamado, pare qualquer renderização, libere todos os recursos alocados lendo dados do fluxo e libere o IStream em si.
Depois que esse método é chamado, o manipulador deve ser reinicializado antes de qualquer tentativa de chamar IPreviewHandler::D oPreview novamente.
IPreviewHandlerVisuals
- IPreviewHandlerVisuals::SetBackgroundColor
- IPreviewHandlerVisuals::SetFont
- IPreviewHandlerVisuals::SetTextColor
Esses métodos devem ser implementados ao direcionar o manipulador de visualização para responder aos esquemas de cores e fontes do host. O host consulta o manipulador para IPreviewHandlerVisuals. Se for suportado, o host aplica cor, tipo de letra e cor de texto.
IPreviewHandlerVisuals::SetBackgroundColor
Armazene essa cor e use-a durante a renderização quando quiser fornecer uma cor de plano de fundo. Por exemplo, para preencher a janela quando o manipulador renderiza para uma área menor do que a área fornecida pelo IPreviewHandler::SetWindow e IPreviewHandler::SetRect. Note, no entanto, que você não deve desenhar fora da área fornecida por esses métodos.
Se esse método for chamado enquanto a visualização já está sendo renderizada, a renderização deve ser reiniciada usando essa cor de plano de fundo.
IPreviewHandlerVisuals::SetFont
Armazene essas informações de fonte e use-as durante a renderização quando quiser exibir texto consistente com as configurações atuais do Windows Vista.
IPreviewHandlerVisuals::SetTextColor
Armazene essas informações de cor de texto e use-as durante a renderização quando quiser exibir texto consistente com as configurações atuais do Windows Vista.
Tópicos relacionados