匯東網


GDI 映射模式、映射比例和繪製原點問題

[編輯] [转简体]
|
作者:huidong | 分類:【編程】Win32
[ 26 瀏覽 0 評論 5 贊 3 踩 ]

概要
解釋 SetWindowExtEx、SetViewportExtEx、SetWindowOrgEx、SetViewportOrgEx 一系列函數的用法。

正文

總而言之:

  1. SetWindowExtEx 和 SetWindowOrgEx 的參數都採用邏輯單位,即 GDI 繪圖函數的座標參數所使用的單位。當映射模式設置爲 MM_TEXT 時,邏輯單位就是像素點。

  2. SetViewportExtEx 和 SetViewportOrgEx 的參數都以像素爲單位(設備座標系)。SetViewportOrgEx 只是用於指定在繪製對象上的何處輸出繪製內容。

通過 SetWindowExtEx 和 SetViewportExtEx 兩個函數共同作用來設置邏輯座標系到設備座標系的映射比例關係(只是代表比例關係,不用於限制可繪製區域的範圍大小),例如:

dc.SetWindowExtEx(100, 100);
dc.SetViewportExtEx(640, 480);

即是代表下圖:

如果將某個軸的映射比例設爲負數,則該軸正方向翻轉。

以下兩種寫法效果等同。

dc.SetWindowExtEx(100, -100);   // 負號在此
dc.SetViewportExtEx(640, 480);
dc.SetWindowExtEx(100, 100);
dc.SetViewportExtEx(640, -480);  // 負號在此

對於這兩種寫法,我們可以都把它算作是將邏輯座標系的 y 軸進行了翻轉,而設備座標系永遠不變。

備註:

如果要實現座標軸翻轉,也可以通過設置映射模式實現(SetMapMode)。

列舉一些 SetMapMode 的參數:

  • MM_ANISOTROPIC [ˌænaɪsə'trɒpɪk] 各向異性模式,允許 X 軸和 Y 軸的縮放比例不同。

  • MM_ISOTROPIC 各向同性模式。

  • MM_LOENGLISH 使 y 軸正方向向上,且邏輯單位爲 0.01 英寸

  • MM_HIENGLISH 使 y 軸正方向向上,且邏輯單位爲 0.001 英寸

詳見 MSDN,模式不多,都很好懂。

SetViewportOrgEx 指定視口原點,即在設備座標系下的哪一點開始繪製。

SetWindowOrgEx 指定邏輯座標系下的哪一點映射到視口原點(若邏輯座標系經過翻轉,這裏用的就是翻轉後的邏輯座標系)。

備註:

這裏的 SetWindowOrgEx 和設置繪圖原點並不一樣,如果是設置繪圖原點,則傳入 SetWindowOrgEx 的座標均須乘以 -1。

上述所有函數的調用先後順序對最終結果都沒有影響。

補充:

SelectClipRgn 採用設備座標系。

[ 5] [ 3]


 評論區  0 條評論

+ 添加評論