Partilhar via


Caixa de diálogo Configurar Página

Exibe uma caixa de diálogo modal que permite que o usuário defina os seguintes atributos da página impressa:

  • O tipo de papel (envelope, legal, carta e assim por diante)
  • A origem do papel (alimentação manual, alimentação de trator, alimentador de planilhas e assim por diante)
  • A orientação da página (retrato ou paisagem)
  • A largura das margens da página

Você cria e exibe uma caixa de diálogo Configuração de Página inicializando uma estrutura PAGESETUPDLG e passando a estrutura para a função PageSetupDlg . No entanto, os atributos apresentados na caixa de diálogo variam, dependendo dos recursos da impressora. A ilustração a seguir mostra uma caixa de diálogo de Configuração de Página típica.

caixa de diálogo de configuração de página

Se o usuário clicar no botão OK , PageSetupDlg retornará TRUE depois de definir vários membros na estrutura PAGESETUPDLG para especificar as seleções do usuário. Os membros ptPaperSize e rtMargin contêm os valores especificados pelo usuário. Os membros hDevMode e hDevNames contêm identificadores de memória globais para as estruturas DEVMODE e DEVNAMES . Essas estruturas contêm informações de página adicionais, bem como informações sobre a impressora. Você pode usar essas informações para preparar a saída a ser enviada para a impressora selecionada.

Se o usuário cancelar a caixa de diálogo Configuração de Página ou ocorrer um erro, PageSetupDlg retornará FALSE. Para determinar a causa do erro, chame a função CommDlgExtendedError para recuperar o valor de erro estendido.

Esta seção discute os tópicos a seguir.

Inicializando a caixa de diálogo Configuração de Página

Por padrão, a caixa de diálogo Configuração de Página exibe informações sobre a impressora padrão atual. Para direcionar a caixa de diálogo para exibir informações sobre uma impressora específica, defina os membros de uma estrutura DEVMODE ou DEVNAMES e atribua os identificadores de memória globais dessas estruturas ao membro correspondente em PAGESETUPDLG. Se você especificar o nome de uma impressora que não está instalada no momento, a caixa de diálogo exibirá uma mensagem de erro. Para impedir que a caixa de diálogo exiba mensagens de erro, use o valor PSD_NOWARNING . Para recuperar informações sobre a impressora padrão sem exibir a caixa de diálogo Configuração de Página , use o valor PSD_RETURNDEFAULT .

Se o sistema de medida padrão for de polegadas, a caixa de diálogo usará milésimos de polegadas como a unidade padrão de medida. Se o sistema de medida padrão for métrica, a caixa de diálogo usará centésimos de milímetros como a unidade de medida padrão. Para substituir a unidade de medida padrão, defina o sinalizador PSD_INHUNDREDTHSOFMILLIMETERS ou PSD_INTHOUSANDTHSOFINCHES no membro Flags da estrutura PAGESETUPDLG .

Os valores iniciais para as margens são de uma polegada, por padrão. Se você definir o sinalizador PSD_MARGINS , a caixa de diálogo exibirá os valores de margem iniciais especificados no membro rtMargin . Os valores mínimos padrão que o usuário pode especificar para as margens são as margens mínimas permitidas pela impressora. Se você definir o sinalizador PSD_MINMARGINS , a caixa de diálogo imporá as margens mínimas especificadas no membro rtMinMargin .

Para impedir que os usuários selecionem determinadas opções, defina qualquer combinação dos sinalizadores a seguir para desabilitar os controles correspondentes.

Sinalizador Significado
PSD_DISABLEMARGINS Desabilita os controles de edição nos quais o usuário insere as configurações de margem.
PSD_DISABLEORIENTATION Desabilita os botões de opção Retrato e Paisagem .
PSD_DISABLEPAPER Desabilita os controles para selecionar o tamanho do papel e a origem do papel.
PSD_DISABLEPRINTER Desabilita o botão Impressora .

 

Personalizando a caixa de diálogo Configuração de Página

Você pode fornecer um modelo personalizado para a caixa de diálogo Configuração de Página , por exemplo, se quiser incluir controles adicionais exclusivos para seu aplicativo. A função PageSetupDlg usa seu modelo personalizado no lugar do modelo padrão.

Para fornecer um modelo personalizado para a caixa de diálogo Configuração de Página

  1. Crie o modelo personalizado modificando o modelo padrão especificado no arquivo Prnsetup.dlg. Os identificadores de controle usados no modelo de caixa de diálogo configuração de página padrão são definidos no arquivo Dlgs.h.
  2. Use a estrutura PAGESETUPDLG para habilitar o modelo da seguinte maneira:
      • Se o modelo personalizado for um recurso em um aplicativo ou biblioteca de link dinâmico, defina o sinalizador PSD_ENABLEPAGESETUPTEMPLATE no membro Flags . Use os membros hInstance e lpPageSetupTemplateName da estrutura para identificar o módulo e o nome do recurso.

        -Ou-

      • Se o modelo personalizado já estiver na memória, defina o sinalizador PSD_ENABLEPAGESETUPTEMPLATEHANDLE . Use o membro hPageSetupTemplate para identificar o objeto de memória que contém o modelo.

Para filtrar mensagens enviadas para o procedimento da caixa de diálogo, você pode fornecer um procedimento de gancho PageSetupHook . Se você usar um modelo personalizado para definir controles adicionais, deverá fornecer um procedimento de gancho PageSetupHook para processar a entrada para seus controles. Além disso, você pode fornecer um procedimento de gancho PagePaintHook para personalizar o conteúdo da página de exemplo exibida pela caixa de diálogo Configuração de Página . Para obter mais informações sobre o procedimento de gancho PagePaintHook , consulte Personalizando a página de exemplo.

Para habilitar um procedimento de gancho PageSetupHook

  1. Defina o sinalizador PSD_ENABLEPAGESETUPHOOK no membro Flags da estrutura PAGESETUPDLG .
  2. Especifique o endereço do procedimento de gancho no membro lpfnPageSetupHook .

Depois de processar sua mensagem de WM_INITDIALOG , o procedimento da caixa de diálogo envia uma mensagem WM_INITDIALOG para o procedimento de gancho PageSetupHook . O parâmetro lParam dessa mensagem é um ponteiro para a estrutura PAGESETUPDLG usada para inicializar a caixa de diálogo.

Personalizando a página de exemplo

A caixa de diálogo Configuração de Página inclui uma imagem de uma página de exemplo que mostra como as seleções do usuário afetam a aparência da saída impressa. A imagem consiste em um retângulo que representa o tipo de papel ou envelope selecionado, com um retângulo de linha pontilhada representando as margens atuais e caracteres parciais (texto grego) para mostrar a aparência do texto na página impressa.

Ao chamar a função PageSetupDlg , você pode fornecer um procedimento de gancho PagePaintHook para personalizar a aparência da página de exemplo.

Para habilitar um procedimento de gancho PagePaintHook

  1. Defina o sinalizador PSD_ENABLEPAGEPAINTHOOK no membro Flags da estrutura PAGESETUPDLG .
  2. Especifique o endereço do procedimento de gancho no membro lpfnPagePaintHook .

Sempre que a caixa de diálogo está prestes a desenhar o conteúdo da página de exemplo, o procedimento de gancho recebe as seguintes mensagens na ordem em que elas estão listadas.

Mensagem Significado
WM_PSD_PAGESETUPDLG A caixa de diálogo está prestes a desenhar a página de exemplo. O procedimento de gancho pode usar essa mensagem para se preparar para desenhar o conteúdo da página de exemplo.
WM_PSD_FULLPAGERECT A caixa de diálogo está prestes a desenhar a página de exemplo. Esta mensagem especifica o retângulo delimitador da página de exemplo.
WM_PSD_MINMARGINRECT A caixa de diálogo está prestes a desenhar a página de exemplo. Esta mensagem especifica o retângulo de margem.
WM_PSD_MARGINRECT A caixa de diálogo está prestes a desenhar o retângulo de margem.
WM_PSD_GREEKTEXTRECT A caixa de diálogo está prestes a desenhar o texto grego dentro do retângulo de margem.
WM_PSD_ENVSTAMPRECT A caixa de diálogo está prestes a desenhar no retângulo envelope-stamp de uma página de exemplo de envelope. Esta mensagem é enviada somente para envelopes.
WM_PSD_YAFULLPAGERECT A caixa de diálogo está prestes a desenhar a parte do endereço de retorno de uma página de exemplo de envelope. Esta mensagem é enviada para envelopes e outros tamanhos de papel.

 

Se o procedimento de gancho retornar TRUE para qualquer uma das três primeiras mensagens de uma sequência de desenho (WM_PSD_PAGESETUPDLG, WM_PSD_FULLPAGERECT ou WM_PSD_MINMARGINRECT), a caixa de diálogo não enviará mais mensagens e não desenhará na página de exemplo até a próxima vez que o sistema precisar redesenhar a página de exemplo. Se o procedimento de gancho retornar FALSE para todas as três mensagens, a caixa de diálogo enviará as mensagens restantes da sequência de desenho.

Se o procedimento de gancho retornar TRUE para qualquer uma das mensagens restantes em uma sequência de desenho, a caixa de diálogo não desenhará a parte correspondente da página de exemplo. Se o procedimento de gancho retornar FALSE para qualquer uma dessas mensagens, a caixa de diálogo desenhará essa parte da página de exemplo.

Para impedir que a caixa de diálogo desenhe o conteúdo da página de exemplo, você pode definir o sinalizador PSD_DISABLEPAGEPAINTING . Esse sinalizador não afeta o procedimento de gancho PagePaintHook , que ainda recebe todas as mensagens WM_PSD_* e pode desenhar o conteúdo da página de exemplo.