Compartilhar via


Função DrvDocumentEvent (winddiui.h)

A função DrvDocumentEvent de uma interface de impressora DLL pode lidar com determinados eventos associados à impressão de um documento.

Sintaxe

int DrvDocumentEvent(
        HANDLE hPrinter,
        HDC    hdc,
        int    iEsc,
        ULONG  cbIn,
  [in]  PVOID  pvIn,
        ULONG  cbOut,
  [out] PVOID  pvOut
);

Parâmetros

hPrinter

Identificador de impressora fornecido pelo chamador.

hdc

Identificador de contexto de dispositivo fornecido pelo chamador, gerado por um CreateDC Isso será zero se iEsc estiver definido como DOCUMENTEVENT_CREATEDCPRE. Para obter restrições de impressão de um aplicativo de 32 bits em uma versão de 64 bits do Windows, consulte a seção Comentários abaixo.

iEsc

Código de escape fornecido pelo chamador que identifica o evento a ser manipulado.

Para obter restrições de impressão de um aplicativo de 32 bits em uma versão de 64 bits do Windows, consulte a seção Comentários abaixo.

Esse parâmetro pode ser uma das seguintes constantes de inteiro:

Constante iEsc Evento
DOCUMENTEVENT_ABORTDOC A GDI está prestes a processar uma chamada para sua função AbortDoc .
DOCUMENTEVENT_CREATEDCPOST A GDI acabou de processar uma chamada para sua função CreateDC ou CreateIC . Esse código de escape não deve ser usado, a menos que tenha havido uma chamada anterior para DrvDocumentEvent com iEsc definido como DOCUMENTEVENT_CREATEDCPRE.
DOCUMENTEVENT_CREATEDCPRE A GDI está prestes a processar uma chamada para sua função CreateDC ou CreateIC .
DOCUMENTEVENT_DELETEDC A GDI está prestes a processar uma chamada para sua função DeleteDC .
DOCUMENTEVENT_ENDDOCPOST A GDI acabou de processar uma chamada para sua função EndDoc .
DOCUMENTEVENT_ENDDOCPRE ou DOCUMENTEVENT_ENDDOC A GDI está prestes a processar uma chamada para sua função EndDoc .
DOCUMENTEVENT_ENDPAGE A GDI está prestes a processar uma chamada para sua função EndPage .
DOCUMENTEVENT_ESCAPE A GDI está prestes a processar uma chamada para sua função ExtEscape .
DOCUMENTEVENT_QUERYFILTER O evento DOCUMENTEVENT_QUERYFILTER representa uma oportunidade para o spooler consultar o driver para obter uma lista dos eventos DOCUMENTEVENT_XXX aos quais o driver responderá. Esse evento é emitido pouco antes de uma chamada para DrvDocumentEvent que passa o evento DOCUMENTEVENT_CREATEDCPRE.
DOCUMENTEVENT_RESETDCPOST A GDI acabou de processar uma chamada para sua função ResetDC . Esse código de escape não deve ser usado, a menos que tenha havido uma chamada anterior para DrvDocumentEvent com iEsc definido como DOCUMENTEVENT_RESETDCPRE.
DOCUMENTEVENT_RESETDCPRE A GDI está prestes a processar uma chamada para sua função ResetDC .
DOCUMENTEVENT_STARTDOCPOST A GDI acabou de processar uma chamada para sua função StartDoc .
DOCUMENTEVENT_STARTDOCPRE ou DOCUMENTEVENT_STARTDOC A GDI está prestes a processar uma chamada para sua função StartDoc .
DOCUMENTEVENT_STARTPAGE A GDI está prestes a processar uma chamada para sua função StartPage .

cbIn

Tamanho fornecido pelo chamador, em bytes, do buffer apontado por pvIn.

[in] pvIn

Ponteiro fornecido pelo chamador, cujo uso depende do valor fornecido para iEsc, da seguinte maneira:

Constante iEsc Conteúdo de pvIn
DOCUMENTEVENT_ABORTDOC Não usado.
DOCUMENTEVENT_CREATEDCPOST pvIn contém o endereço de um ponteiro para a estrutura DEVMODEW especificada no parâmetro pvOut em uma chamada anterior para essa função, para a qual o parâmetro iEsc foi definido como DOCUMENTEVENT_CREATEDCPRE.
DOCUMENTEVENT_CREATEDCPRE pvIn aponta para uma estrutura DOCEVENT_CREATEDCPRE .
DOCUMENTEVENT_DELETEDC Não usado.
DOCUMENTEVENT_ENDDOCPOST Não usado.
DOCUMENTEVENT_ENDDOCPRE ou DOCUMENTEVENT_ENDDOC Não usado.
DOCUMENTEVENT_ENDPAGE Não usado.
DOCUMENTEVENT_ESCAPE pvIn aponta para uma estrutura de DOCEVENT_ESCAPE .
DOCUMENTEVENT_QUERYFILTER O mesmo que para DOCUMENTEVENT_CREATEDCPRE.
DOCUMENTEVENT_RESETDCPOST pvIn contém o endereço de um ponteiro para a estrutura DEVMODEW especificada no parâmetro pvOut em uma chamada anterior para essa função, para a qual o parâmetro iEsc foi definido como DOCUMENTEVENT_RESETDCPRE.
DOCUMENTEVENT_RESETDCPRE pvIn contém o endereço de um ponteiro para a estrutura DEVMODEW fornecida pelo chamador da função ResetDC .
DOCUMENTEVENT_STARTDOCPOST pvIn aponta para um LONG que especifica o identificador de trabalho de impressão retornado pela função StartDoc .
DOCUMENTEVENT_STARTDOCPRE ou DOCUMENTEVENT_STARTDOC pvIn contém o endereço de um ponteiro para uma estrutura DOCINFO fornecida pelo chamador da função StartDoc .
DOCUMENTEVENT_STARTPAGE Não usado.

cbOut

Se iEsc for DOCUMENTEVENT_ESCAPE

Valor fornecido pela função que é usado como o parâmetro cbOutput para a função ExtEscape .

Se iEsc for DOCUMENTEVENT_QUERYFILTER

Tamanho fornecido pelo chamador, em bytes, do ponteiro do buffer para por pvOut.

Para todos os outros valores iEsc

Não usado.

[out] pvOut

Ponteiro fornecido pela função para um buffer de saída, cujo uso depende do valor fornecido para iEsc, da seguinte maneira:

Constante iEsc Conteúdo de pvOut
DOCUMENTEVENT_CREATEDCPRE Ponteiro para uma estrutura DEVMODEW fornecida pelo driver, que a GDI usa em vez da fornecida pelo chamador CreateDC . (Se FOR NULL, a GDI usará a estrutura fornecida pelo chamador.)
DOCUMENTEVENT_ESCAPE Ponteiro de buffer usado como o parâmetro lpszOutData para a função ExtEscape .
DOCUMENTEVENT_QUERYFILTER Ponteiro fornecido pelo chamador para buffer que contém uma estrutura DOCEVENT_FILTER .
DOCUMENTEVENT_RESETDCPRE Ponteiro para uma estrutura DEVMODEW fornecida pelo driver, que o GDI usa em vez da fornecida pelo chamador da função ResetDC . (Se FOR NULL, a GDI usará a estrutura fornecida pelo chamador.)
Todos os outros valores iEsc Não usado.

Retornar valor

O valor retornado da função depende do escape fornecido para iEsc. Para alguns códigos de escape, o valor retornado não é usado (consulte a segunda lista de valores). Se a função fornecer um valor retornado, ela deverá ser uma das seguintes:

Código de retorno Descrição
DOCUMENTEVENT_FAILURE O driver dá suporte ao código de escape identificado pelo iEsc, mas ocorreu uma falha.
DOCUMENTEVENT_SUCCESS O driver lidou com êxito com o código de escape identificado pelo iEsc.
DOCUMENTEVENT_UNSUPPORTED O driver não dá suporte ao código de escape identificado pelo iEsc.

Comentários

Opcionalmente, uma DLL de interface de impressora pode fornecer uma função DrvDocumentEvent para executar pré-processamento ou pós-processamento de chamadas GDI associadas à renderização de um documento. As chamadas para a função DrvDocumentEvent são feitas do cliente GDI no modo de usuário, quando um aplicativo faz chamadas para o cliente GDI.

Para um valor iEsc de DOCUMENTEVENT_QUERYFILTER, o spooler pode interpretar um valor DOCUMENTEVENT_SUCCESS retornado por DrvDocumentEvent de duas maneiras, dependendo se o driver modificou determinados membros da estrutura DOCEVENT_FILTER . (O parâmetro pvOut aponta para essa estrutura.) Quando o spooler aloca memória para uma estrutura desse tipo, ele inicializa dois membros dessa estrutura, cElementsReturned e cElementsNeeded, para valores conhecidos. Depois que DrvDocumentEvent retorna, o spooler determina se os valores desses membros foram alterados e usa essas informações para interpretar o valor retornado drvDocumentEvent . A tabela a seguir resume essa situação.

Retornar valor Status de cElementsReturned, cElementsNeeded Significado
DOCUMENTEVENT_SUCCESS O driver não fez nenhuma alteração em nenhum dos membros. O spooler interpreta esse valor retornado como equivalente a DOCUMENTEVENT_UNSUPPORTED. O spooler não consegue recuperar o filtro de evento do driver, portanto, ele persiste na chamada de DrvDocumentEvent para todos os eventos.
DOCUMENTEVENT_SUCCESS O driver escreveu para um ou ambos os membros. O spooler aceita esse valor retornado sem interpretação. Se o driver tiver escrito em apenas um dos cElementsNeeded e cElementsReturned, o spooler considerará que o membro inalterado tem um valor igual a zero. O spooler filtra todos os eventos listados no membro aDocEventCall do DOCEVENT_FILTER.
DOCUMENTEVENT_UNSUPPORTED Não aplicável O driver não dá suporte a DOCUMENTEVENT_QUERYFILTER. O spooler não consegue recuperar o filtro de evento do driver, portanto, ele persiste na chamada de DrvDocumentEvent para todos os eventos.
DOCUMENTEVENT_FAILURE Não aplicável O driver dá suporte a DOCUMENTEVENT_QUERYFILTER, mas encontrou um erro interno. O spooler não consegue recuperar o filtro de evento do driver, portanto, ele persiste na chamada de DrvDocumentEvent para todos os eventos.

Se o nome do código de escape não tiver sufixo ou for sufixo com PRE, o cliente GDI chamará DrvDocumentEvent pouco antes de chamar o mecanismo de renderização GDI no modo kernel. Se o nome do código de escape for sufixo com POST, o cliente GDI chamará DrvDocumentEvent logo após o mecanismo de renderização GDI do modo kernel retornar.

Se o código de escape fornecido no parâmetro iEsc for DOCUMENTEVENT_CREATEDCPRE, as seguintes regras se aplicarão:

  • Se o trabalho estiver sendo enviado diretamente para a impressora sem spooling, pvIn --> pszDevice apontará para o nome da impressora. (Consulte a estrutura DOCEVENT_CREATEDCPRE para obter mais informações.)

  • Se o trabalho estiver sendo spool, pvIn --> pszDevice apontará para o nome da porta da impressora.

A função DrvDocumentEvent é executada no contexto do chamador de modo de usuário da função de cliente GDI. Quando o spool em EMF está desabilitado, a função pode exibir uma interface do usuário. Por exemplo, a função DrvDocumentEvent para um driver fax pode exibir uma caixa de diálogo para o usuário antes que a função StartDoc da GDI seja processada.

As seguintes restrições se aplicam ao executar um aplicativo de 32 bits em uma versão de 64 bits do Windows:

  • A única função GDI que DrvDocumentEvent deve chamar é ExtEscape, e somente escapes privados devem ser usados.

  • Chamadas drvDocumentEvent para outras funções GDI podem produzir um comportamento indefinido.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho winddiui.h (inclua Winddiui.h)

Confira também

DOCEVENT_CREATEDCPRE

DOCEVENT_ESCAPE

DOCEVENT_FILTER