?? 計算機世界網-使用gdi+編程.htm
字號:
style="BORDER-RIGHT: #000000 1px; BORDER-TOP: #000000 1px; Z-INDEX: 100; LEFT: 60px; VISIBILITY: hidden; BORDER-LEFT: #000000 1px; BORDER-BOTTOM: #000000 1px; POSITION: absolute; TOP: 110px; BACKGROUND-COLOR: #1badd1; layer-background-color: #1BADD1"
onmouseout="hideLayers('Layer4')">
<TABLE cellSpacing=0 cellPadding=0 width=650 border=0>
<TBODY>
<TR>
<TD class=a_2006_315 vAlign=center align=middle bgColor=#ebebeb
colSpan=2><A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/index.shtml"
target=_blank>3.15調查</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_1.html"
target=_blank>筆記本</A> |<A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_2.html"
target=_blank>手機</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_3.html"
target=_blank>數碼相機</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_4.html"
target=_blank>MP3</A>|<A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_5.html"
target=_blank>液晶顯示器</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_6.html"
target=_blank>臺式機</A> |<A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_7.html"
target=_blank>主板</A>|<A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/]item_8.html"
target=_blank>顯卡</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_9.html"
target=_blank>打印機</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_10.html"
target=_blank>服務器</A> </TD></TR>
<TR>
<TD class=a_2006_315 vAlign=center align=middle bgColor=#ebebeb
colSpan=2><A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_11.html"
target=_blank>打印耗材</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_12.html"
target=_blank>拍賣網站</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_17.html"
target=_blank>多功能一體機</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_16.html"
target=_blank>網絡存儲</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_13.html"
target=_blank>DVD刻錄機</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_15.html"
target=_blank>液晶電視</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/item_14.html"
target=_blank>高速硬盤</A> | <A class=a_2006_315
href="http://www.ccw.com.cn/315-2006/comment.shtml"
target=_blank>精彩評論</A> </TD></TR>
<TR>
<TD vAlign=center align=left bgColor=#666666 colSpan=2
height=1></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE>
<TABLE id=Table1 cellSpacing=0 cellPadding=0 width=750 border=0><!-- <tr><td valign=top align=center>
<SCRIPT LANGUAGE="JavaScript1.1" SRC="http://ad.ccw.com.cn/adshow.asp?adID=460&js=1&innerJs=1"></SCRIPT>
</td></tr> --><!-- <tr><td valign=top>
<SCRIPT LANGUAGE="JavaScript1.1" SRC="http://ad.ccw.com.cn/adshow.asp?adID=482&js=1&innerJs=1"></SCRIPT>
</td></tr>
-->
<TBODY></TBODY></TABLE><!--<table height="26" cellspacing="1" cellpadding="0" width="750" bgcolor="#bbbbbb" border="0">
<tr>
<td width="146" align="left" background="http://imgs.ccw.com.cn/200505/20050509/11_menu_back_01.gif" bgcolor="#007ece">
<span class="t14 white">
<strong><a href="/cio" class="whitenoline">CIO俱樂部</a></strong></span></td>
<td width="609" background="http://imgs.ccw.com.cn/200505/20050509/12_menu_back_01.gif" bgcolor="#efefef" align="right">
<a href="/cio/research" class="t12 graynoline" target="_blank">焦點<img src="http://imgs.ccw.com.cn/200505/new.gif" border=0></a> |
<a href="/cio/data" class="t12 graynoline" target="_blank">數據</a> | <a href="/htm/center/smb" class="t12 graynoline" target="_blank">中小企業</a> | <a href="/cio/ciolife" class="t12 graynoline" target="_blank">CIO生活</a>
| <a href="/cio/solution" class="t12 graynoline" target="_blank"> 方案·案例展示中心</a>
| <a href="/cio/gq" class="t12 graynoline" target="_blank">供求與招投標</a> |
<a href="/cio/cioexpert/" class="t12 graynoline"> 專家庫</a>
| <a href="/cio/zc/" class="t12 graynoline">CIO俱樂部章程</a> </td>
</tr>
</table>-->
<TABLE cellSpacing=0 cellPadding=0 width=750 border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle>
<OBJECT
codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0
height=80 width=750 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="http://imgs.ccw.com.cn/200601/060103_haixin_750_90.swf"><PARAM NAME="quality" VALUE="high">
<embed
src="http://imgs.ccw.com.cn/200601/060103_haixin_750_90.swf" quality=high
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash" width="750" height="80"> </embed>
</OBJECT></TD></TR>
<TR>
<TD vAlign=top align=middle>
<OBJECT
codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0
height=80 width=750 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="http://imgs.ccw.com.cn/200603/qushi_060306_CIO_750_80.swf"><PARAM NAME="quality" VALUE="high">
<embed
src="http://imgs.ccw.com.cn/200603/qushi_060306_CIO_750_80.swf"
quality=high
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash" width="750" height="80"> </embed>
</OBJECT></TD></TR><!-- <tr><td valign=top align=center>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="750" height="90">
<param name=movie value="http://imgs.ccw.com.cn/200603/qushi_060306_CIO_750_80.swf">
<param name=quality value=high>
<embed src="http://imgs.ccw.com.cn/200603/qushi_060306_CIO_750_80.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="750" height="90">
</embed>
</object>
</td></tr> --></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=750
background=計算機世界網-使用GDI+編程.files/xxh_r6_c4_r3_c5.jpg border=0>
<TBODY>
<TR vAlign=top align=left>
<TD width=153><A href="http://www.ccw.com.cn/cio/cioclub/"><IMG height=35
src="計算機世界網-使用GDI+編程.files/xxh_r6_c4_r3_c2.jpg" width=153 border=0></A></TD>
<TD class=text_cen14 vAlign=center width=581><A
href="http://www.ccw.com.cn/cio" target=_blank>首頁</A>|<A
href="http://www.ccw.com.cn/cio/research/" target=_blank>文庫</A>|<A
href="http://www.ccw.com.cn/cio/data" target=_blank>數據中心</A>|<A
href="http://www.ccw.com.cn/cio/solution" target=_blank>方案中心<IMG
src="計算機世界網-使用GDI+編程.files/xx.gif" border=0></A>|<A
href="http://www.ccw.com.cn/cio/cioexpert/" target=_blank>專家庫</A>|<A
href="http://www.ccw.com.cn/cio/solution/company.asp"
target=_blank>廠商黃頁</A>|<A href="http://www.ccw.com.cn/cio/gq"
target=_blank>供求招標</A>| <FONT style="FONT-SIZE: 9pt"
color=#000000>責編電話:010-68130909-1053</FONT></TD>
<TD align=right width=16><IMG height=35
src="計算機世界網-使用GDI+編程.files/xxh_r6_c4_r3_c4.jpg"
width=16></TD></TR></TBODY></TABLE>
<TABLE width=728 align=center>
<TBODY>
<TR>
<TD align=middle><BR>
<H2><FONT color=#0f3ccd>使用GDI+編程</FONT></H2><BR><B>北京機械工業學院研00級 冉林倉</B>
</TD></TR>
<TR>
<TD align=right>01-10-26 下午 01:24:02<BR>
<HR width=718 color=#f46240 SIZE=1>
</TD></TR></TBODY></TABLE><BR>
<TABLE width=728 align=center>
<TBODY>
<TR>
<TD vAlign=top width=600>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><FONT size=4>1.引言</FONT></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>GDI+是Windows
XP中的一個子系統,它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。顧名思義,GDI+是以前版本GDI的繼承者,出于兼容性考慮,Windows
XP仍然支持以前版本的GDI,但是在開發新應用程序的時候,開發人員為了滿足圖形輸出需要應該使用GDI+,因為GDI+對以前的Windows版本中GDI進行了優化,并添加了許多新的功能。</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>作為圖形設備接口的GDI+使得應用程序開發人員在輸出屏幕和打印機信息的時候無需考慮具體顯示設備的細節,他們只需調用GDI+庫輸出的類的一些方法即可完成圖形操作,真正的繪圖工作由這些方法交給特定的設備驅動程序來完成,GDI+使得圖形硬件和應用程序相互隔離.從而使開發人員編寫設備無關的應用程序變得非常容易.</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><FONT
size=4><B>2.GDI+新增功能</B></FONT></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(1)漸變的畫刷(Gradient
Brushes)</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>GDI+允許用戶創建一個沿路徑或直線漸變的畫刷,來填充外形(shapes),路徑(paths),區域(regions),漸變畫刷同樣也可以畫直線、曲線、路徑,當你用一個線形畫刷填充一個外形(shapes)時,顏色就能夠沿外形逐漸變化。</TD></TR>
<TR>
<TD class=a14>
<DIV align=center><IMG height=46
src="計算機世界網-使用GDI+編程.files/01_10_26_3a.gif" width=118><IMG height=46
src="計算機世界網-使用GDI+編程.files/01_10_26_3b.gif"
width=45></DIV></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(2)基數樣條函數(Cardinal
Splines)</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>GDI+支持基數樣條函數,而GDI不支持。基數樣條是一組單個曲線按照一定的順序連接而成的一條較大曲線。樣條由一系列點指定,并通過每一個指定的點。由于基數樣條平滑地穿過組中的每一個點(不出現尖角),因而它比用直線連接創建的路徑更精確。下面是分別使用兩種方法創建的圖形,一個使用基數樣條,一個使用直線。</TD></TR>
<TR>
<TD class=a14>
<DIV align=center><IMG height=50
src="計算機世界網-使用GDI+編程.files/01_10_26_3c.gif"
width=91></DIV></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(3)持久路徑對象Persistent Path
Objects</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>在GDI中,路徑屬于設備描述表(DC),畫完后路徑就會被破壞。在GDI+中,繪圖工作由Graphics對象來完成,你可以創建幾個與Graphics分開的路徑對象,繪圖操作時路徑對象不被破環,這樣你就可以多次使用同一個路徑對象畫路徑了。</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(4)變形和矩陣對象Transformations & Matrix
Object</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>GDI+提供了矩陣對象,一個非常強大的工具,使得編寫圖形的旋轉、平移、縮放代碼變得非常容易。一個矩陣對象總是和一個圖形變換對相聯系起來,比方說,路徑對象(PATH)有一個Transform方法,它的一個參數能夠接受矩陣對象的地址,每次路徑繪制時,它能夠根據變換矩陣繪制。下面的圖形是一個圖形變換前后的例子,變換按照先縮放后旋轉完成。</TD></TR>
<TR>
<TD class=a14>
<DIV align=center><IMG height=83
src="計算機世界網-使用GDI+編程.files/01_10_26_3d.gif"
width=89></DIV></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(5)可伸縮區域 Scalable
Regions</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B>GDI+
在區域(regions)方面對GDI進行了改進,在GDI中,Regions存儲在設備坐標中,對Regions
唯一可進行圖形變換的操作就是對區域進行平移。而GDI+用世界坐標存儲區域(Regions),允許對區域進行任何圖形變換(譬如如圖所示的縮放),圖形變換以變換矩陣存儲,下面例子是一個區域變換前后的例子(縮放、旋轉、平移)</B></TD></TR>
<TR>
<TD class=a14>
<DIV align=center><IMG height=74
src="計算機世界網-使用GDI+編程.files/01_10_26_3e.gif"
width=110></DIV></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(6)Alpha
Blending(混合)</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>你可能會注意到上面顯示的圖形,紅色未平移區域與變換后區域有一部分交叉區域,這一部分形成的夢幻效果就是由GDI+支持的Alpha
Blending(混合)實現的,利用alpha融合,你可以指定填充顏色的透明度,透明顏色與背景色相互融合,填充色越透明,背景色顯示越清晰,下圖所示的四個橢圓被填充了同樣的顏色,但由于擁有不同的透明度而呈現不同的顯示效果。</TD></TR>
<TR>
<TD class=a14>
<DIV align=center><IMG height=92
src="計算機世界網-使用GDI+編程.files/01_10_26_3f.gif"
width=122></DIV></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(7)多種圖像格式支持.</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>圖像在圖形界面程序中占有舉足輕重的地位,GDI+除了支持BMP等GDI支持的圖形格式外,還支持JPEG(Joint
Photographic Experts Group)、GIF(Graphics Interchange
Format)、PNG(Exchangeable Image File)、EXIF(Portable Network
Graphics)、TIFF(Tag Image File
Format)等圖像格式,你可以直接在程序中使用這些圖片文件,而無需考慮它們所用壓縮算法。</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><I>(8)其它。</I></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>GDI+還將支持其它技術,譬如重新著色、顏色校正、元數據、圖形容器,也許這些功能我們會在將來的WindowsXP或者Microsoft
VisualStudio。Net中看到. </TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B><FONT size=4>3.編程模式的改變 Device Contexts(設備描述表),
Handles(句柄), 和 Graphics Objects(圖形對象)</FONT></B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>如果你曾經使用過GDI編寫過應用程序,你肯定對設備描述表(DC)的概念非常熟悉,設備描述表是Windows使用的一個數據結構,用于存儲具體設備能力和與如何在設備上重繪一些項目的有關屬性信息。而且視頻設備的設備描述表還與特定的窗口有關。首先你必須獲得一個設備描述表句柄,然后在圖形繪制時,你把這個句柄作為一個參數傳遞給GDI圖形繪制函數。當然你也可以把它傳遞給獲得或設置設備描述表有關屬性的函數。</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>利用GDI+函數,你不必使用句柄或者設備描述表。相反,你可以簡單地創建一個圖形對象(Graphics),然后以你熟悉的面向對象的編程方式調用它的方法即可,譬如myGraphicsObject.DrawLine(parameters)。Graphics對象是GDI+的核心,正如設備描述表是GDI的核心一樣,設備描述表(DC)和圖形對象(Graphics)在不同的環境下扮演著同樣的角色,發揮著類似的作用,但是兩者也存在著這質的不同。前者使用基于句柄的編程方法而后者使用面向對象的編程方法。</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>圖形對象和設備對象一樣,與屏幕的顯示窗口有關,它包含著與項目重繪有關的屬性信息(譬如平滑度),然而圖形對象并沒有像GDI那樣與Pen(畫筆)、Path(路徑)、Image(圖像)、Font(字體)等攪在一起。在GDI中,所有與繪圖有關的繪圖對象必須選入指定設備描述表中(使用SelectObject函數),才能被指定的設備描述表所使用。而在GDI+中,你只需把這些繪圖對象作為一個參數傳遞給圖形對象Graphics方法調用即可,每一個圖形對象所使用的繪圖工具至于它調用方法使用的參數有關,它可以通過參數使用多種Pen和Brush繪圖,而不是與特定的筆和畫刷聯系在一起。</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD
class=a14>下面的代碼分別用兩種方法實現紅線的繪制,其中線寬3,起點(20,10),終點(200,100)</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14><B>GDI</B></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>HDC hdc;</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>PAINTSTRUCT ps;</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>HPEN hPen;</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>…</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>hdc = BeginPaint(hWnd, &ps);
獲得設備句柄,開始繪制</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=a14>hPen = CreatePen(PS_SOLID, 3, RGB(255, 0,
0));創建紅色畫筆,寬3</TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -