首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

深入理解 Windows 坐標系統:裝置座標、邏輯座標與視口映射

     編輯:關於C語言

Windows 坐標系統核心概念

在 Windows 圖形程式設計中,坐標系統是繪圖與顯示的基石。理解裝置座標與邏輯座標的差異,以及視口與視窗的映射關係,對於開發高效的繪圖應用至關重要。

裝置座標與邏輯座標

裝置座標又稱物理座標,直接對應輸出裝置(如螢幕)上的像素位置。其特徵包括:

  • 以像素為單位
  • 原點位於視窗左上角
  • X 軸向右為正,Y 軸向下為正

螢幕上存在三種固定的物理座標系:

  1. 客戶區域座標:應用程式客戶區左上角為 (0,0)
  2. 螢幕座標:整個螢幕左上角為 (0,0)
  3. 全視窗座標:包含標題列、選單、捲軸與視窗框,視窗左上角為 (0,0)

可透過 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。捲軸位置本身屬於裝置座標。

關鍵總結

  1. CDC 成員函數參數皆為邏輯座標
  2. CWnd 成員函數參數皆為裝置座標
  3. 繪圖移動步驟:建立座標模型 → 設定映射模式 → 邏輯座標繪圖 → 設定視口/視窗原點移動圖像

當水平捲軸右拉 10 單位,邏輯原點 (0,0) 位置不變,實際是視口原點移動,相當於 SetViewportOrg(-10,0)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved