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

將一個窗口上的客戶區座標映射到另一個窗口的客戶區上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章