Estrutura DEVMODEW (wingdi.h)

A estrutura DEVMODEW é usada para especificar características de dispositivos de exibição e impressão no conjunto de caracteres Unicode (largo).

Sintaxe

typedef struct _devicemodeW {
  WCHAR dmDeviceName[CCHDEVICENAME];
  WORD  dmSpecVersion;
  WORD  dmDriverVersion;
  WORD  dmSize;
  WORD  dmDriverExtra;
  DWORD dmFields;
  union {
    struct {
      short dmOrientation;
      short dmPaperSize;
      short dmPaperLength;
      short dmPaperWidth;
      short dmScale;
      short dmCopies;
      short dmDefaultSource;
      short dmPrintQuality;
    } DUMMYSTRUCTNAME;
    POINTL dmPosition;
    struct {
      POINTL dmPosition;
      DWORD  dmDisplayOrientation;
      DWORD  dmDisplayFixedOutput;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME;
  short dmColor;
  short dmDuplex;
  short dmYResolution;
  short dmTTOption;
  short dmCollate;
  WCHAR dmFormName[CCHFORMNAME];
  WORD  dmLogPixels;
  DWORD dmBitsPerPel;
  DWORD dmPelsWidth;
  DWORD dmPelsHeight;
  union {
    DWORD dmDisplayFlags;
    DWORD dmNup;
  } DUMMYUNIONNAME2;
  DWORD dmDisplayFrequency;
  DWORD dmICMMethod;
  DWORD dmICMIntent;
  DWORD dmMediaType;
  DWORD dmDitherType;
  DWORD dmReserved1;
  DWORD dmReserved2;
  DWORD dmPanningWidth;
  DWORD dmPanningHeight;
} DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;

Membros

dmDeviceName[CCHDEVICENAME]

Para uma exibição, especifica o nome da DLL do driver de exibição; por exemplo, "perm3dd" para o driver de exibição 3Dlabs Permedia3.

Para uma impressora, especifica o "nome amigável"; por exemplo, "PCL/HP LaserJet" no caso de PCL/HP LaserJet. Se o nome for maior que os caracteres CCHDEVICENAME de comprimento, o spooler o truncará para caber na matriz.

dmSpecVersion

Especifica o número de versão dessa estrutura DEVMODEW. O número de versão atual é identificado pela constante DM_SPECVERSION em wingdi.h.

dmDriverVersion

Para uma impressora, especifica o número de versão do driver da impressora atribuído pelo desenvolvedor do driver de impressora.

Os drivers de exibição podem definir esse membro como DM_SPECVERSION.

dmSize

Especifica o tamanho em bytes da estrutura DEVMODEW pública, não incluindo membros privados especificados pelo driver identificados pelo membro dmDriverExtra .

dmDriverExtra

Especifica o número de bytes de dados de driver privados que seguem os membros da estrutura pública. Se um driver de dispositivo não fornecer membros DEVMODEW privados, esse membro deverá ser definido como zero.

dmFields

Especifica sinalizadores de bits que identificam quais dos membros DEVMODEW a seguir estão em uso. Por exemplo, o sinalizador DM_ORIENTATION é definido quando o membro dmOrientation contém dados válidos. Os sinalizadores de DM_XXX são definidos em wingdi.h.

DUMMYUNIONNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmOrientation

Para impressoras, especifica a orientação do papel. Esse membro pode ser DMORIENT_PORTRAIT ou DMORIENT_LANDSCAPE.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperSize

Para impressoras, especifica o tamanho do papel a ser impresso. Esse membro deverá ser zero se o comprimento e a largura do papel forem especificados pelos membros dmPaperLength e dmPaperWidth . Caso contrário, o membro dmPaperSize deve ser uma das constantes prefixadas DMPAPER definidas em wingdi.h.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperLength

Para impressoras, especifica o comprimento do papel, em unidades de 1/10 de milímetro. Esse valor substitui o comprimento do papel especificado pelo membro dmPaperSize e é usado se o papel for de um tamanho personalizado ou se o dispositivo for uma impressora de matriz de pontos, que pode imprimir uma página de comprimento arbitrário.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperWidth

Para impressoras, especifica a largura do papel, em unidades de 1/10 de milímetro. Esse valor substitui a largura do papel especificado pelo membro dmPaperSize . Esse membro deverá ser usado se dmPaperLength for usado.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmScale

Para impressoras, especifica o percentual pelo qual a imagem deve ser dimensionada para impressão. O tamanho da página da imagem é dimensionado para a página física por um fator de dmScale/100. Por exemplo, uma imagem de 17 polegadas por 22 polegadas com um valor de escala de 100 requer papel de 17x22 polegadas, enquanto a mesma imagem com um valor de escala de 50 deve ser impressa como de tamanho médio e caber em papel do tamanho de letra.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmCopies

Para impressoras, especifica o número de cópias a serem impressas, se o dispositivo der suporte a várias cópias.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmDefaultSource

Para impressoras, especifica o compartimento de entrada padrão da impressora. Essa deve ser uma das constantes prefixadas DMBIN definidas em wingdi.h. Se a constante especificada for DMBIN_FORMSOURCE, o compartimento de entrada deverá ser selecionado automaticamente.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPrintQuality

Para impressoras, especifica a resolução da impressora. Os seguintes valores constantes negativos são definidos em wingdi.h:

DMRES_HIGH
DMRES_MEDIUM
DMRES_LOW
DMRES_DRAFT

Se um valor positivo for especificado, ele representará o número de pontos por polegada (DPI) para a resolução x e a resolução y será especificada por dmYResolution.

Esse membro não é usado para exibições.

DUMMYUNIONNAME.dmPosition

DUMMYUNIONNAME.DUMMYSTRUCTNAME2

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmPosition

Para exibições, especifica uma estrutura POINTL que contém as coordenadas x e y do canto superior esquerdo da exibição, em coordenadas da área de trabalho. Esse membro é usado para determinar a posição relativa dos monitores em um ambiente de vários monitores.

Este membro não é usado para impressoras.

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayOrientation

Esse membro é definido apenas para Windows XP e posterior.

Para exibições, especifica a orientação na qual as imagens devem ser apresentadas. Quando o bit DM_DISPLAYORIENTATION não estiver definido no membro dmFields , esse membro deverá ser definido como zero. Quando o bit DM_DISPLAYORIENTATION é definido no membro dmFields , esse membro deve ser definido como um dos seguintes valores:

Valor Significado
DMDO_DEFAULT A orientação do dispositivo de exibição do modo atual é a orientação natural do dispositivo e deve ser usada como padrão.
DMDO_90 A orientação do dispositivo de exibição é de 90 graus (medido no sentido horário) do DMDO_DEFAULT.
DMDO_180 A orientação do dispositivo de exibição é de 180 graus (medido no sentido horário) do DMDO_DEFAULT.
DMDO_270 A orientação do dispositivo de exibição é de 270 graus (medido no sentido horário) do DMDO_DEFAULT.
 

Este membro não é usado para impressoras.

Para obter mais informações, consulte Retornando modos de exibição: DrvGetModes.

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayFixedOutput

Esse membro é definido apenas para Windows XP e posterior.

Para exibições de resolução fixa, especifica como o dispositivo pode apresentar um modo de resolução inferior em uma tela de resolução mais alta. Por exemplo, se a resolução de um dispositivo de vídeo for fixada em 1024 X 768 e seu modo for definido como 640 x 480, o dispositivo poderá exibir uma imagem de 640 X 480 dentro do espaço de tela 1024 X 768 ou esticar a imagem 640 X 480 para preencher o espaço maior na tela.

Quando o bit DM_DISPLAYFIXEDOUTPUT não estiver definido no membro dmFields , esse membro deverá ser definido como zero. Quando o bit DM_DISPLAYFIXEDOUTPUT é definido no membro dmFields , esse membro deve ser definido como um dos seguintes valores:

Valor Significado
DMDFO_CENTER O dispositivo de exibição apresenta uma imagem de modo de resolução inferior centralizando-a no espaço de tela maior.
DMDFO_STRETCH O dispositivo de exibição apresenta uma imagem de modo de resolução inferior alongando-a para preencher o espaço de tela maior.
 

Este membro não é usado para impressoras.

Para obter mais informações, consulte Retornando modos de exibição: DrvGetModes.

dmColor

Para impressoras, especifica se uma impressora colorida deve imprimir cor ou monocromática. Esse membro pode ser um dos DMCOLOR_COLOR ou DMCOLOR_MONOCHROME.

Esse membro não é usado para exibições.

dmDuplex

Para impressoras, especifica a impressão duplex (de dois lados) para impressoras compatíveis com duplex. Esse membro pode ser um dos seguintes valores:

DMDUP_HORIZONTAL

Imprima de dois lados usando a associação de borda curta.

DMDUP_SIMPLEX

Imprimir de lado único.

DMDUP_VERTICAL

Imprima de dois lados, usando a associação de borda longa.

Esse membro não é usado para exibições.

dmYResolution

Para impressoras, especifica a resolução y da impressora, em DPI. Se esse membro for usado, o membro dmPrintQuality especificará a resolução x .

Esse membro não é usado para exibições.

dmTTOption

Para impressoras, especifica como as fontes TrueType devem ser impressas. Esse membro deve ser uma das constantes prefixadas DMTT definidas em wingdi.h.

Esse membro não é usado para exibições.

dmCollate

Para impressoras, especifica se várias cópias devem ser agrupadas. Esse membro pode ser um dos seguintes valores:

DMCOLLATE_TRUE

Agrupar ao imprimir várias cópias.

DMCOLLATE_FALSE

Não agrupar ao imprimir várias cópias.

Esse membro não é usado para exibições.

dmFormName[CCHFORMNAME]

Para impressoras, especifica o nome do formulário a ser usado; como "Carta" ou "Legal". Esse deve ser um nome que pode ser obtido chamando a função Win32 EnumForms .

Esse membro não é usado para exibições.

dmLogPixels

Para exibições, especifica o número de pixels lógicos por polegada de um dispositivo de exibição e deve ser igual ao membro ulLogPixels da estrutura GDIINFO .

Este membro não é usado para impressoras.

dmBitsPerPel

Para exibições, especifica a resolução de cores, em bits por pixel, de um dispositivo de exibição.

Este membro não é usado para impressoras.

dmPelsWidth

Para exibições, especifica a largura, em pixels, da superfície do dispositivo visível.

Este membro não é usado para impressoras.

dmPelsHeight

Para exibições, especifica a altura, em pixels, da superfície visível do dispositivo.

Este membro não é usado para impressoras.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.dmDisplayFlags

Especifica o modo de exibição do dispositivo. Esse membro pode ser uma combinação dos valores a seguir.

Valor Significado
DM_GRAYSCALE Especifica que a exibição é um dispositivo nãocolor. Se esse sinalizador não estiver definido, a cor será assumida. Esse sinalizador não é mais válido.
DM_INTERLACED Especifica que o modo de exibição está entrelaçado. Se o sinalizador não estiver definido, não entrelaçado será assumido.

Os drivers de exibição usam esse membro; por exemplo, na função ChangeDisplaySettings . Os drivers de impressora não usam esse membro.

DUMMYUNIONNAME2.dmNup

Para impressoras, especifica se o sistema de impressão manipula a impressão "N-up" (reproduzindo várias páginas lógicas EMF em uma única página física). O valor desse membro pode ser um dos seguintes:

Valor Significado
DMNUP_SYSTEM O sistema de impressão manipula a impressão "N-up".
DMNUP_ONEUP O sistema de impressão não manipula a impressão "N-up". Um aplicativo pode definir dmNup como DMNUP_ONEUP se pretende realizar impressão "N-up" por conta própria.
 

Esse membro não é usado para exibições.

dmDisplayFrequency

Para exibições, especifica a frequência, em hertz, de um dispositivo de exibição no modo atual.

Este membro não é usado para impressoras.

dmICMMethod

Especifica uma das constantes prefixadas DMICMMETHOD definidas em wingdi.h.

dmICMIntent

Especifica uma das constantes prefixadas DMICM definidas em wingdi.h.

dmMediaType

Especifica uma das constantes prefixadas DMMEDIA definidas em wingdi.h.

dmDitherType

Especifica uma das constantes prefixadas DMDITHER definidas em wingdi.h.

dmReserved1

É reservado para uso do sistema e deve ser ignorado pelo driver.

dmReserved2

É reservado para uso do sistema e deve ser ignorado pelo driver.

dmPanningWidth

É reservado para uso do sistema e deve ser ignorado pelo driver.

dmPanningHeight

É reservado para uso do sistema e deve ser ignorado pelo driver.

Comentários

A estrutura DEVMODEW é a versão Unicode da estrutura DEVMODE (descrita na documentação do SDK do Microsoft Windows). Embora os aplicativos possam usar a versão ANSI ou Unicode da estrutura, os drivers são necessários para usar a versão Unicode.

Para drivers de impressora, a estrutura DEVMODEW é usada para especificar as características da impressora exigidas por um documento de impressão. Ele também é usado para especificar as características padrão de uma impressora.

Imediatamente após os membros definidos de uma estrutura DEVMODEW (geralmente chamados de membros públicos), pode haver um conjunto de membros definidos pelo driver (geralmente chamados de membros DEVMODEW privados). O driver fornece o tamanho, em bytes, dessa área privada em dmDriverExtra. Os membros privados definidos pelo driver são para uso exclusivo pelo driver. O endereço inicial dos membros privados pode ser referenciado usando o membro dmSize da seguinte maneira:

PVOID pvDriverData = (PVOID) (((BYTE *) pdm) + (pdm->dmSize));

Um driver pode contar com o spooler para passar um buffer DEVMODEW que não seja menor que (dmSize + dmDriverExtra) bytes. Como resultado, o driver pode ler com segurança esse número de bytes a partir do início do buffer sem causar uma violação de acesso e sem a necessidade de investigar a memória.

Antes de reproduzir o EMF, a GDI chama o spooler para validar o conteúdo da parte pública do buffer DEVMODEW. Se o buffer DEVMODEW não passar nos testes de validação executados no spooler, a GDI não passará o buffer para o driver da impressora.

Aviso O Windows confirma apenas que a parte pública de DEVMODEW é válida. No entanto, os dados corrompidos na parte privada da estrutura podem fazer com que o código do driver falhe no aplicativo ou no processo do spooler. Consequentemente, antes de cada uso de dados DEVMODEW, o driver deve verificar se a parte privada de DEVMODEW está bem formada.
 
No Windows 2000, um novo membro do sindicato foi adicionado à estrutura DEVMODEW. Esse membro da união contém um membro existente da estrutura DEVMODEW, dmDisplayFlags, juntamente com um novo membro, dmNup. Esse membro é descrito na seção Membros anterior.

No Windows XP, um novo membro do struct foi adicionado. Esse membro de struct contém um membro existente da estrutura DEVMODEW, dmPosition, juntamente com dois novos membros, dmDisplayOrientation e dmDisplayFixedOutput. Esses membros são descritos na seção Membros anterior.

Além disso, para o Windows XP, vários membros da estrutura DEVMODEW foram movidos para locais diferentes nessa estrutura. Os membros dmScale, dmCopies, dmDefaultSource e dmPrintQuality foram acrescentados ao membro do struct que contém os membros dmOrientation, dmPaperSize, dmPaperLength e dmPaperWidth .

Observação

O cabeçalho wingdi.h define DEVMODE como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

Requisito Valor
Cabeçalho wingdi.h (inclua Wingdi.h)

Confira também

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes