這裡記敘了在Windows下GDI編程的一些函數,用GDI函數可以有效控制視窗的顯示。尤其涉及到Windows圖形編程,GDI函數將非常有用.
關於種種函數,在《Windows程式設計》書中有詳盡的描述,《Windows圖形編程》更是闡述了更進階的圖形編程方面的函數和使用.
首先要說明的是:GDI的主要目的是支援與裝置無關的圖形.圖形的輸出又可分為兩大類,位元圖裝置和向量圖裝置.
另外,要明白裝置的概念,所謂裝置,打個比方來說,就是畫家作畫的那一套裝置,包括畫板,畫筆,畫夾等.在這裡,我們可以把紙當畫板,可以把桌子當畫板等等.裝置的概念也一樣,可以把視窗當裝置,可以把印表機當裝置,可以把投影儀當作裝置.如果可以的話,硬碟,記憶體當作裝置問題也不大.在Windows中,BRUSH,PEN,FONT就相當於你的畫筆,顏料等.屬於裝置的內容屬性.
現在,我們用GDI來在螢幕上作畫,在作畫之前,我們要獲得應用程式某個視窗的裝置(因為我們的畫是畫在這個視窗內的).
獲得裝置的方法有很多,介紹幾種:
hdc = GetDC (hwnd) ;
其他行程式
ReleaseDC (hwnd, hdc) ;
hdc = GetWindowDC (hwnd) ;
其他行程式
ReleaseDC (hwnd, hdc)
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;
其他行程式
DeleteDC (hdc) ;
hdcMem = CreateCompatibleDC (hdc) ;
其他行程式
DeleteDC (hdcMem) ;
具體的可參考MSDN和WINDOWS程式設計.
裝置的內容是取得了,但是我們的裝置(即畫布)有什麼樣的特徵呢?比如,視窗有多大?有多寬?系統有多少種顏色?這些在作畫時有時需要考慮到.
取得裝置內容的資訊,有一個函數:
iValue = GetDeviceCaps(hdc,iIndex);
查看MSDN可以發現,通過它可以獲得很多的資訊,比如,當前的螢幕像素是多少(HORZRES,VERTRES)?,以毫米為單位長寬是多少(HORZSIZE,VERTSIZE),?等等,具體的參數有MSDN可翻查.
下面介紹的是畫線函數:
LineTo 畫直線。
Polyline和PolylineTo 畫一系列相連的直線。
PolyPolyline 畫多組相連的線。
Arc 畫橢圓線。
PolyBezier和PolyBezierTo 畫貝茲路徑。
ArcTo和AngleArc 畫橢圓線。
PolyDraw 畫一系列相連的線以及貝茲路徑。
畫封閉地區的函數:
Rectangle 畫矩形。
Ellipse 畫橢圓。
RoundRect 畫帶圓角的矩形。
Pie 畫橢圓的一部分,使其看起來像一個扇形。
Chord 畫橢圓的一部分,以呈弓形。
有些函數可以輔助我們以便畫出需要的圖形,比如:
GetCurrentPositionEx(hdc,&pt); //獲得目前位置
GetClientRect(hwnd,&rect); //獲得視窗的矩形大小