繪圖操作只能在客戶區中進行。除客戶區以外的部分都叫非客戶區
在 windows的作圖函式中,涉及邏輯座標到裝置座標的轉換。這裡提到的視窗(window)、視口(viewport)是對應的概念。視口是與裝置相關 的乙個矩形區域,座標單位是與裝置相關的。視窗的座標是邏輯座標,與裝置無關。視窗座標的原點與視口座標的原點始終對應於同一點。,視窗原點是與視口原點相同的,(也就是說,位於螢幕上的同乙個位置),為了體會不視窗座標與視口座標的轉換,先用setwindowtorg(100, -300)將視口移到(100,-300),這相當於把 邏輯點(100,-300)對映到裝置點(0,0) (注意:如果改用setviewportorg移動原點,則其原點的移動尺寸與對映模式無關,其300個長度單位等於9厘公尺)
(注:這個裝置點也是相對於當前的dc而言,如果當前的dc是整個螢幕,那麼裝置點(100,-300)的原點就在螢幕的左上角,如果當前的dc是某個應用程式的客戶區,那麼裝置點(100,-300)的原點就是應用程式的客戶區的左上角,)
現在假設當前dc是某個應用程式的客戶區,對映模式為 mm_lometric
(在這種對映模式下,裝置座標以0.1 公釐為乙個長度單位,y軸的正方向為向上,也就是說,螢幕上的左上角的y座標為0,下面的y座標均小於0),當使用語句:
moveto(100,-600);
lineto(100,-800);//y軸負方向向下,所以用負值
進行畫圖時,它的轉換過程如下:
1)視窗與視口座標轉換,由於視窗座標(100,-300 ),對映為裝置座標(0,0),所 以
視窗(100,-600)對映為視口(0,-300)
視窗(100,-800)視對映為視口(0,-500)
2)邏輯與裝置座標轉換
由於是 mm_lometric 對映模式,裝置座標的單位長度為 0.1mm,而在輸出時用的是視口座標,所以視口座標(100,-600)輸出到螢幕上時,該點的位置
距客戶區左邊 0 厘公尺,距客戶區上邊 3厘公尺。這就是直線的起點;
再把直線終點的視口座標(100,-800)輸出到距客戶區左邊0厘公尺,距客戶區上邊 5厘公尺處。對於同乙個圖形,用視窗 座標系統表達的該區域的長和寬與視口的座標系統表達的長和寬是不同的。二者就定義了這兩個座標系統的比例關係。程式作圖時,使用的座標總是是視窗座標。而 實際的顯示或輸出裝置卻各有自己的座標。
視窗與視口
幾個概念容易亂,先寫下來 一般來說,客戶區左上角的點對應視口原點 0,0 我理解他們為等同關係.裝置區 0,0 點就是視口原點 0,0 點,且不可改變.視窗座標應用中使用邏輯座標,偶理解為視窗原點就是邏輯原點.等同關係.且可以改變.下面可能用上.不要理解為整個視窗的左上角那個點 從理解應用來說,無論...
視口和視窗
對映方式指定了邏輯座標系的邏輯單位和座標軸正方向,座標原點沒有涉及。而且,在 自作主張的 兩種對映方式下,邏輯單位 座標軸正方向和座標原點都有待確定。視口 是基於裝置座標的,通常,視口與客戶區相同。點 0,0 是客戶區域的左上角。x 的值向右增加,y 的值向下增加。視窗 是基於邏輯座標的,邏輯座標可...
OpenGL中的視窗與視口
目標 測試opengl視窗視口座標 結果 glutinitwindowsize 640,480 指定的是windows概念中視窗 看得見,可移動,最大化,最小化等操作 大小,以畫素為單位 opengl中的視窗和視口是邏輯上的概念,其中視窗範圍是畫圖時指定頂點座標使用的座標,而視口範圍是將window...