在 Windows 圖形程式設計中,坐標系統是繪圖與顯示的基石。理解裝置座標與邏輯座標的差異,以及視口與視窗的映射關係,對於開發高效的繪圖應用至關重要。
裝置座標又稱物理座標,直接對應輸出裝置(如螢幕)上的像素位置。其特徵包括:
螢幕上存在三種固定的物理座標系:
可透過 ClientToScreen 與 ScreenToClient 函數在客戶區域座標與螢幕座標間互轉。
邏輯座標是系統內部記錄用的座標,以邏輯單位表示。在預設映射模式 MM_TEXT 下,其方向、單位與裝置座標相同。關鍵在於邏輯座標支援多種映射模式,可改變座標方向與單位大小。繪圖操作在邏輯座標中進行,顯示則映射到物理座標。
視口以像素(裝置座標)為單位,代表使用者在螢幕上看到的客戶區域範圍。視窗則是應用程式中的座標範圍,對應邏輯座標。Windows 需將視窗座標映射到視口座標。
核心在於設定兩者的原點與範圍:
SetWindowOrg:將裝置座標原點移至邏輯座標 (X,Y)SetViewportOrg:將邏輯座標原點移至裝置座標 (X,Y)SetWindowExt / SetViewportExt:設定邏輯與物理單位的比例關係,正負號控制軸向通常成對呼叫 SetWindowExt 與 SetViewportExt,其比值 cxViewport/cxWindow 決定 X 軸縮放與方向,cyViewport/cyWindow 決定 Y 軸。
SetMapMode 定義 8 種映射模式(如 MM_LOMETRIC、MM_TWIPS、MM_ANISOTROPIC 等),決定邏輯單位大小與軸向。MM_ISOTROPIC 保證 X、Y 比例相等,MM_ANISOTROPIC 允許不同比例。
捲軸讓有限的螢幕視口能檢視無限大的邏輯空間。捲動本質上是移動視口原點,相當於呼叫 SetViewportOrg。捲軸位置本身屬於裝置座標。
CDC 成員函數參數皆為邏輯座標CWnd 成員函數參數皆為裝置座標當水平捲軸右拉 10 單位,邏輯原點 (0,0) 位置不變,實際是視口原點移動,相當於 SetViewportOrg(-10,0)。