邏輯座標(視窗) 裝置座標(視口)

2021-06-28 07:58:03 字數 1575 閱讀 9971

"視窗"依賴於邏輯座標,可以是畫素點、公釐或程式設計師想要的其他尺度。

"視口"依賴於裝置座標(畫素點)

1. windows都用下面兩個公式將視窗座標轉換成視口座標:

xviewport=(xwindow-xwinorg)*(xviewext/xwinext)+xvieworg

yviewport=(ywindow-ywinorg)*(yviewext/ywinext)+yvieworg

2. windows還能將視口(裝置)座標轉換為視窗(邏輯)座標:

xwindow=(xviewport-xvieworg)*(xwinext/xviewext)+xwinorg

ywindow=(yviewport-yvieworg)*(ywinext/yviewext)+ywinorg

可以使用windows提供的兩個函式dptolp和lptodp在裝置座標及邏輯座標之間互相轉換。

3. setmapmode

windows定義了表1所列出的8種對映方式。

上述對映模式中又可分成以下3類:

映 射 方 式

邏 輯 單 位

x 軸 增 加

y 軸 增 加

毫 公尺mm_text

像 素 點右下

與 設 備 有 關

mm_lometric

0. 1mm右上

0.1mm_himetric

0. 01mm右上

0.01

mm_loenglish

0. 254mm右上

0.254

mm_hienglish

0. 0254mm右上

0.0254

mm_twips

0.0176mm右上

0.0176

mm_isotropic

任 意(x=y)

可 選可 選

可 設mm_anisotropic

任 意(x!=y)

可 選可 選

可 設總結:

作圖時在邏輯座標上作圖,然後對映到視窗座標(視口)

常用函式:setmapmode();設定對映模式 setwindowext()設定邏輯座標範圍 setviewportext();設定裝置座標範圍 setviewportorg()設定裝置座標(視口)原點

舉例:

crect rc;

getclientrect(rc);

int cx = rc.width();

int cy = rc.height();

pdc->setmapmode(mm_isotropic);

pdc->setwindowext(1000, 1000);

pdc->setviewportext(cx, -cy);

pdc->setviewportorg(cx/2, cy/2);

pdc->ellipse(-500, 500, 500, -500);

pdc->moveto(-500, 0);

pdc->lineto(500, 0);

pdc->moveto(0, 500);

pdc->lineto(0, -500);

簡單談視口座標和視窗座標?

視口和視窗座標在gdi中是有這個概念的,正常情況下,這兩個座標一致,即它們的原點和寬高都是相同的,但是我們可以修改這兩個座標系統來簡單快速實現一些變換操作,如縮放等,首先就必須要理解這兩個座標的概念了,簡答說一句話,即 視口座標 物理座標 的高度寬度是確定顯示區域的,而視窗座標 邏輯座標 是為顯示區...

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

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

邏輯座標和裝置座標的區別

在 windows 中,文件座標系稱作邏輯座標系,檢視座標系稱為裝置座標系。它們之間的關係如下圖所示 圖7 11 文件座標和檢視座標 在檢視滾動後,如果使用者在檢視中單擊滑鼠,那麼會得到滑鼠位置的裝置 檢視 座標。在使用這個資料處理文件 比如畫點或畫線 時,需要把它轉化為文件座標。這是因為利用 mf...