度量單位
坐標系還需要 指定度量單位,度量單位可以采用厘米,英寸。對於圖形用戶界面軟件很多時候采用像素單 位。
厘米,英寸等是抽象的度量單位,圖形采用這種抽象單位度量則是絕對准確的。 而像素度量單位是和圖形硬件相關的,一般情況下,顯示器像素長度是96個像素一英寸,而 打印機則是幾百個甚至上千個像素一英寸。因此相同的圖形,若采用像素大小,則在顯示器 中顯示和實際打印的大小相差是很大的。在這種情況下應當采用抽象的厘米和英寸等度量單 位,這樣才能做到所見即所得。
在.Net中已經考慮到了這種情況,枚舉類型 System.Drawing.GraphicsUnit 就列出了一些標准的坐標度量單位。
坐標轉換- Matrix(黑客帝國?)
坐標系還可以轉換,轉換類型主要有平移,旋轉和縮放。平移 是指坐標原點(XY值都為0的點)上下左右移動,而坐標度量單位等屬性不改變;旋轉是指坐 標系整體的以原點為中心,順時針旋轉一定的角度;而縮放則是將X軸或Y軸方向進行縮小或 放大,X方向和Y方向的縮放可以是獨立的。
大家都知道電影《黑客帝國》,這個電影 的英文名為Matrix,.NET框架也提供了一個Matrix,它就是坐標轉換對象,使用方便。它內 部是一個3X3的矩陣,坐標系的平移旋轉和縮放是通過一種矩陣運算來實現的。使用坐標轉換 對象,.Net程序可以很方便的實現某些特效,比如文本的垂直顯示,文本的拉伸或壓縮顯示 等等。
圖形界面基本元素
我們進行的大部分圖形開發是操作矢量圖形的。在 平面幾何中,矢量圖形是有點線面組成的。因此一個個點,線或面就是矢量圖形的基本元素 。實際圖形開發中,主要的圖形界面基本元素有文本,直線段,矩形,橢圓(包括正圓), 橢圓弧(包括圓弧),還有一些其他曲線。基本的繪圖操作有繪制線條和填充區域。使用上 述方法就能繪制出絕大多數的圖形。
在Windows圖形用戶界面中,使用最多的圖形基 本元素是文本和矩形。各種窗體,控間,其輪廓都是矩形。文本可以是單行,多行,可分為 左對齊,居中對齊和右對齊等等。繪制文本和矩形是最簡單最基本的圖形操作。
用戶 界面事件
大部分的圖形化用戶界面需要響應用戶界面事件來實現互動式用戶體驗,用 戶界面事件主要包括窗體重繪事件,鼠標鍵盤事件,定時器事件,OLE拖拽事件等等,其中最 重要的就是窗體重繪事件和鼠標鍵盤事件了。
Windows底層使用Windows消息的方式向 應用程序通知各種事件,而.Net框架封裝了這些消息處理,並提供了一些可擴展的編程接口 來方便進行事件響應編程。比如我們可以掛上控件的MouseDown事件,也可以重寫控件的 OnMouseDown方法來處理鼠標按鍵按下事件。
窗體重繪事件
用戶界面事件中必 須處理的事件是窗體重繪事件。Windows是多任務操作系統,它允許顯示器上同時顯示多個窗 體,於是窗體之間不可避免的發生覆蓋。一個窗體的部分或全部可能被覆蓋和重新顯示。當 控件由被遮蓋到顯示時,應用軟件需要重新繪制控件的用戶界面。
如圖所示,窗體2 覆蓋了窗體1,此時我的控件有一部分被覆蓋了,當用戶設置了窗體1靠前顯示時,我的控件 原先被窗體2覆蓋的部分給顯示出來了,此時形成了一個剪切矩形,程序需要重新繪制我的控 件的用戶界面,很顯然,程序只需要繪制剪切矩形所包括的部分,其他的部分就不需要顯示 ,這樣我們就能使用這個剪切矩形來優化我們的程序,減少圖形繪制工作量。
我的控 件不需要判斷什麼時候由於窗體重新顯示時要重新繪制用戶界面,Windows操作系統會判斷這 種情況,然後通過消息通知我的控件要重新繪制用戶界面,而且在通知的時候就告訴了剪切 矩形的位置和大小。
在..NET平台 上,.Net框架已經封裝了底層的消息處理,並提供了Paint事件或OnPaint方法的編程接口。 我們需要掛靠控件的Paint事件,或者重寫OnPaint方法來重新繪制用戶界面。在這個事件中 系統提供兩個參數,一個是圖形繪制對象Graphics,另外一個是名為ClipRectangle的剪切矩 形對象,也就是要重新繪制區域的邊框。ClipRectangle是優化圖形繪制操作的基礎。