windows映射模式
1.什麼是映射模式: 當Windows應用程序在其客戶區繪製圖形時,必須給出在客戶區的位置,其位置用x和y
定的。
2.windows中為什麼要用到映射模式機製? 映射模式的使用可以實現圖形繪製的設備無關性。比如在默認MM_TEXT模式下,當你的顯示器分辨 率由1024*768調為800*600時你會發現你繪製的一條直線會變短,而當你使用 度量映射方式 MM_LOMETRIC時你會發現不論是在哪種分辨率下,直線的長度都是不會變化的。這裏麵就主要是 依靠映射模進行轉換的。同樣,當你在調用一個畫線的GDI函數LineTo,畫出25.4mm(1英寸) 長的線時,若顯示設備是一個300dpi的激光打印機,Windows將利用設定的映射模式自動將其轉化為 300個像素點。
3.邏輯坐標點到設備坐標點的映射過程: 設備坐標(以客戶區坐標為例)和邏輯坐標可以看成是兩個互相平行的坐標係 原點(0,0)的垂影重合,坐標軸方向相同(單位可不一樣哦,設備坐標的單位為像素,邏輯坐標的單位 為mm,inch,twip等)水平值從左到右增大,垂直值從上到下增大。在默認情況下(MM_TEXT模式) 兩個坐標係下的點式垂直映射的。當使用其他映射方式時,比如在MM_LOMETRIC映射模式下,我們的 調用函數時使用的(x,y)坐標點為邏輯坐標點,通過以下兩個公式可以將邏輯點轉換為設備點 xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg 然後在視口(設備坐標)中輸出就可。 同時為了適應不同映射方式的需要,Windows提供了函數SetViewportOrgEx和SetWindowOrgEx 用來設置設備坐標係和邏輯坐標係的的映射方式,注意這裏不是設置視口和窗口的原點,因為 設備坐標原點和邏輯坐標原點是不會變化的。(可以驗證^_^。。。)
4. 映射模式的種類
這種映射模式被稱為"文本"映射方式,不是因為它對於文本最合適,而是軸的方向與讀文本的方向一 致。Windows提供了函數SetViewportOrg和SetWindowOrg 用來設置視口和窗口的原點。缺省的窗口原 點和視口原點均為(0,0),可以改變;缺省的窗 口範圍和視口範圍均為(1,1),不可改變。 度量映射方式: MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH和MM_TWIPS 將1個邏輯單位映射 為固定的實際單位,其中1twip等於0.0176mm(1/1440英寸)。其他映射模式對應的物理單位參見表1。 設置了映射模式以後,Windows自動設置了窗口及視口的範圍,範圍本身的值並不重要,但範圍比是一 個固定的值,對於MM_LOMETRIC,Windows計算範圍比xViewExt/xWinExt=0.1mm中水平像素的點數。 自定義映射模式: MM_ISOTROPIC和MM_ANISOTROPIC兩種映射模式允許程序員設置自己的窗口和視口範圍。 MM_ISOTROPIC和MM_ANISOTROPIC的區別是所設置的x軸和y軸的的範圍必須相同,而 MM_ANISOTROPIC所設置的x軸和y軸的的範圍可以不同。isotropi的意思是" 在所有方向相同", anisotropic的意思正相反。自定義映射模式中窗口和視口的原點和範圍都可以改變, 程序員可以設置自己需要的映射模式。 |
最後更新:2017-04-02 06:51:27