国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

深入GDI(圖形設(shè)備接口)編程

2019-11-18 18:19:32
字體:
供稿:網(wǎng)友
    GDI+是Windows 2000及以后版本的一個子系統(tǒng),同原有的GDI(圖形設(shè)備接口)一樣,主要負(fù)責(zé)對顯示器和打印機進行管理。GDI+為我們提供了在編程時使用的應(yīng)用程序接口API(application PRogramming Interface),通過這些API函數(shù),GDI+讓程序員在設(shè)計程序中不必考慮具體的顯示器或打印機,直接使用由GDI+提供的類的方法便可以調(diào)用顯示器或打印機,真正做到與設(shè)備無關(guān)。

  注:如果使用GDI+圖形系統(tǒng),圖形和藝術(shù)字將具有更平滑的輪廓,以及可調(diào)整的用真實顏色調(diào)和的透明度級別。在調(diào)整圖片大小時,圖片的顯示將會更加清晰。

  功能及特色

  正如其名稱一樣,GDI+是對原有的GDI在功能上的升級,GDI+為我們提供的功能主要有三類:矢量圖形輸出、光柵圖形輸出和文字排版等。

  GDI+與傳統(tǒng)的GDI相比,主要有以下六方面的新特色:漸變畫刷、獨立的路徑對象(Path Objects)、矩陣對象(Matrix Object)、區(qū)域(Scalable Regions)、Alpha Blending和多格式圖片支持。

  設(shè)備環(huán)境和圖形對象

  熟悉GDI編程的朋友對設(shè)備環(huán)境DC(Device Context)應(yīng)該不會陌生。DC的數(shù)據(jù)結(jié)構(gòu)存儲了顯示器(或打印機)的性能、屬性之類的詳細(xì)信息,這些數(shù)據(jù)信息決定程序如何在顯示器上進行輸出。所有的輸出都通過DC來實現(xiàn),如果想在窗口中畫一個矩形,首先得通過GetDC得到DC,然后讓DC去執(zhí)行具體操作。

  使用GDI+后,就不必考慮句柄、設(shè)備環(huán)境等概念了。只要簡單地創(chuàng)建一個圖形對象(Graphics Object),然后直接調(diào)用該對象的方法(Methods)進行繪圖即可。圖形對象是GDI+的核心,它和DC有許多相似的地方,在使用上遵循著相同的使用規(guī)則,但是兩者在本質(zhì)上已經(jīng)有很大的區(qū)別。一個是基于句柄的GDI,一個是基于對象模型的GDI+。

  同DC一樣,圖形對象也是和具體的窗口或是屏幕結(jié)合在一起的。圖形對象中也包括了許多具體屬性,這些具體的屬性值指明了進行繪圖的方法。圖形對象中沒有在DC中所綁定的具體的畫筆、畫刷、路徑等對象。在GDI中繪圖,首先必須為DC中選入一個畫筆對象(在DC中的畫筆只有一支是可以使用的),這支“筆”一直會使用到下次新選定畫筆為止。而在GDI+中,你只需要在圖形對象中調(diào)用畫直線時,將畫筆作為畫直線的一個參數(shù)就可以了,即在GDI+中,可以同時使用多個畫筆進行不同的繪圖操作。

  參數(shù)化的對象

  從OnDrawlineGdiplus()的代碼可以看出,GDI+可以將畫筆作為單獨的對象進行管理。并且對畫刷、路徑、圖片、字體等對象也實現(xiàn)了參數(shù)化。在GDI+的圖形對象中,這些對象被作為參數(shù)來傳遞的。舉例說明,在填充矩形區(qū)域時,使用紅色畫刷,要做的只是建立紅色畫刷,在調(diào)用FillRectangle函數(shù)時,將紅色畫刷作為函數(shù)的參數(shù),這樣就能完成填充過程。

  摒棄當(dāng)前位置的概念

  從上面的示例代碼OnDraLine可以看出,在GDI中畫一條直線首先得將筆的“當(dāng)前位置”移到直線的起點坐標(biāo)上(MoveTo),然后才能進行畫直線的操作。“當(dāng)前位置”這個定義給編程帶來了不少的麻煩。GDI+中解決了這個問題,摒棄了“當(dāng)前位置”這個沒有多大用處的概念。對于畫直線,直接說明起止點的坐標(biāo)就行了。

  注:如果你習(xí)慣了原來的GDI編程,這點應(yīng)該引起你的注意。

  方法的重載

  GDI+的圖形對象中有許多的方法在調(diào)用時可有多種形式,如畫直線的函數(shù)DrawLine就有以下的幾種調(diào)用方法:

  Status DrawLine(IN const Pen* pen, IN REAL x1, IN REAL y1, IN REAL x2, IN REAL y2);

  Status DrawLine(IN const Pen* pen, IN const PointF&& pt1, IN const PointF&& pt2);

  Status DrawLine(IN const Pen* pen, IN INT x1, IN INT y1, IN INT x2, IN INT y2);

  Status DrawLine(IN const Pen* pen, IN const Point&& pt1, IN const Point&& pt2);

  上面的四種調(diào)用方式的目的都一樣,從起點到終點以pen畫筆畫一條直線。

  注:方法的重載為多樣化的編程提供了方便。

  繪圖和填充相互獨立

  在GDI中使用Rectangle繪制矩形時,GDI用當(dāng)前畫筆繪制輪廓、用當(dāng)前的畫刷將矩形內(nèi)部自動填充,畫矩形和填充一步完成。而GDI+則將繪制輪廓填充內(nèi)部相分離,這樣一來,GDI+繪制填充輪廓時就顯得更靈活。

  構(gòu)造區(qū)域

  區(qū)域是窗口內(nèi)的一塊多邊形或橢圓形的區(qū)域。在GDI中,CreateRectRgn、Crea-

  teEllpticRgn、CreateRoundRectRgn、CreatePolygonRgn和CreatePolyPolygonRgn等函數(shù)都是與構(gòu)造各種區(qū)域有關(guān)的,在GDI+中,這一切變得相對簡單。在GDI+中,我們可以將一個矩形對象(Rectangle Object)作為參數(shù)傳遞給區(qū)域類(Region Class)的構(gòu)造函數(shù),這個參數(shù)也可以是圖形路徑對象(GraphicsPath Object)的地址,這樣一來,創(chuàng)建一個區(qū)域較GDI要簡單的多。比如,你想要創(chuàng)造一個橢圓形的區(qū)域,首先建立一個包含橢圓的圖形路徑對象A,通過“Region Region1(&&A)”便可以做出橢圓形的區(qū)域?qū)ο驲egion1。對于復(fù)雜區(qū)域(由各種形狀和路徑合成的區(qū)域),GDI+采用了新的管理方式。區(qū)域類支持區(qū)域、路徑合成、交集運算。

  支持GDI+的SDK

  最新的Platform SDK支持我們直接使用GDI+。Platform為GDI+提供的頭文件及庫文件中,有40個類、50個列舉(Enumerations)及6個結(jié)構(gòu)(Structures)。其中,最關(guān)鍵的是圖形類(Graphics Class),通過該類能夠進行畫直線、曲線、圖片及文字輸出。在這些類中,每個類之間并不是完全獨立的,它們通常互為參數(shù)。開始調(diào)用GDI+函數(shù)之前,使用GdiplusStartup對GDI+進行啟動。函數(shù)調(diào)用完之后,應(yīng)使用GdiplusShutdown函數(shù)進行終止操作。


上一篇:一個簡單的投票機器人

下一篇:自己編寫樹(Tree)的封裝類

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 宁津县| 米泉市| 泽库县| 巴林右旗| 青河县| 安吉县| 土默特左旗| 临海市| 临颍县| 宿迁市| 金川县| 屯昌县| 荥经县| 乌审旗| 天峨县| 长治市| 商丘市| 辽阳市| 平和县| 湖南省| 井冈山市| 息烽县| 长葛市| 麻栗坡县| 绿春县| 历史| 壶关县| 灵璧县| 历史| 江孜县| 万年县| 闻喜县| 涞水县| 东山县| 榕江县| 祁东县| 荆门市| 左贡县| 车致| 泸定县| 师宗县|