Caixa de diálogo Imprimir
A caixa de diálogo Imprimir permite que o usuário selecione opções para um trabalho de impressão específico. Por exemplo, o usuário pode especificar a impressora a ser usada, o intervalo de páginas a imprimir e o número de cópias.
Você pode usar a função PrintDlgEx para exibir uma Folha de propriedades de impressão , que tem uma página Geral contendo controles semelhantes à caixa de diálogo Imprimir . A ficha de propriedades também pode incluir páginas de propriedades adicionais específicas da aplicação e do driver, após a página Geral.
Você cria e exibe uma caixa de diálogo de impressão , inicializando uma estrutura PRINTDLG e passando essa estrutura para a funçãoPrintDlg.
A ilustração a seguir mostra uma caixa de diálogo típica Imprimir.
Se o usuário clicar no botão OK, PrintDlg retornará TRUE e usará a estruturaPRINTDLG para retornar informações sobre as seleções do usuário. Por exemplo, os membros hDevMode e hDevNames normalmente retornam identificadores de memória global para estruturas DEVNAMES. Você pode usar as informações nessas estruturas para criar um contexto de dispositivo ou um contexto de informações para a impressora selecionada.
Se o usuário cancelar a caixa de diálogo Imprimir ou ocorrer um erro, PrintDlg retornará FALSE. Você pode determinar a causa de um erro usando a funçãoCommDlgExtendedError para recuperar o valor de erro estendido.
A caixa de diálogo Imprimir inclui um grupo de botões de opção denominado Intervalo de Impressão que indicam se o utilizador deseja imprimir todas as páginas, um intervalo de páginas ou apenas o texto selecionado. Antes de chamar PrintDlg, você pode definir um dos sinalizadores PD_ALLPAGES, PD_SELECTIONou PD_PAGENUMS para indicar qual botão está selecionado inicialmente. Quando PrintDlg retorna TRUE, a função define um desses sinalizadores para indicar as seleções do usuário. Se PD_PAGENUMS estiver definido, os membros nFromPage e nToPage da estrutura PRINTDLG contêm as páginas iniciais e finais especificadas pelo utilizador. Para desativar o botão de opção Páginas e os controles de edição associados De e Para , deve definir o sinalizador PD_NOPAGENUMS. Para desativar o botão de opção Seleção , defina o sinalizador PD_NOSELECTION.
A caixa de diálogo inclui um controle de edição no qual o usuário pode digitar o número de cópias para imprimir. Se o membro hDevMode da estrutura PRINTDLG não forNULL, o membro dmCopies da estrutura especifica o valor inicial para este controlo de edição. Se hDevMode estiver NULL, o membro nCopies da estrutura PRINTDLG determina o valor inicial. Quando PrintDlg retorna, nCopies normalmente indica o número de cópias especificado pelo usuário. No entanto, se definirmos o sinalizador PD_USEDEVMODECOPIESANDCOLLATE ao criar a caixa de diálogo, nCopies será sempre definido como 1 no retorno e o membro dmCopies de DEVMODE indicará o número de cópias a serem impressas.
A caixa de seleção Agrupar indica se o usuário deseja agrupar as páginas se várias cópias estiverem sendo impressas. O flag PD_COLLATE será definido se a caixa de seleção Agrupar estiver marcada. Se a sua aplicação não suportar várias cópias ou agrupamento simulado, defina o sinalizador PD_USEDEVMODECOPIESANDCOLLATE no membro Flags da estrutura PRINTDLG. Isso desativa a caixa de seleção Agrupar e o Número de Cópias controle de edição, a menos que o driver da impressora ofereça suporte a várias cópias e agrupamento.
A caixa de seleção Imprimir em arquivo indica se o usuário deseja enviar a saída para um arquivo em vez de para uma impressora. Você pode definir o sinalizador PD_PRINTTOFILE para que a caixa de seleção seja marcada inicialmente. Para ocultar a caixa de seleção, defina a marcação PD_HIDEPRINTTOFILE. Para desativá-lo, defina o sinalizador PD_DISABLEPRINTTOFILE. Se o utilizador selecionar a opção Print To File, o PrintDlg definirá o sinalizador PD_PRINTTOFILE e retornará "FILE:" na posição especificada pelo membro wOutputOffset da estrutura DEVNAMES. Ao chamar a função para iniciar a operação de impressão, especifica a string "FILE:" no membro lpszOutput da estrutura. A especificação dessa cadeia de caracteres faz com que o subsistema de impressão consulte o usuário para obter o nome do arquivo de saída.
Por padrão, a caixa de diálogo Imprimir exibe inicialmente informações sobre a impressora padrão atual. Para exibir informações de outra impressora instalada, inicialize uma estrutura DEVNAMES e uma estrutura , e atribua o identificador de memória global a estas estruturas para os membros hDevMode e hDevNames. O nome do dispositivo que especificar no membro dmDeviceName da estrutura DEVMODE e no membro wDriverOffset da estrutura DEVNAMES deve identificar um dispositivo de impressora que também esteja listado na seção [Devices] do arquivo Win.ini. Se o dispositivo não estiver listado, PrintDlg retornará um erro.
Você pode direcionar PrintDlg para criar um contexto de dispositivo ou contexto de informação para a impressora ao definir a bandeira PD_RETURNDC ou PD_RETURNIC no membro Flags da estrutura PRINTDLG. A função retorna um identificador para o contexto de dispositivo ou contexto de informação no membro hDC. Se utilizar o marcador PD_RETURNDC, poderá usar o contexto de dispositivo para gerar saída para a impressora.
Para recuperar informações sobre a impressora padrão sem exibir a caixa de diálogo Imprimir, defina o sinalizador PD_RETURNDEFAULT. Nesse caso, PrintDlg retorna imediatamente após definir o hDevMode e hDevNames membros para manipuladores de estruturas que contêm as informações.
Por padrão, PrintDlg exibe caixas de mensagem quando ocorrem erros. Por exemplo, a função exibe uma mensagem de erro se nenhuma impressora estiver instalada. Para impedir que a função exiba essas mensagens de aviso, defina o sinalizador PD_NOWARNING.
Os tópicos a seguir são discutidos nesta seção.
Personalizando a caixa de diálogo de impressão
Você pode fornecer um modelo personalizado para a caixa de diálogo Imprimir, por exemplo, se quiser incluir controles adicionais exclusivos para seu aplicativo. A função PrintDlg usa seu modelo personalizado no lugar do modelo padrão.
Para disponibilizar um modelo personalizado na caixa de diálogo de impressão :
- Crie o modelo personalizado modificando o modelo padrão especificado no arquivo Prnsetup.dlg. Os identificadores de controle usados no modelo de diálogo padrão Imprimir são definidos no arquivo Dlgs.h.
- Use a estrutura PRINTDLG para habilitar o modelo da seguinte maneira:
Se o seu modelo personalizado for um recurso numa aplicação ou biblioteca de vínculo dinâmico, defina o sinalizador PD_ENABLEPRINTTEMPLATE no membro Flags. Utilize os membros hInstance e lpPrintTemplateName da estrutura para identificar o módulo e o nome do recurso.
-Ou-
Se o seu modelo personalizado já estiver na memória, defina o sinalizador PD_ENABLEPRINTTEMPLATEHANDLE. Utilize o membro hPrintTemplate para identificar o objeto de memória que contém o template.
Você pode fornecer um procedimento de gancho PrintHookProc para a caixa de diálogo Imprimir . O procedimento de gancho pode processar mensagens enviadas para a caixa de diálogo. Ele também pode enviar mensagens para a caixa de diálogo. Se utilizares um modelo personalizado para definir controles adicionais, deves fornecer uma função gancho para processar entradas para os teus controles.
Para habilitar um procedimento de gancho para a caixa de diálogo Imprimir:
- Defina o sinalizador PD_ENABLEPRINTHOOK no membro Flags da estrutura PRINTDLG.
- Especifique o endereço do procedimento hook no membro lpfnPrintHook.
Depois de processar a sua mensagem WM_INITDIALOG, o procedimento da caixa de diálogo envia uma mensagem WM_INITDIALOG para a função de gancho. O parâmetro lParam desta mensagem é um ponteiro para a estrutura PRINTDLG usada para inicializar a caixa de diálogo.
Caixa de diálogo de Configuração de Impressão
Você pode criar e exibir uma caixa de diálogo Configuração de Impressão definindo o sinalizador PD_PRINTSETUP em uma chamada para a funçãoPrintDlg. No entanto, a caixa de diálogo de Configuração de Impressão foi substituída pela caixa de diálogo de Configuração de Página e não deve ser usada em novas aplicações.
Os sinalizadores a seguir aplicam-se somente à caixa de diálogo Configuração de Impressão:
- PD_ENABLESETUPHOOK
- PD_ENABLESETUPTEMPLATE
- PD_ENABLESETUPTEMPLATEHANDLE