Compartilhar via


Modos de mapeamento e traduções

Os modos de mapeamento são descritos na tabela a seguir.

Modo de mapeamento Descrição
MM_ANISOTROPIC Cada unidade no espaço de página é mapeada para uma unidade especificada pelo aplicativo no espaço do dispositivo. O eixo pode ou não ser igualmente dimensionado (por exemplo, um círculo desenhado no espaço do mundo pode parecer ser uma elipse quando representado em um determinado dispositivo). A orientação do eixo também é especificada pelo aplicativo.
MM_HIENGLISH Cada unidade no espaço de página é mapeada para 0,001 polegada no espaço do dispositivo. O valor de x aumenta da esquerda para a direita. O valor de y aumenta de baixo para superior.
MM_HIMETRIC Cada unidade no espaço de página é mapeada para 0,01 milímetro no espaço do dispositivo. O valor de x aumenta da esquerda para a direita. O valor de y aumenta de baixo para superior.
MM_ISOTROPIC Cada unidade no espaço de página é mapeada para uma unidade definida pelo aplicativo no espaço do dispositivo. Os eixos são sempre dimensionados igualmente. A orientação dos eixos pode ser especificada pelo aplicativo.
MM_LOENGLISH Cada unidade no espaço de página é mapeada para 0,01 polegada no espaço do dispositivo. O valor de x aumenta da esquerda para a direita. O valor de y aumenta de baixo para superior.
MM_LOMETRIC Cada unidade no espaço de página é mapeada para 0,1 milímetro no espaço do dispositivo. O valor de x aumenta da esquerda para a direita. O valor de y aumenta de baixo para superior.
MM_TEXT Cada unidade no espaço da página é mapeada para um pixel; ou seja, nenhum dimensionamento é executado. Quando nenhuma tradução está em vigor (esse é o padrão), o espaço de página no modo de mapeamento MM_TEXT é equivalente ao espaço físico do dispositivo. O valor de x aumenta da esquerda para a direita. O valor de y aumenta de cima para baixo.
MM_TWIPS Cada unidade no espaço da página é mapeada para um vigésimo ponto de uma impressora (1/1440 polegadas). O valor de x aumenta da esquerda para a direita. O valor de y aumenta de baixo para superior.

 

Para definir um modo de mapeamento, chame a função SetMapMode . Recupere o modo de mapeamento atual para um DC chamando a função GetMapMode .

As transformações de espaço de página em espaço de dispositivo consistem em valores calculados a partir dos pontos fornecidos pela janela e pelo visor. Nesse contexto, a janela refere-se ao sistema de coordenadas lógicas do espaço de página, enquanto o visor se refere ao sistema de coordenadas do dispositivo do espaço do dispositivo. Cada janela e visor consistem em uma origem, uma extensão horizontal ("x") e uma extensão vertical ("y"). Os parâmetros de janela estão em coordenadas lógicas; o visor nas coordenadas do dispositivo (pixels). O sistema combina as origens e extensões da janela e do visor para criar a transformação. Isso significa que a janela e o visor especificam metade dos fatores necessários para definir a transformação usada para mapear pontos no espaço da página para o espaço do dispositivo. Assim, o sistema mapeia a origem da janela para a origem do visor e as extensões da janela para as extensões do visor, conforme mostrado na ilustração a seguir.

ilustração mostrando uma origem de janela no espaço de página e uma origem de ponto de vista no espaço do dispositivo

As extensões de janela e visor estabelecem uma proporção ou fator de dimensionamento usado nas transformações de espaço de página para espaço no dispositivo. Para os seis modos de mapeamento predefinidos (MM_HIENGLISH, MM_LOENGLISH, MM_HIMETRIC, MM_LOMETRIC, MM_TEXT e MM_TWIPS), as extensões são definidas pelo sistema quando SetMapMode é chamado. Eles não podem ser alterados. Os outros dois modos de mapeamento (MM_ISOTROPIC e MM_ANISOTROPIC) exigem que as extensões sejam especificadas. Isso é feito chamando SetMapMode para definir o modo apropriado e, em seguida, chamando as funções SetWindowExtExtEx e SetViewportExtEx para especificar as extensões. No modo de mapeamento de MM_ISOTROPIC, é importante chamar SetWindowExtEx antes de chamar SetViewportExtEx.

As origens da janela e do visor estabelecem a tradução usada nas transformações de espaço de página para o espaço do dispositivo. Defina as origens da janela e do visor usando as funções SetWindowOrgEx e SetViewportOrgEx . As origens são independentes das extensões e um aplicativo pode defini-las independentemente do modo de mapeamento atual. Alterar um modo de mapeamento não afeta as origens definidas no momento (embora possa afetar as extensões). As origens são especificadas em unidades absolutas que o modo de mapeamento atual não afeta. Para alterar as origens, use as funções OffsetWindowOrgEx e OffsetViewportOrgEx .

A fórmula a seguir mostra a matemática envolvida na conversão de um ponto do espaço da página para o espaço do dispositivo.

Dx = ((Lx - WOx) * VEx / WEx) + VOx 

As variáveis a seguir estão envolvidas.

Dx     x value in device units 
Lx     x value in logical units (also known as page space units) 
WOx     window x origin 
VOx     viewport x origin 
WEx     window x-extent 
VEx     viewport x-extent 

A mesma equação com y substituindo x transforma os componentes y de um ponto.

A fórmula primeiro desloca o ponto de sua origem de coordenada. Esse valor, não mais tendencioso pela origem, é então dimensionado para o sistema de coordenadas de destino pela proporção das extensões. Por fim, o valor dimensionado é deslocado pela origem de destino para seu mapeamento final.

As funções LPtoDP e DPtoLP podem ser usadas para converter de pontos lógicos em pontos de dispositivo e de pontos de dispositivo para pontos lógicos, respectivamente.