這裡記敘了在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); //獲得視窗的矩形大小
記錄點滴1
2012年2月20日 大學二年級第四學期始 每週一記錄 第一周 2月20日 2月26日 重要人物 巫大爺 基本時間 除了吃喝拉撒睡的其餘時間 主要地點 教學樓 宿舍 飯堂 操場 事件大概 電子工藝實習 在宿舍看 職來職往 求職節目 看 程式設計師羊皮卷 繼續學習 c primer 第4版 及時去飯堂...
記錄點滴6
2012年4月1日星期日愚人節 第 6周 2012年3月26日 4月1日 第6篇周記 寫這篇周記的開始那幾分鐘,我頓了頓,心想自己自己寫這篇記錄合不合適,自己有點不想寫的感覺。為什麼呢,感覺自己被生活愚弄了一番,今天是愚人節,真夠愚人的,很多人還沒上完課就逃了,迫不及待的想回家,而我保持淡定,過幾天...
記錄點滴13
記錄點滴 13 2012年5 月27日星期日 大學二年級下學年第 14周結束 第 14周,又一周結束了,我再次提醒自己,最近過得不慍不火的,想學習的時候就學一下,想玩的時候就玩一下,想睡覺的時候就睡一下,每天還是堅持去上我怎麼感興趣的課程,越到後面課程慢慢上了,可以自己支配的時間多了,之前有課的時候...