VC中座標系的建立 邏輯座標,物理座標,裝置座標

2021-06-21 22:22:41 字數 1686 閱讀 5686

建立乙個合適的座標系可以為我們的繪圖帶來很大的方便。下面介紹一下如何在vc中建立我們想要的座標系。

一 裝置座標和邏輯座標

裝置座標(device coordinate)又稱為物理座標(physical coordinate),是指輸出裝置上的座標。通常將螢幕上的裝置座標稱為螢幕座標。裝置座標用物件距離視窗左上角的水平距離和垂直距離來指定物件的位置,是以畫素為單位來表示的,裝置座標的x軸向右為正,y軸向下為正,座標原點位於視窗的左上角。

邏輯座標(logical coordinate)是系統用作記錄的座標。在預設的模式(mm_text)下,邏輯座標的方向和單位與裝置座標的方向和單位相同,也是以畫素為單位來表示的,x軸向右為正,y軸向下為正,座標原點位於視窗的左上角。邏輯座標和裝置座標即使在預設模式下其數值也未必一致,除了在以下兩種情況下:

1. 視窗為非滾動視窗

2. 視窗為滾動視窗,但垂直滾動條位於滾動邊框的最上端,水平滾動條位於最左端,但如果移動了滾動條這兩種座標就不一致了。

在vc中滑鼠座標的座標位置用裝置座標表示,但所有gdi繪圖都用邏

座標表示,所以用滑鼠繪圖時,那麼必須將裝置座標轉換為邏輯座標,可以使用cdc 函式dptolp()將裝置座標轉化為邏輯座標,同樣可以用lptodp()將邏輯座標轉化為裝置座標。

二 座標模式

為了在不同的領域使用邏輯座標,windows提供了以下8種座標模式:

分別為mm_text、mm_hienglish、mm_loenglish、mm_himetric、mm_lometric、mm_twips、mm_anisotropic和mm_isotropic。

三 例項解析

(一) 建立以左上角為原點,x軸和y軸為1000的座標,如下圖

我們可以用以下**:

void cttview::ondraw(cdc* pdc)

**分析:

1. getclientrect(&rect); 取得客戶區矩形區域,將其存放在rect中

2. 用pdc->setmapmode(mm_anisotropic); 設定對映模式

3. 通過pdc->setviewportorg(0,0);設定邏輯座標的原點

4. 通過pdc->setviewportext(rect.right,rect.bottom);和

pdc->setwindowext(1000,1000);來確定邏輯座標下和裝置座標下的尺寸對應關係

5. 在mm_anisotropic模式下,x軸單位和y軸單位可以不相同

6. 座標方向的確定方法是如果邏輯窗範圍和視口範圍符號相同,則邏輯座標的方向和視口的方向相同,即x軸向右為正,y軸向下為正。

7. 如果將顯示模式改為mm_isotropic,那麼x軸單位和y軸單位一定相同,感興趣的讀者可以自己使一下。

(二) 建立以視窗中心為原點的座標,如下圖

用如下**:

void cttview::ondraw(cdc* pdc)

**分析:

1. 用 pdc->setviewportorg(rect.right/2,rect.bottom/2); 設定視口的原點。

2. 用pdc->setviewportext(rect.right,rect.bottom);和pdc->setwindowext(1000,-1000);來確定裝置座標和邏輯座標的單位對應關係。

3. 因為邏輯窗範圍和視口範圍的符號不一致,縱座標取反,所以y軸向上為正

VC中座標系的建立

建立乙個合適的 座標系可以為我們的繪圖帶來很大的方便 下面介紹一下如何在vc中建立我們想要的座標系。一 裝置座標和邏輯座標 裝置座標 device coordinate 又稱為物理座標 physical coordinate 是指輸出裝置上的座標。通常將螢幕上的裝置座標稱為螢幕座標。裝置座標用物件距...

詳析VC中座標系的建立

詳析vc中座標系的建立 建立乙個合適的 座標系可以為我們的繪圖帶來很大的方便 下面介紹一下如何在vc中建立我們想要的座標系。一 裝置座標和邏輯座標 裝置座標 device coordinate 又稱為物理座標 physical coordinate 是指輸出裝置上的座標。通常將螢幕上的裝置座標稱為螢...

MFC 螢幕座標 視窗座標 邏輯座標 物理座標

int nwidth getsystemmetrics sm cxscreen 螢幕寬度 int nheight getsystemmetrics sm cyscreen 螢幕高度 int cx getsystemmetrics sm cxfullscreen int cy getsystemmet...