概述
繪圖操作只能在客戶區中進行。除客戶區以外的部分都叫非客戶區
例如,有的印表機設備水平和垂直解析度不同,其像素實際上是長方形。程式編寫畫一個圓,若不經任何
坐標轉換,在印表機上輸出的就是個橢圓。下面程式示範了如何將視窗邏輯坐標的x,y向象素寬度均映射為
輸出設備中的 1/64 英寸。
代碼
[code]
[/code]
代碼解釋
1.視窗是基於邏輯坐標的.
2.視口是基於設備坐標.
3.設備坐標是以像素為單位的,邏輯坐標是以.cm,m,mm,.....
4.系統最後一定要把邏輯坐標變為設備坐標.
5.設備坐標有3種:
a.GetDC() 客戶區坐標.
b.GetWindowDC().視窗坐標.
c.GetDC(NULL),or CreateDC() .螢幕坐標.
問題
問題如下:
{
...
(6):pDC->
SetWindowOrg(-(cRect.Width()/2),-(cRect.Height()/2));
(7):pDC->TextOut(-850,1400,"abc");
...
}
我想問一下:上面每一步執行完後,視窗和視口的原點、範圍分別是多少?螢幕解析度是(800,600)。謝謝!
---------------------------------------------------------------
問題解釋
第二句:設定與
設備上下文關聯的視窗的X和Y坐標的範圍。其中4000和3000是邏輯坐標。此時視窗大小為(4000,3000),視口大小未知。
第三句:得到客戶區尺寸。此尺寸就是當前視口尺寸。如果(800,600),在最大化時此尺寸為(800,600).
第四句:設定視口的範圍,第二個參數為負數,表示視口坐標往下移了
cRect高度的一半。
第六句:設定設備上下文視窗的起始坐標。
最後一句:在第六句的基礎上,在邏輯坐標位置輸出文本abc. 記住兩個原則:
1.總是由視窗原點映射為視口原點。即無論你視窗的原點和視口的原點怎么變,視窗的原點總是映射到視口的原點。(記住:映射方向是視窗到視口,而不是視口向視窗映射)
2.不管利用函式(如:SetViewportOrgExt和
SetWindowOrgEx)對視窗和視口的原點做怎么改變,設備點(0,0)始終是客戶區的左上角。