Windows窗口映射api

1. SetMapMode

int SetMapMode(

  HDChdc,        // handle to device context

  intfnMapMode   // new mapping mode

);

该函数设置指定DC的映射模式,映射模式是指页空间到设备控件的单位转换以及设备空间的坐标原点。

映射模式

含义

MM_ANISOTROPIC

使用任意轴缩放率的任意单位映射逻辑单位。

使用SetWindowExtEx和SetViewportExtEx指定单位、原点和缩放率

MM_HIENGLISH

每个逻辑单位映射为0.001英寸,X轴向右Y轴向上

MM_HIMETRIC

每个逻辑单位映射为0.01毫米,X轴向右Y轴向上

MM_ISOTROPIC

使用等轴缩放率的任意单位映射逻辑单位;即X轴上的一个单位等于Y轴上的一个单位。

使用SetWindowExtEx和SetViewportExtEx指定单位和坐标原点,GDI根据需要调整使X和Y轴的单位一样。

MM_LOENGLISH

每个逻辑单位映射为0.01英寸,X轴向右Y轴向上

MM_LOMETRIC

每个逻辑单位映射为0.1毫米,X轴向右Y轴向上

MM_TEXT

每个逻辑单位映射为一个设备像素毫米,X轴向右Y轴向下

MM_TWIPS

每个逻辑单位映射为一个打印点的二十分之一(1/1440英寸),X轴向右Y轴向上

 

2. SetWindowOrgEx

BOOL SetWindowOrgEx(

  HDChdc,        // handle to device context

  intX,          // new x-coordinate of windoworigin

  intY,          // new y-coordinate of window origin

 LPPOINT lpPoint // original window origin

);

该函数用于指定哪个窗口坐标(逻辑坐标系)为视口原点(设备坐标系)。默认视口原点为窗口左上角。

该函数与SetViewportOrgEx功能相似,二者不需同时使用。

3. SetViewportOrgEx

BOOL SetViewportOrgEx(

  HDChdc,        // handle to device context

  intX,          // new x-coordinate ofviewport origin

  intY,          // new y-coordinate ofviewport origin

 LPPOINT lpPoint // original viewport origin

);

该函数用于指定哪个设备坐标映射(设备坐标系)为窗口原点(逻辑坐标系)。默认视口原点为窗口左上角。

该函数与SetWindowOrgEx功能相似,二者不需同时使用。

4. SetWindowExtEx

BOOL SetWindowExtEx(

  HDChdc,       // handle to device context

  intnXExtent,  // new horizontal windowextent

  intnYExtent,  // new vertical window extent

 LPSIZE lpSize  // original windowextent

);

该函数用于设置窗口(逻辑坐标系)的水平和垂直最大范围。

5. SetViewportExtEx

BOOL SetViewportExtEx(

  HDChdc,       // handle to device context

  intnXExtent,  // new horizontal viewportextent

  intnYExtent,  // new vertical viewportextent

 LPSIZE lpSize  // originalviewport extent

);

该函数用于设置视口(设备坐标系的)水平和垂直最大范围。

6. SetGraphicsMode

int SetGraphicsMode(

  HDChdc,

  intiMode

);

默认iMode为GM_COMPATIBLE,表示兼容16bit操作系统,此时调用SetWorldTransform和ModifyWorldTransform将失败,如果要使用这两个API,需要设置iMode为GM_ADVANCED。

1)文字输出:在GM_COMPATIBLE模式下,TrueType(矢量字体)文字与光栅字体具有相同的行为。TrueType文字总是从左向右写且右侧为上,只有TrueType的高度会被缩放,唯一的非水平输出文字的方法是为DC设定的逻辑字体设置非零的escapement和orientation字段(文字输出方向);

在GM_ADVANCED模式下,TrueType(矢量字体)输出将完全通过世界-设备坐标系变换矩阵,光栅字体只有非常有限的转换能力(整数倍拉伸)。GDI会尝试为光栅字体产生最佳输出。

2)矩形排除:在默认的GM_COMPATIBLE模式下,在绘制矩形时系统会排除指定矩形的底边和最右边。在GM_ADVANCED模式下,底边和最右边是不会被排除的。

3)弧的绘制:在默认的GM_COMPATIBLE模式下,GDI使用设备空间当前的弧方向绘制弧,根据这一规则,弧不关系逻辑到设备的转换。在GM_ADVANCED模式下,GDI总是使用逻辑空间的逆时针方向绘制弧,也就是说弧控制点和弧自身都与世界-设备坐标转换有关。

7. SetWorldTransform 和 ModifyWorldTransform

BOOL SetWorldTransform(

  HDChdc,

 const XFORM *lpXform

);

BOOL ModifyWorldTransform(

  HDChdc,

 const XFORM *lpXform,

 DWORD iMode

);

SetWorldTransform函数为指定的DC设置世界空间到页面空间的二维线型变换矩阵,该矩阵可用来缩放、旋转、错切、平移输出图形。

矩阵形式:

| eM11 eM12 0 |

| eM21 eM22 0 |

| eDx eDy  1 |

ModifyWorldTransform函数修改指定DC的变换矩阵,iMode指示是重设为单位矩阵(MWT_IDENTITY)、lpXform左乘当前矩阵(MWT_LEFTMULTIPLY)或者右乘当前矩阵(MWT_RIGHTMULTIPLY)。

这两个函数的参数使用的是逻辑单位。

8. DPtoLP 和 LPtoDP

BOOL DPtoLP(

 __in     HDC hdc,

 __inout  LPPOINT lpPoints,

 __in     int nCount

);

BOOL LPtoDP(

 __in     HDC hdc,

 __inout  LPPOINT lpPoints,

 __in     int nCount

);

这两个函数用于设备坐标转换为逻辑坐标(DPtoLP),以及逻辑坐标转换为设备坐标(LPtoDP),这些转换依赖于DC的映射模式、窗口和视口原点和范围以及变换矩阵。

当逻辑坐标操作32位或设备坐标超过27位,该函数将执行失败。

9. ClientToScreen 和 ScreenToClient

ClientToScreen 用于将窗口客户区坐标转换为屏幕坐标系坐标;

ScreenToClient用于将屏幕坐标系坐标转换为指定窗口的客户区坐标。

默认屏幕坐标是指相对于屏幕左上角的坐标,窗口客户区坐标是指相对于窗口客户区左上角的坐标。

10. MapWindowPoints

将一个窗口上的客户区坐标映射到另一个窗口的客户区上。

你可能感兴趣的:(Windows,开发与调式技术)