視口和視窗

2021-06-26 23:40:30 字數 1599 閱讀 4838

對映方式指定了邏輯座標系的邏輯單位和座標軸正方向, 座標原點沒有涉及。而且, 在「自作主張的」兩種對映方式下, 邏輯單位、座標軸正方向和座標原點都有待確定。

「視口」是基於裝置座標的, 通常, 視口與客戶區相同。點( 0,0)是客戶區域的左上角。x 的值向右增加, y 的值向下增加。「視窗」是基於邏輯座標的, 邏輯座標可以是畫素、公釐、英吋等, 我們在gdi 繪圖函式中指定邏輯視窗座標。對映方式實際上是用於定義從「視窗」( 邏輯座標) 到「視口」( 裝置座標) 的對映。在所有的對映方式下,windows 用下面兩個公式將視窗( 邏輯) 座標轉為視口( 裝置) 座標:

(xwindow,ywindow)是待轉換的邏輯點, ( xviewport,yviewport)是轉換後的裝置座標。視口原點(xvieworg,yvieworg)和視窗原點(xwinorg,ywinorg) 預設情況下均為( 0,0) , 可以改變; (xwinext,ywinext)是邏輯座標的視窗範圍; ( xviewext,yviewext) 是裝置座標的視口範圍, 只有在mm_isotropic 和mm_anisotropic 對映方式下範圍可以改變。

視窗原點和視口原點

windows 提供了函式setviewportorgex 和setwindoworgex,用來改變視口和視窗的原點, 這些函式都具有改變軸的效果, 使(0,0)不再是左上角。

如果將視口原點改變為(xvieworg,yvieworg), 則邏輯點(0.0)就會對映為裝置點(xvieworg- xwinorg,yvieworg- ywinorg)。如果將

視窗原點改變為(xwinorg,ywinorg), 則邏輯點(xwinorg- xvieworg,ywinorg- yvieworg)將會對映為裝置點(0,0)

例如, 假設客戶區為cxclient 個畫素寬和cyclient 個畫素高。在mm_text 對映方式下, 客戶區的邏輯座標系如圖1(1),如果想將邏輯點(0, 0)定義為客戶區中心, **如下:

setviewportorgex (hdc, cxclient / 2, cyclient / 2, null) ;setviewportorgex 的引數總是使用裝置單位。預設的視窗原點(xwinorg,ywinorg)為( 0,0) , 邏輯點(0,0)將對映為裝置點(cxclient/2,cyclient/2), 客戶區的邏輯座標系如圖1(2)。

用下面的setwindoworgex 語句同樣可以獲得如圖1(2)所示的效果:

setwindoworgex (hdc, - cxclient / 2, - cyclient / 2, null) ;

setwindoworgex 的引數總是使用邏輯單位。邏輯點(- cxclient / 2,- cyclient / 2)對映為裝置點(0,0), 相應的邏輯點(0,0)位於裝置點(cxclient/2,cyclient/2)。

QT視口和視窗

視口和視窗實際上是同一區域 視口使用的是物理座標,而視窗使用的是邏輯座標,可以無視widget的放大和縮小 int w width int h height int side qmin w,h 去長和寬的小值 qrect rect w side 2 h side 2 side,side viewpo...

視窗與視口

幾個概念容易亂,先寫下來 一般來說,客戶區左上角的點對應視口原點 0,0 我理解他們為等同關係.裝置區 0,0 點就是視口原點 0,0 點,且不可改變.視窗座標應用中使用邏輯座標,偶理解為視窗原點就是邏輯原點.等同關係.且可以改變.下面可能用上.不要理解為整個視窗的左上角那個點 從理解應用來說,無論...

html響應式設計視口 視窗視口

關於視口 視口在響應式設計中是乙個非常重要的概念,在移動端瀏覽器中存在兩種視口 一是可見視口,即裝置大小 另外一種是視窗視口,即網頁寬度。裝置螢幕是414pxd 寬度,在瀏覽器中,414px的螢幕能夠顯示1200px 的內容。那麼,414px 就是可見視口的寬度,而1200px 就是視窗視口的寬度。...