C#發(fā)現(xiàn)之旅第四講 Windows圖形開發(fā)入門
袁永福 2008-5-15
系列課程說(shuō)明
為了讓大家更深入的了解和使用C#,我們將開始這一系列的主題為“C#發(fā)現(xiàn)之旅”的技術(shù)講座。考慮到各位大多是進(jìn)行WEB數(shù)據(jù)庫(kù)開發(fā)的,而所謂發(fā)現(xiàn)就是發(fā)現(xiàn)我們所不熟悉的領(lǐng)域,因此本系列講座內(nèi)容將是C#在WEB數(shù)據(jù)庫(kù)開發(fā)以外的應(yīng)用。目前規(guī)劃的主要內(nèi)容是圖形開發(fā)和XML開發(fā),并計(jì)劃編排了多個(gè)課程。在未來(lái)的C#發(fā)現(xiàn)之旅中,我們按照由淺入深,循序漸進(jìn)的步驟,一起探索和發(fā)現(xiàn)C#的其他未知的領(lǐng)域,更深入的理解和掌握使用C#進(jìn)行軟件開發(fā),拓寬我們的視野,增強(qiáng)我們的軟件開發(fā)綜合能力。
本系列課程配套的演示代碼下載地址為 https://files.cnblogs.com/xdesigner/cs_discovery.zip 。
本系列課程已發(fā)布的文章有
C#發(fā)現(xiàn)之旅第一講 C#-XML開發(fā)
C#發(fā)現(xiàn)之旅第二講 C#-XSLT開發(fā)
C#發(fā)現(xiàn)之旅第三講 使用C#開發(fā)基于XSLT的代碼生成器
C#發(fā)現(xiàn)之旅第四講 Windows圖形開發(fā)入門
C#發(fā)現(xiàn)之旅第五講 圖形開發(fā)基礎(chǔ)篇
C#發(fā)現(xiàn)之旅第六講 C#圖形開發(fā)中級(jí)篇
C#發(fā)現(xiàn)之旅第七講 C#圖形開發(fā)高級(jí)篇
C#發(fā)現(xiàn)之旅第八講 ASP.NET圖形開發(fā)帶超鏈接的餅圖
C#發(fā)現(xiàn)之旅第九講 ASP.NET驗(yàn)證碼技術(shù)
C#發(fā)現(xiàn)之旅第十講 文檔對(duì)象模型
本次課程說(shuō)明
本課程是Windows圖形開發(fā)入門,算是圖形開發(fā)知識(shí)掃盲,主要介紹圖形編程的一些基礎(chǔ)理論知識(shí),并無(wú)配套演示源代碼。其中包括
- WEB數(shù)據(jù)庫(kù)開發(fā)和圖形開發(fā)的比較
- Windows圖形子系統(tǒng)基本原理
- 圖形設(shè)備上下文
- 矢量圖形和位圖
- 圖形坐標(biāo)系統(tǒng)
- 圖形界面基本元素
- 用戶界面事件
在此我假設(shè)各位具有一定的計(jì)算機(jī)軟件開發(fā)基礎(chǔ),了解基本的計(jì)算機(jī)軟硬件知識(shí),但對(duì)Windows圖形開發(fā)則理解模糊,不甚了解。因此就介紹一下Windows圖形開發(fā)的基本原理,并不涉及到實(shí)際的開發(fā),未來(lái)的序列培訓(xùn)中將以本次培訓(xùn)為基礎(chǔ),使用C#進(jìn)行實(shí)際的Windows圖形開發(fā)演示。
WEB數(shù)據(jù)庫(kù)開發(fā)和圖形開發(fā)的比較
現(xiàn)來(lái)講講WEB數(shù)據(jù)庫(kù)開發(fā)和圖形開發(fā)的比較。大家大多是搞WEB數(shù)據(jù)庫(kù)開發(fā)的,其用戶界面基本上都是依賴HTML來(lái)進(jìn)行描述,其實(shí)桌面開發(fā)也是大有可為的,而桌面開發(fā)中很重要的一部分就是圖形開發(fā)。圖形開發(fā)和Web開發(fā)相比具有很大的不同,其開發(fā)思想,技術(shù)手段,調(diào)試技巧等有著很大的不同現(xiàn)按以下幾個(gè)方面進(jìn)行簡(jiǎn)單說(shuō)明。
面向的領(lǐng)域Web數(shù)據(jù)庫(kù)編程和圖形開發(fā)存在比較大的區(qū)別,Web數(shù)據(jù)庫(kù)編程大部分是面向工程開發(fā)的,其中充滿了各種業(yè)務(wù)數(shù)據(jù)結(jié)構(gòu),業(yè)務(wù)邏輯處理。而圖形開發(fā)相對(duì)而言技術(shù)因素更多些,面向的領(lǐng)域比較專業(yè)和底層。對(duì)于那些想在純粹的技術(shù)上所有突破的人來(lái)說(shuō),圖形開發(fā)是一種不錯(cuò)的選擇。
難度圖形開發(fā)比較難于學(xué)習(xí)和掌握,因此熟練掌握?qǐng)D形開發(fā)的開發(fā)人員相對(duì)比較少,而且各種軟件技能培訓(xùn)機(jī)構(gòu)都提供對(duì)WEB數(shù)據(jù)庫(kù)開發(fā)的培訓(xùn),而提供圖形開發(fā)培訓(xùn)的則很少。難就人少,人少競(jìng)爭(zhēng)就少,因此圖形軟件開發(fā)能力就成為一種與眾不同的軟件開發(fā)能力。
與數(shù)據(jù)庫(kù)的關(guān)系Web數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)比較依賴關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)是其系統(tǒng)中最重要的部分。而圖形開發(fā)則偏重于用戶界面和圖形文檔輸出,因此對(duì)數(shù)據(jù)庫(kù)的依賴相對(duì)少些,很多圖形軟件的正常運(yùn)行是不需要數(shù)據(jù)庫(kù)的。
軟件設(shè)計(jì)和開發(fā)比較復(fù)雜的圖形開發(fā)需要使用大量的軟件設(shè)計(jì)模式,有時(shí)還需要文檔對(duì)象模型這種比較高級(jí)的軟件設(shè)計(jì)模型,這些復(fù)雜的軟件設(shè)計(jì)模式在常規(guī)的中小型WEB數(shù)據(jù)庫(kù)開發(fā)中使用不多,因此深入學(xué)習(xí)圖形開發(fā)將明顯的增強(qiáng)開發(fā)者的軟件設(shè)計(jì)能力。
相對(duì)于Web數(shù)據(jù)庫(kù)編程,圖形開發(fā)在開發(fā),調(diào)試和優(yōu)化手段上有著很大的不同,在某些情況下,圖形程序的調(diào)試是相當(dāng)困難的,而圖形程序所特有的抗閃爍優(yōu)化過(guò)程是比較艱難的,非常考驗(yàn)開發(fā)者的軟件開發(fā)能力。
應(yīng)用在目前的企業(yè)信息化和電子政務(wù)中,WEB數(shù)據(jù)庫(kù)開發(fā)模式占據(jù)著主流,但圖形開發(fā)仍然具有很廣泛的應(yīng)用,而且很多是比較底層的,基礎(chǔ)性的軟件開發(fā)。比如WEB瀏覽器,VS.NET開發(fā)環(huán)境,甚至Windows操作系統(tǒng)本身都是圖形開發(fā)的產(chǎn)品,WEB軟件中的圖表,曲線圖等HTML難于展現(xiàn)的用戶界面,一般也有賴于圖形編程來(lái)實(shí)現(xiàn)。
展望對(duì)于很多人來(lái)說(shuō),圖形開發(fā)是一個(gè)全新的開發(fā)領(lǐng)域,需要使用新的軟件設(shè)計(jì)理驗(yàn)和開發(fā)模式,但圖形開發(fā)也是一個(gè)豐富多彩的世界,有著非常多的技術(shù)等待大家的探索。圖形開發(fā)雖然比較難,但仍然值得大家學(xué)習(xí)和使用。圖形開發(fā)難度大,技術(shù)含量高,是一種優(yōu)質(zhì)的軟件開發(fā)能力。若大家想探索新的技術(shù)領(lǐng)域,并獲得與眾不同的開發(fā)能力,那就可以從現(xiàn)在開始學(xué)習(xí)Windows圖形開發(fā)。
Windows圖形子系統(tǒng)基本原理Windows操作系統(tǒng)具有最明顯的特點(diǎn)是具有圖形化用戶界面,這種技術(shù)大大改善了用戶體驗(yàn),使得大量的普通使用者能方便的學(xué)習(xí)和使用Windows操作系統(tǒng),這是微軟取得巨大成功的一個(gè)重要因素。
Windows操作系統(tǒng)針對(duì)圖形開發(fā)也提供了強(qiáng)大的編程接口,使得開發(fā)者可以方便的在Windows上面開發(fā)具有專業(yè)效果的圖形化用戶界面軟件。在Windows以前,開發(fā)者要實(shí)現(xiàn)圖形化用戶界面,則需要具備相當(dāng)多的計(jì)算機(jī)硬件知識(shí),計(jì)算機(jī)軟件業(yè)界在圖形化用戶界面方面進(jìn)展緩慢,而Windows則提供了一個(gè)很方便的圖形開發(fā)平臺(tái),使得大量的圖形化用戶界面軟件迅速涌現(xiàn),從而推動(dòng)了計(jì)算機(jī)軟件業(yè)界整體快速發(fā)展。
Windows操作系統(tǒng)中包含了一個(gè)圖形子系統(tǒng),專門用于管理各種圖形輸出設(shè)備,包括顯示器,打印機(jī),繪圖儀等。由于Windows系統(tǒng)啟用保護(hù)模式,應(yīng)用程序沒(méi)有權(quán)限直接訪問(wèn)計(jì)算機(jī)硬件,因此都必須調(diào)用Windows的圖形子系統(tǒng)來(lái)操作圖形設(shè)備。下圖就是Windows環(huán)境下圖形軟件的基本原理。

Windows提供了一個(gè)GDI32.DLL,稍微了解圖形開發(fā)的都知道這個(gè)DLL,它包含了大部分的Windows的圖形子系統(tǒng)的API函數(shù)。各種開發(fā)語(yǔ)言,包括VB,VC,C#,Delphi等等都能調(diào)用這些API函數(shù)來(lái)進(jìn)行圖形開發(fā)。
Windows通過(guò)這些API獲得應(yīng)用系統(tǒng)的圖形操作請(qǐng)求后,內(nèi)部進(jìn)行一番處理,然后根據(jù)目標(biāo)圖形硬件調(diào)用相應(yīng)的設(shè)備驅(qū)動(dòng)程序。
若應(yīng)用系統(tǒng)請(qǐng)求在顯示器上顯示圖形,則Windows會(huì)首先設(shè)置計(jì)算機(jī)顯存,然后忙其他事,而顯卡中有一個(gè)獨(dú)立的處理器能自主訪問(wèn)顯存,根據(jù)其中的數(shù)據(jù)來(lái)設(shè)置顯示器中顯示的內(nèi)容。顯卡是固定每過(guò)一段時(shí)間訪問(wèn)顯存,刷新顯示器,因此它有一個(gè)頻率的參數(shù)。比如它的頻率是50HZ,則它是每20毫秒訪問(wèn)顯存,刷新顯示器。顯卡自己有處理器來(lái)進(jìn)行這樣的操作,這種操作算是硬件操作,其過(guò)程不受操作系統(tǒng)的感知和控制。理解這個(gè)原理,對(duì)理解和消除用戶界面閃爍有著很大的幫助。
若應(yīng)用系統(tǒng)請(qǐng)求進(jìn)行打印輸出,則Windows首先將打印樣式輸出到打印任務(wù)隊(duì)列中,然后調(diào)用打印機(jī)驅(qū)動(dòng)程序進(jìn)行文檔的打印,由于具有打印任務(wù)隊(duì)列,因此多個(gè)軟件可同時(shí)進(jìn)行打印輸出,而不必等待打印機(jī)硬件空閑。在Windows2000或更高版本的Windows操作系統(tǒng)中,有一個(gè)名為”Print Spooler”的服務(wù),該服務(wù)就是用于管理打印任務(wù)隊(duì)列的,若該服務(wù)停止,則系統(tǒng)即使連接了打印機(jī)也不能進(jìn)行打印輸出。
圖形設(shè)備上下文在了解了Windows圖形子系統(tǒng)的基本原理后,我們可以開始了解Windows圖形開發(fā)了,在Windows圖形開發(fā)中有一個(gè)很重要的概念就是-圖形設(shè)備上下文。
句柄對(duì)Windows編程有所了解的應(yīng)該知道,WindowsAPI是一個(gè)個(gè)C語(yǔ)言樣式的函數(shù),應(yīng)用程序訪問(wèn)大部分的操作系統(tǒng)資源是通過(guò)一種叫句柄的整數(shù)類型數(shù)據(jù)。例如程序訪問(wèn)文件,網(wǎng)絡(luò)資源,圖片,創(chuàng)建窗體等等都會(huì)事先調(diào)用API函數(shù)獲得一個(gè)句柄,句柄可以理解成系統(tǒng)資源的唯一編號(hào),應(yīng)用程序應(yīng)當(dāng)好好保存這個(gè)句柄,妥善利用,不用時(shí)一定要使用API函數(shù)釋放掉。
圖形設(shè)備上下文句柄應(yīng)用軟件進(jìn)行圖形操作時(shí)也得使用API函數(shù)申請(qǐng)一個(gè)圖形設(shè)備上下文句柄,以后所有的圖形操作都是針對(duì)這個(gè)句柄來(lái)進(jìn)行的,應(yīng)用軟件完成圖形操作后一定要使用API釋放這個(gè)圖形設(shè)備上下文句柄。
圖形設(shè)備上下文是一種抽象概念,不限制到具體硬件,因此Windows內(nèi)部可以在這個(gè)抽象概念上大做文章,圖形設(shè)備上下文句柄可以指向顯示器,也可以指向打印機(jī)或其他圖形硬件,這個(gè)過(guò)程對(duì)應(yīng)用軟件是透明的,因此應(yīng)用系統(tǒng)在此基礎(chǔ)上能比較容易的實(shí)現(xiàn)所見(jiàn)即所得功能。可以做到一份圖形操作代碼,既可以向計(jì)算機(jī)屏幕輸出圖形,也可以控制打印機(jī)輸出圖形,這方便了圖形開發(fā)。
軟件設(shè)計(jì)模式這種抽象概念應(yīng)用到不同的具體應(yīng)用,是一種軟件設(shè)計(jì)模式。比如在C#中有一個(gè)抽象類 System.IO.Stream , 它表示一個(gè)抽象的流的概念,而.NET框架中在這個(gè)抽象概念的流上面實(shí)現(xiàn)了各種具體的流,比如針對(duì)文件,HTTP資源,內(nèi)存等等。應(yīng)用軟件只要編寫代碼將數(shù)據(jù)保存到抽象的流中,則同一份代碼,可以同時(shí)將數(shù)據(jù)保存到本地文件,HTTP文件,FTP文件或內(nèi)存中。這方便了程序的開發(fā)和擴(kuò)展。
矢量圖形和位圖
概念
圖形開發(fā)中有兩個(gè)重要的概念就是矢量圖形和位圖。
所謂矢量圖形,就是使用平面幾何中的點(diǎn)線面等抽象概念來(lái)描述圖形。而位圖是采用大量的密集像素二維數(shù)組來(lái)描述圖形的。
對(duì)于計(jì)算機(jī)來(lái)說(shuō),矢量圖復(fù)雜,但數(shù)據(jù)量小,可無(wú)級(jí)縮放;而位圖顯示過(guò)程簡(jiǎn)單,但數(shù)據(jù)量大,放大時(shí)顯示效果差。
例子我們的電腦中存在很多矢量圖和位圖的例子。例如Flash是比較典型的矢量圖軟件,它生成的圖形文件.swf文件小,放大時(shí)顯示質(zhì)量有保障;而Windows畫圖板是操作位圖的,生成的圖形文件.bmp文件大,放大時(shí)顯示質(zhì)量差。
還比如Windows字體。Windows字體有位圖字體和TrueType字體,位圖字體是基于位圖概念的,而TrueType字體是基于矢量圖形的。目前大部分字體是TrueType字體,我們可以設(shè)置這種字體的樣式,大小,使用TrueType字體的文本即使顯示得非常大,其文本輪廓線條還是很清晰的。目前少數(shù)字體是位圖字體,最常見(jiàn)的是Windows記事本默認(rèn)使用的Fixedsys字體,這種字體放大顯示時(shí)存在明顯的鋸齒。打印輸出質(zhì)量不高。
圖形坐標(biāo)系統(tǒng)
卡笛爾直角坐標(biāo)
描述和顯示矢量圖形時(shí)需要一個(gè)坐標(biāo)系統(tǒng),目前采用卡笛爾坐標(biāo),也就是具有X-Y軸的直角坐標(biāo)。圖形中每個(gè)圖形元素都由若干個(gè)X-Y坐標(biāo)值和寬度高度值來(lái)確定。比如一個(gè)點(diǎn)用一對(duì)XY值來(lái)確定位置,而一個(gè)線段用兩個(gè)XY值來(lái)定位,而矩形用一個(gè)XY值和寬度高度值來(lái)定位。而圓或橢圓則用一個(gè)外切矩形來(lái)確定。
度量單位坐標(biāo)系還需要指定度量單位,度量單位可以采用厘米,英寸。對(duì)于圖形用戶界面軟件很多時(shí)候采用像素單位。
厘米,英寸等是抽象的度量單位,圖形采用這種抽象單位度量則是絕對(duì)準(zhǔn)確的。而像素度量單位是和圖形硬件相關(guān)的,一般情況下,顯示器像素長(zhǎng)度是96個(gè)像素一英寸,而打印機(jī)則是幾百個(gè)甚至上千個(gè)像素一英寸。因此相同的圖形,若采用像素大小,則在顯示器中顯示和實(shí)際打印的大小相差是很大的。在這種情況下應(yīng)當(dāng)采用抽象的厘米和英寸等度量單位,這樣才能做到所見(jiàn)即所得。
在.NET中已經(jīng)考慮到了這種情況,枚舉類型 System.Drawing.GraphicsUnit 就列出了一些標(biāo)準(zhǔn)的坐標(biāo)度量單位。
坐標(biāo)轉(zhuǎn)換-Matrix(黑客帝國(guó)?)坐標(biāo)系還可以轉(zhuǎn)換,轉(zhuǎn)換類型主要有平移,旋轉(zhuǎn)和縮放。平移是指坐標(biāo)原點(diǎn)(XY值都為0的點(diǎn))上下左右移動(dòng),而坐標(biāo)度量單位等屬性不改變;旋轉(zhuǎn)是指坐標(biāo)系整體的以原點(diǎn)為中心,順時(shí)針旋轉(zhuǎn)一定的角度;而縮放則是將X軸或Y軸方向進(jìn)行縮小或放大,X方向和Y方向的縮放可以是獨(dú)立的。
大家都知道電影《黑客帝國(guó)》,這個(gè)電影的英文名為Matrix,.NET框架也提供了一個(gè)Matrix,它就是坐標(biāo)轉(zhuǎn)換對(duì)象,使用方便。它內(nèi)部是一個(gè)3X3的矩陣,坐標(biāo)系的平移旋轉(zhuǎn)和縮放是通過(guò)一種矩陣運(yùn)算來(lái)實(shí)現(xiàn)的。使用坐標(biāo)轉(zhuǎn)換對(duì)象,.NET程序可以很方便的實(shí)現(xiàn)某些特效,比如文本的垂直顯示,文本的拉伸或壓縮顯示等等。
圖形界面基本元素我們進(jìn)行的大部分圖形開發(fā)是操作矢量圖形的。在平面幾何中,矢量圖形是有點(diǎn)線面組成的。因此一個(gè)個(gè)點(diǎn),線或面就是矢量圖形的基本元素。實(shí)際圖形開發(fā)中,主要的圖形界面基本元素有文本,直線段,矩形,橢圓(包括正圓),橢圓弧(包括圓弧),還有一些其他曲線。基本的繪圖操作有繪制線條和填充區(qū)域。使用上述方法就能繪制出絕大多數(shù)的圖形。
在Windows圖形用戶界面中,使用最多的圖形基本元素是文本和矩形。各種窗體,控間,其輪廓都是矩形。文本可以是單行,多行,可分為左對(duì)齊,居中對(duì)齊和右對(duì)齊等等。繪制文本和矩形是最簡(jiǎn)單最基本的圖形操作。
用戶界面事件大部分的圖形化用戶界面需要響應(yīng)用戶界面事件來(lái)實(shí)現(xiàn)互動(dòng)式用戶體驗(yàn),用戶界面事件主要包括窗體重繪事件,鼠標(biāo)鍵盤事件,定時(shí)器事件,OLE拖拽事件等等,其中最重要的就是窗體重繪事件和鼠標(biāo)鍵盤事件了。
Windows底層使用Windows消息的方式向應(yīng)用程序通知各種事件,而.NET框架封裝了這些消息處理,并提供了一些可擴(kuò)展的編程接口來(lái)方便進(jìn)行事件響應(yīng)編程。比如我們可以掛上控件的MouseDown事件,也可以重寫控件的OnMouseDown方法來(lái)處理鼠標(biāo)按鍵按下事件。
窗體重繪事件用戶界面事件中必須處理的事件是窗體重繪事件。Windows是多任務(wù)操作系統(tǒng),它允許顯示器上同時(shí)顯示多個(gè)窗體,于是窗體之間不可避免的發(fā)生覆蓋。一個(gè)窗體的部分或全部可能被覆蓋和重新顯示。當(dāng)控件由被遮蓋到顯示時(shí),應(yīng)用軟件需要重新繪制控件的用戶界面。
如圖所示,窗體2覆蓋了窗體1,此時(shí)我的控件有一部分被覆蓋了,當(dāng)用戶設(shè)置了窗體1靠前顯示時(shí),我的控件原先被窗體2覆蓋的部分給顯示出來(lái)了,此時(shí)形成了一個(gè)剪切矩形,程序需要重新繪制我的控件的用戶界面,很顯然,程序只需要繪制剪切矩形所包括的部分,其他的部分就不需要顯示,這樣我們就能使用這個(gè)剪切矩形來(lái)優(yōu)化我們的程序,減少圖形繪制工作量。
我的控件不需要判斷什么時(shí)候由于窗體重新顯示時(shí)要重新繪制用戶界面,Windows操作系統(tǒng)會(huì)判斷這種情況,然后通過(guò)消息通知我的控件要重新繪制用戶界面,而且在通知的時(shí)候就告訴了剪切矩形的位置和大小。

在..NET平臺(tái)上,.NET框架已經(jīng)封裝了底層的消息處理,并提供了Paint事件或OnPaint方法的編程接口。我們需要掛靠控件的Paint事件,或者重寫OnPaint方法來(lái)重新繪制用戶界面。在這個(gè)事件中系統(tǒng)提供兩個(gè)參數(shù),一個(gè)是圖形繪制對(duì)象Graphics,另外一個(gè)是名為ClipRectangle的剪切矩形對(duì)象,也就是要重新繪制區(qū)域的邊框。ClipRectangle是優(yōu)化圖形繪制操作的基礎(chǔ)。
鼠標(biāo)事件大部分情況下用戶要求能使用鼠標(biāo)操作來(lái)進(jìn)行處理,此時(shí)圖形軟件必須響應(yīng)用戶的鼠標(biāo)操作來(lái)進(jìn)行某些處理,在C#圖形軟件開發(fā)中,我們需要響應(yīng)控件的鼠標(biāo)事件,我們需要掛靠控件的MouseDown或重寫OnMouseDown方法來(lái)處理鼠標(biāo)按鍵按下事件,使用MouseMove或重寫OnMouseMove方法來(lái)處理鼠標(biāo)移動(dòng)事件,使用MouseUp事件或重寫OnMouseUp方法來(lái)處理鼠標(biāo)按鍵松開事件。
鍵盤事件用戶也經(jīng)常要求能使用鍵盤來(lái)進(jìn)行操作,比如對(duì)于文本編輯器,用戶需要使用鍵盤來(lái)輸入大量的文本字符,移動(dòng)光標(biāo)等等。此時(shí)圖形軟件必須響應(yīng)用戶的鍵盤操作來(lái)進(jìn)行某些處理,在C#圖形軟件開發(fā)中,我們需要響應(yīng)控件的鍵盤事件,我們需要使用KeyDown或重寫OnKeyDown方法來(lái)處理鍵盤按鍵按下事件,使用KeyUp事件或重寫OnKeyUp方法來(lái)處理鍵盤按鍵松開事件,使用KeyPress或OnKeyPress方法來(lái)處理鍵盤字符事件。
其他事件在C#中我們還可以處理其他的事件,比如我們?cè)诖绑w中放置了一個(gè)定時(shí)器控件,則我們可以處理它的定時(shí)器事件來(lái)固定的每隔一段時(shí)間進(jìn)行操作。我們從Windows資源管理器中拖拽一個(gè)文件到我們的程序中,我們可以響應(yīng)控件的OLE拖拽事件來(lái)接受拖拽過(guò)來(lái)的文件的數(shù)據(jù)。
通過(guò)各種各樣的事件,我們就可以實(shí)現(xiàn)圖形用戶界面的各種動(dòng)態(tài)操作特性。這樣就維持了圖形軟件的正常運(yùn)行,并提供了互動(dòng)的用戶體驗(yàn)。
小結(jié)本次課程主要是說(shuō)明了Windows圖形開發(fā)的基本原理,圖形開發(fā)的一些理論知識(shí)。圖形開發(fā)是一個(gè)很大的話題,其理論知識(shí)涉及很廣泛,對(duì)此本次課程無(wú)法一一說(shuō)明,在未來(lái)的培訓(xùn)中,將開始使用C#來(lái)實(shí)踐圖形開發(fā),并在開發(fā)過(guò)程中補(bǔ)充說(shuō)明其中涉及到的各種軟件開發(fā)知識(shí)。
大家若打算認(rèn)真學(xué)習(xí)圖形開發(fā),可以發(fā)揮主觀能動(dòng)性,多多自我學(xué)習(xí)和相互學(xué)習(xí)。大家用慣了ASP.NET,對(duì)圖形編程有些陌生,從下一次課程開始,我們將一起去發(fā)現(xiàn)C#圖形開發(fā)。
posted on 2008-05-23 09:08 袁永福 電子病歷,醫(yī)療信息化 閱讀(10824) 評(píng)論(22) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)