Partilhar via


Estrutura PRINTDLGW (commdlg.h)

Contém informações que a função PrintDlg usa para inicializar a caixa de diálogo Imprimir. Depois que o usuário fecha a caixa de diálogo, o sistema usa essa estrutura para retornar informações sobre as seleções do usuário.

Sintaxe

typedef struct tagPDW {
  DWORD           lStructSize;
  HWND            hwndOwner;
  HGLOBAL         hDevMode;
  HGLOBAL         hDevNames;
  HDC             hDC;
  DWORD           Flags;
  WORD            nFromPage;
  WORD            nToPage;
  WORD            nMinPage;
  WORD            nMaxPage;
  WORD            nCopies;
  HINSTANCE       hInstance;
  LPARAM          lCustData;
  LPPRINTHOOKPROC lpfnPrintHook;
  LPSETUPHOOKPROC lpfnSetupHook;
  LPCWSTR         lpPrintTemplateName;
  LPCWSTR         lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGW, *LPPRINTDLGW;

Membros

lStructSize

Tipo: DWORD

O tamanho da estrutura, em bytes.

hwndOwner

Tipo: HWND

Um identificador para a janela que possui a caixa de diálogo. Esse membro pode ser qualquer identificador de janela válido ou pode ser NULL se a caixa de diálogo não tiver proprietário.

hDevMode

Tipo: HGLOBAL

Um identificador para um objeto de memória global móvel que contém uma estrutura de DEVMODE . Se hDevMode não estiver NULL na entrada, você deverá alocar um bloco móvel de memória para a estrutura de DEVMODE e inicializar seus membros. A função PrintDlg usa os dados de entrada para inicializar os controles na caixa de diálogo. Quando o PrintDlg retorna, os membros DEVMODE indicam a entrada do usuário.

Se hDevMode for NULL na entrada, PrintDlg alocar memória para a estrutura de DEVMODE , inicializará seus membros para indicar a entrada do usuário e retornará um identificador que a identifique.

Se o driver do dispositivo da impressora especificada não der suporte a modos de dispositivo estendidos, hDevMode será NULL quando o PrintDlg retornar.

Se o nome do dispositivo (especificado pelo dmDeviceName membro da estrutura DEVMODE) não aparecer na seção [dispositivos] do WIN. INI, PrintDlg retorna um erro.

Para obter mais informações sobre os membros do hDevMode e hDevNames, consulte a seção Comentários no final deste tópico.

hDevNames

Tipo: HGLOBAL

Um identificador para um objeto de memória global móvel que contém uma estrutura de DEVNAMES . Se hDevNames não estiver NULL na entrada, você deverá alocar um bloco móvel de memória para a estrutura de DEVNAMES e inicializar seus membros. A função PrintDlg usa os dados de entrada para inicializar os controles na caixa de diálogo. Quando o PrintDlg retorna, os membros DEVNAMES contêm informações para a impressora escolhida pelo usuário. Você pode usar essas informações para criar um contexto de dispositivo ou um contexto de informações.

O membro hDevNames pode ser NULL, nesse caso, PrintDlg aloca memória para a estrutura de DEVNAMES , inicializa seus membros para indicar a entrada do usuário e retorna um identificador que o identifica.

Para obter mais informações sobre os membros do hDevMode e hDevNames, consulte a seção Comentários no final deste tópico.

hDC

Tipo: HDC

Um identificador para um contexto de dispositivo ou um contexto de informações, dependendo se o Flags membro especifica o sinalizador PD_RETURNDC ou PC_RETURNIC. Se nenhum sinalizador for especificado, o valor desse membro será indefinido. Se ambos os sinalizadores forem especificados, PD_RETURNDC terá prioridade.

Flags

Tipo: DWORD

Inicializa a caixa de diálogo Imprimir. Quando a caixa de diálogo é retornada, ela define esses sinalizadores para indicar a entrada do usuário. Esse membro pode ser um ou mais dos valores a seguir.

Valor Significado
PD_ALLPAGES
0x00000000
O sinalizador padrão que indica que o botão de opção Todos os está selecionado inicialmente. Esse sinalizador é usado como um espaço reservado para indicar que os sinalizadores PD_PAGENUMS e PD_SELECTION não são especificados.
PD_COLLATE
0x00000010
Se esse sinalizador estiver definido, a caixa de seleção Agrupar será selecionada.

Se esse sinalizador for definido quando a função PrintDlg retornar, o aplicativo deverá simular a ordenação de várias cópias. Para obter mais informações, consulte a descrição do sinalizador de PD_USEDEVMODECOPIESANDCOLLATE.

Consulte PD_NOPAGENUMS.

PD_DISABLEPRINTTOFILE
0x00080000
Desabilita a caixa de seleção Imprimir no Arquivo.
PD_ENABLEPRINTHOOK
0x00001000
Habilita o procedimento de gancho especificado no membro lpfnPrintHook . Isso habilita o procedimento de gancho para a caixa de diálogo Imprimir.
PD_ENABLEPRINTTEMPLATE
0x00004000
Indica que os membros hInstance e lpPrintTemplateName especificam uma substituição para o modelo de caixa de diálogo padrão Imprimir.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Indica que o membro hPrintTemplate identifica um bloco de dados que contém um modelo de caixa de diálogo pré-carregado. Esse modelo substitui o modelo padrão para a caixa de diálogo Imprimir. O sistema ignorará o membro lpPrintTemplateName se esse sinalizador for especificado.
PD_ENABLESETUPHOOK
0x00002000
Habilita o procedimento de gancho especificado no membro lpfnSetupHook . Isso habilita o procedimento de gancho para a caixa de diálogo de Instalação de Impressão .
PD_ENABLESETUPTEMPLATE
0x00008000
Indica que os membros hInstance e lpSetupTemplateName especificam uma substituição para o modelo de caixa de diálogo padrão Configuração de Impressão.
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Indica que o membro hSetupTemplate identifica um bloco de dados que contém um modelo de caixa de diálogo pré-carregado. Esse modelo substitui o modelo padrão para a caixa de diálogo Configuração de Impressão. O sistema ignorará o membro lpSetupTemplateName se esse sinalizador for especificado.
PD_HIDEPRINTTOFILE
0x00100000
Oculta a caixa de seleção Imprimir no Arquivo.
PD_NONETWORKBUTTON
0x00200000
Oculta e desabilita o botão rede .
PD_NOPAGENUMS
0x00000008
Desabilita o botão Páginas opção e os controles de edição associados. Além disso, faz com que a caixa de seleção Agrupar apareça na caixa de diálogo.
PD_NOSELECTION
0x00000004
Desabilita o botão de opção seleção de .
PD_NOWARNING
0x00000080
Impede que a mensagem de aviso seja exibida quando não houver nenhuma impressora padrão.
PD_PAGENUMS
0x00000002
Se esse sinalizador estiver definido, o botão Páginas opção será selecionado. Se esse sinalizador for definido quando a função PrintDlg retornar, os membros nFromPage e nToPage indicarão as páginas iniciais e finais especificadas pelo usuário.
PD_PRINTSETUP
0x00000040
Faz com que o sistema exiba a caixa de diálogo de Instalação de Impressão em vez da caixa de diálogo Imprimir.
PD_PRINTTOFILE
0x00000020
Se esse sinalizador estiver definido, a caixa de seleção Imprimir no Arquivo será selecionada. Se esse sinalizador for definido quando a função PrintDlg retornar, o deslocamento indicado pelo wOutputOffset membro da estrutura de DEVNAMES contém a cadeia de caracteres "FILE:". Ao chamar a função StartDoc para iniciar a operação de impressão, especifique esta cadeia de caracteres "FILE:" no membro lpszOutput da estrutura do DOCINFO . Especificar essa cadeia de caracteres faz com que o subsistema de impressão consulte o usuário pelo nome do arquivo de saída.
PD_RETURNDC
0x00000100
Faz com que PrintDlg retorne um contexto de dispositivo que corresponda às seleções feitas pelo usuário na caixa de diálogo. O contexto do dispositivo é retornado em hDC.
PD_RETURNDEFAULT
0x00000400
Se esse sinalizador estiver definido, a função PrintDlg não exibirá a caixa de diálogo. Em vez disso, ele define os membros hDevNames e hDevMode para lidar com estruturas de DEVMODE e DEVNAMES que são inicializadas para a impressora padrão do sistema. Ambos hDevNames e hDevMode devem ser NULL ou PrintDlg retorna um erro.
PD_RETURNIC
0x00000200
Semelhante ao sinalizador PD_RETURNDC, exceto que esse sinalizador retorna um contexto de informações em vez de um contexto de dispositivo. Se PD_RETURNDC nem PD_RETURNIC não for especificado, hDC será indefinido na saída.
PD_SELECTION
0x00000001
Se esse sinalizador estiver definido, o botão Seleção opção será selecionado. Se nem PD_PAGENUMS nem PD_SELECTION estiver definido, o botão de opção Todos os será selecionado.
PD_SHOWHELP
0x00000800
Faz com que a caixa de diálogo exiba o botão Ajuda. O membro hwndOwner deve especificar a janela para receber o HELPMSGSTRING mensagens registradas que a caixa de diálogo envia quando o usuário clica no botão Ajuda.
PD_USEDEVMODECOPIES
0x00040000
O mesmo que PD_USEDEVMODECOPIESANDCOLLATE.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
Esse sinalizador indica se o aplicativo dá suporte a várias cópias e ordenação. Defina esse sinalizador na entrada para indicar que seu aplicativo não dá suporte a várias cópias e ordenação. Nesse caso, o nCopies membro da estrutura PRINTDLG sempre retorna 1 e PD_COLLATE nunca é definido no membro Flags.

Se esse sinalizador não estiver definido, o aplicativo será responsável por imprimir e agrupar várias cópias. Nesse caso, o nCopies membro da estrutura PRINTDLG indica o número de cópias que o usuário deseja imprimir e o sinalizador PD_COLLATE no Flags membro indica se o usuário deseja ordenação.

Independentemente de esse sinalizador ser definido, um aplicativo pode determinar de nCopies e PD_COLLATE quantas cópias serão renderizadas e se devem imprimi-las agrupadas.

Se esse sinalizador estiver definido e o driver da impressora não oferecer suporte a várias cópias, o controle de edição cópias será desabilitado. Da mesma forma, se esse sinalizador estiver definido e o driver da impressora não oferecer suporte à ordenação, a caixa de seleção Agrupar será desabilitada.

Os dmCopies e dmCollate membros da estrutura de DEVMODE contêm as cópias e as informações de ordenação usadas pelo driver da impressora. Se esse sinalizador estiver definido e o driver da impressora der suporte a várias cópias, o dmCopies membro indicará o número de cópias solicitadas pelo usuário. Se esse sinalizador estiver definido e o driver da impressora der suporte à ordenação, o dmCollate membro da estrutura de DEVMODE indica se o usuário deseja ordenação. Se esse sinalizador não estiver definido, o membro dmCopies sempre retornará 1 e o membro dmCollate será sempre zero.

Problema conhecido no Windows 2000/XP/2003: Se esse sinalizador não estiver definido antes de chamar PrintDlg, printDlg poderá trocar nCopies e dmCopies valores quando retornar. A solução alternativa para esse problema é usar dmCopies se seu valor for maior que 1, caso contrário, use nCopies, para obter o número real de cópias a serem impressas quando o PrintDlg retornar.

 

Para garantir que PrintDlg ou PrintDlgEx retorne os valores corretos na dmCopies e dmCollate membros da estrutura de DEVMODE, defina PD_RETURNDCtrue e PD_USEDEVMODECOPIESANDCOLLATETRUE. Ao fazer isso, o nCopies membro da estrutura de PRINTDLG é sempre 1 e PD_COLLATE é sempre false.

Para garantir que PrintDlg ou PrintDlgEx retorne os valores corretos em nCopies e PD_COLLATE, defina PD_RETURNDC = true e PD_USEDEVMODECOPIESANDCOLLATE = false. Ao fazer isso, dmCopies é sempre 1 e dmCollate é sempre false.

No Windows Vista e no Windows 7, quando você chama PrintDlg ou PrintDlgEx com PD_RETURNDC definido como true e PD_USEDEVMODECOPIESANDCOLLATE definido como false , a função PrintDlg ou PrintDlgEx define o número de cópias no nCopies membro da estrutura PRINTDLG, e define o número de cópias na estrutura representada pelo membro hDC da estrutura PRINTDLG .

Ao fazer chamadas para GDI, você deve ignorar o valor de nCopies, considerar o valor como 1 e usar o hDC retornado para evitar a impressão de cópias duplicadas.

nFromPage

Tipo: word

O valor inicial do controle de edição da página inicial.

Quando o PrintDlg retorna, nFromPage é a página inicial especificada pelo usuário. Se o botão de opção Páginas for selecionado quando o usuário clicar no botão Ok, PrintDlg definirá o sinalizador de PD_PAGENUMS e não retornará até que o usuário insira um valor de página inicial dentro do intervalo de páginas mínimo a máximo.

Se o valor de entrada para nFromPage ou nToPage estiver fora do intervalo mínimo/máximo, PrintDlg retornará um erro somente se o sinalizador PD_PAGENUMS for especificado; caso contrário, ele exibe a caixa de diálogo, mas altera o valor fora do intervalo para o valor mínimo ou máximo.

nToPage

Tipo: word

O valor inicial do controle de edição da página final. Quando PrintDlg retorna, nToPage é a página final especificada pelo usuário. Se o botão de opção Páginas for selecionado quando o uso clicar no botão Ok, PrintDlg definirá o sinalizador PD_PAGENUMS e não retornará até que o usuário insira um valor de página final dentro do intervalo de páginas mínimo a máximo.

nMinPage

Tipo: word

O valor mínimo do intervalo de páginas especificado no De e Para controles de edição de página. Se nMinPage for igual a nMaxPage, o botão páginas e os controles de edição de página inicial e final serão desabilitados.

nMaxPage

Tipo: word

O valor máximo do intervalo de páginas especificado no De e Para controles de edição de página.

nCopies

Tipo: word

O número inicial de cópias para o Copia controle de edição se hDevMode for NULL; caso contrário, o dmCopies membro da estrutura de DEVMODE contém o valor inicial. Quando o PrintDlg retorna, nCopies contém o número real de cópias a serem impressas. Esse valor depende se o aplicativo ou o driver da impressora é responsável por imprimir várias cópias. Se o sinalizador de PD_USEDEVMODECOPIESANDCOLLATE estiver definido no membro sinalizadores do , nCopies sempre será 1 no retorno e o driver da impressora será responsável por imprimir várias cópias. Se o sinalizador não estiver definido, o aplicativo será responsável por imprimir o número de cópias especificadas por nCopies. Para obter mais informações, consulte a descrição do sinalizador de PD_USEDEVMODECOPIESANDCOLLATE.

hInstance

Tipo: HINSTANCE

Se o sinalizador PD_ENABLEPRINTTEMPLATE ou PD_ENABLESETUPTEMPLATE estiver definido no membro sinalizadores , hInstance será um identificador para a instância do aplicativo ou módulo que contém o modelo de caixa de diálogo nomeado pelo lpPrintTemplateName ou membro lpSetupTemplateName.

lCustData

Tipo: LPARAM

Dados definidos pelo aplicativo que o sistema passa para o procedimento de gancho identificado pelo lpfnPrintHook ou lpfnSetupHook membro. Quando o sistema envia a mensagem WM_INITDIALOG para o procedimento de gancho, o parâmetro lParam da mensagem é um ponteiro para a estrutura PRINTDLG especificada quando a caixa de diálogo foi criada. O procedimento de gancho pode usar esse ponteiro para obter o valor lCustData.

lpfnPrintHook

Tipo: LPPRINTHOOKPROC

Um ponteiro para um procedimento PrintHookProc que pode processar mensagens destinadas à caixa de diálogo Imprimir. Esse membro é ignorado, a menos que o sinalizador de PD_ENABLEPRINTHOOK seja definido no membro sinalizadores do .

lpfnSetupHook

Tipo: LPSETUPHOOKPROC

Um ponteiro para um procedimento de SetupHookProc gancho que pode processar mensagens destinadas à caixa de diálogo configuração de impressão . Esse membro é ignorado, a menos que o sinalizador de PD_ENABLESETUPHOOK seja definido no membro sinalizadores do .

lpPrintTemplateName

Tipo: LPCTSTR

O nome do recurso de modelo da caixa de diálogo no módulo identificado pelo membro do hInstance. Esse modelo substitui o modelo de caixa de diálogo padrão Imprimir. Esse membro é ignorado, a menos que o sinalizador de PD_ENABLEPRINTTEMPLATE seja definido no membro sinalizadores do .

lpSetupTemplateName

Tipo: LPCTSTR

O nome do recurso de modelo da caixa de diálogo no módulo identificado pelo membro do hInstance. Esse modelo substitui o modelo de caixa de diálogo padrão Configuração de Impressão. Esse membro é ignorado, a menos que o sinalizador de PD_ENABLESETUPTEMPLATE seja definido no membro sinalizadores do .

hPrintTemplate

Tipo: HGLOBAL

Se o sinalizador PD_ENABLEPRINTTEMPLATEHANDLE estiver definido no membro sinalizadores do , hPrintTemplate será um identificador para um objeto de memória que contém um modelo de caixa de diálogo. Esse modelo substitui o modelo de caixa de diálogo padrão Imprimir.

hSetupTemplate

Tipo: HGLOBAL

Se o sinalizador de PD_ENABLESETUPTEMPLATEHANDLE estiver definido no membro sinalizadores do , hSetupTemplate será um identificador para um objeto de memória que contém um modelo de caixa de diálogo. Esse modelo substitui o modelo de caixa de diálogo padrão Configuração de Impressão.

Observações

Se hDevMode e hDevNames estiverem NULL, PrintDlg inicializará a caixa de diálogo usando a impressora padrão atual. Para inicializar a caixa de diálogo de uma impressora diferente, use o wDeviceOffset membro da estrutura DEVNAMES para especificar o nome da impressora.

Observe que o dmDeviceName membro da estrutura de DEVMODE também especifica um nome de impressora. No entanto, dmDeviceName é limitado a 32 caracteres e o nome wDeviceOffset não é. Se os nomes wDeviceOffset e dmDeviceName não forem os mesmos, PrintDlg inicializará a caixa de diálogo usando a impressora especificada por wDeviceOffset.

Se o sinalizador PD_RETURNDEFAULT estiver definido e hDevMode e hDevNames estiverem NULL, PrintDlg usará os membros hDevNames e hDevMode para retornar informações sobre a impressora padrão atual sem exibir a caixa de diálogo.

Nota

O cabeçalho commdlg.h define PRINTDLG como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000 Professional [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows 2000 Server [somente aplicativos da área de trabalho]
cabeçalho commdlg.h (inclua Windows.h)

Consulte também

da Biblioteca de Caixas de Diálogo Comuns

Conceitual

DEVMODE

DEVNAMES

PrintDlg

de referência de

WM_INITDIALOG