微軟公司隨Windows操作系統(tǒng)發(fā)布的應(yīng)用程序接口(application programming Interface),即通常所說的API,,是Windows系 統(tǒng)為其下運(yùn)行的各類應(yīng)用程序提供的重要服務(wù)功能微軟的所有Win32平臺都支持統(tǒng)一的API調(diào)用,,包括函數(shù)、結(jié)構(gòu),、消息,、宏 及接口。通過Windows系統(tǒng)提供的API服務(wù)功能,,應(yīng)用程序可以充分挖掘Windows系統(tǒng)的潛力,。 API的核心是一組用C語言編寫的供外部應(yīng)用程序調(diào)用的函數(shù)過程。通過調(diào)用動態(tài)庫文件中的函數(shù),程序員可以在自己開發(fā)的應(yīng) 用中方便地向系統(tǒng)請求或執(zhí)行更低級的設(shè)備訪問,,利用和控制系統(tǒng)資源,,實(shí)現(xiàn)與系統(tǒng)相同或相似的功能。由此可以降低應(yīng)用系 統(tǒng)開發(fā)的復(fù)雜性,,提高開發(fā)效率,,并且無論是應(yīng)用供應(yīng)商還是最終用戶都無需支付額外的費(fèi)用。 當(dāng)Windows操作系統(tǒng)開始占據(jù)主導(dǎo)地位的時候,,開發(fā)Windows平臺下的應(yīng)用程序成為現(xiàn)實(shí)的需要,。而在Windows程序設(shè)計(jì)領(lǐng)域處于 發(fā)展的初期,程序員所能使用的編程工具惟有API函數(shù),,這些函數(shù)是Windows提供給應(yīng)用程序與操作系統(tǒng)的接口,,它們猶如兒童 搭積木一樣,可以構(gòu)建出各種界面豐富,、功能靈活的應(yīng)用程序,。所以可以認(rèn)為它API是構(gòu)筑整個Windows框架的基石,在它的下 面是Windows操作系統(tǒng)的核心,,而在它的上面則是所有華麗的Windows應(yīng)用程序,。 在Visual C++、Visual Basic,、PowerBuilder,、Delphi這些優(yōu)秀可視化編程工具的誕生之前,程序員想開發(fā)Windows下的應(yīng)用就 必須借助API,。由于API固有的復(fù)雜性和程序員缺乏對其深刻的了解,,令許多人在其面前望而卻步。然而隨著軟件技術(shù)的不斷推 陳出新,,在Windows平臺上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,,程序員可以采用“即見即所得”的編程方式來開發(fā)具有精美用戶 界面和功能強(qiáng)大的應(yīng)用程序。 可視化編程工具提供了大量的類庫和各種控件,,它們替代了API的神秘功能,。事實(shí)上這些類庫和控件都是構(gòu)架在Win32 API函數(shù) 基礎(chǔ)之上的,是封裝了的API函數(shù)的集合,。它們把常用的API函數(shù)組合在一起成為一個控件或類庫,,并賦予其方便的使用方法, 極大地加速了Windows應(yīng)用程序開發(fā)的過程,。有了這些控件和類庫,,程序員便可以把主要精力放在企業(yè)業(yè)務(wù)邏輯的實(shí)現(xiàn)和應(yīng)用整 體功能的設(shè)計(jì)上,而不必過于關(guān)注界面設(shè)計(jì),、設(shè)備控制,、系統(tǒng)資源訪問等技術(shù)細(xì)節(jié),。 實(shí)際上,如果要開發(fā)出更靈活,、更實(shí)用,、更具效率的應(yīng)用程序,就必然要涉及到直接使用API函數(shù),。雖然類庫和控件簡化了應(yīng)用 程序的開發(fā),,但它們只提供Windows的一般功能,對于比較復(fù)雜和特殊的功能,,當(dāng)使用類庫和控件難以實(shí)現(xiàn)時,,就需要借助于 API來實(shí)現(xiàn)。操作系統(tǒng)提供的API由函數(shù),、消息,、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型以及語句組成靜態(tài)鏈接與動態(tài)鏈接的區(qū)別: 靜態(tài)庫包含完成一些特定功能的子過程,,在程序開發(fā)中可以通過鏈接將它們包含到應(yīng)用中,,它將成為應(yīng)用不可分割的一部分, 在程序運(yùn)行時,,一次性整體裝入,。 指出被調(diào)用函數(shù)屬于那個動態(tài)鏈接庫。因此,,在應(yīng)用程序可執(zhí)行文件中,存放的不是被調(diào)用函數(shù)的代碼,,而是DLL中該函數(shù)的內(nèi) 存地址,。這樣,當(dāng)多個應(yīng)用程序調(diào)用DLL庫中的同一個函數(shù)時,,不會在內(nèi)存中產(chǎn)生該函數(shù)的多個復(fù)制,,而是只有一份復(fù)制,從而 可以節(jié)省大量的內(nèi)存資源,,提高系統(tǒng)的運(yùn)行效率,。同時,由于應(yīng)用程序與DLL庫文件的相互分離,,當(dāng)DLL庫更新后,,無需修改和 重新發(fā)布原有的應(yīng)用的可執(zhí)行文件。 不同類別的API函數(shù)分別位于Windows系統(tǒng)不同的動態(tài)鏈接庫中, 事實(shí)上,,Windows系統(tǒng)就是構(gòu)建在眾多的DLL庫之上的,。 功能或更正系統(tǒng)的錯誤時,,只要添加新的動態(tài)庫或更新原有的動態(tài)庫文件即可。 Windows動態(tài)庫及支持的API服務(wù) 擇通用對話框,、打印相關(guān)對話框等 表框,、文本框、樹型控件都屬于該控件集 等 源訪問功能 回調(diào)函數(shù) 處理異步事件,。應(yīng)用程序把回調(diào)函數(shù)的地址指針告訴DLL,而DLL在適當(dāng)?shù)臅r候會調(diào)用該函數(shù),?;卣{(diào)函數(shù)必須遵守事先規(guī)定好的 參數(shù)格式和傳遞方式,否則DLL一調(diào)用它就會引起程序或系統(tǒng)的崩潰,。 消息 Windows系統(tǒng)本身而言,卻是以消息處理為其控制機(jī)制,。 句柄
句柄是Windows系統(tǒng)用來標(biāo)識被所有應(yīng)用程序建立或使用的對象的惟一整數(shù)。Windows要使用各種各樣的句柄來標(biāo)識諸如應(yīng)用程 序?qū)嵗?、窗口,、菜單、控件,、分配的?nèi)存空間,、設(shè)備場景、文件及GDI繪圖對象等,。 hBrush表示GDI繪圖對象刷子的句柄,,hDC表示設(shè)備場景的句柄等,。 Windows系統(tǒng)常用的一些對象句柄 字體、圖標(biāo),、光標(biāo)等 應(yīng)的句柄Windows系統(tǒng)常用的一些對象句柄對 象 標(biāo) 識 符 描 述 Bitmap(位圖) hBitmap 標(biāo)識用于存儲位圖信息的內(nèi)存區(qū)域?qū)ο?Brush(刷子) hBrush 標(biāo)識用于填充區(qū)域的刷子對象 Cursor(光標(biāo)) hCursor 標(biāo)識光標(biāo)對象 Device Context(設(shè)備場景) hDC 標(biāo)識設(shè)備場景對象 File(文件) hFile 標(biāo)識磁盤文件對象 Font(字體) hFont 標(biāo)識字體對象 Icon(圖標(biāo)) hIcon 標(biāo)識圖標(biāo)位圖對象 Instance(實(shí)例) hInstance 標(biāo)識Windows應(yīng)用程序?qū)嵗龑ο?Memory(內(nèi)存) hMem 標(biāo)識一個內(nèi)存塊對象 Menu(菜單) hMenu 標(biāo)識窗口菜單欄或彈出式菜單對象 Metafile(圖元文件) hMetafile 標(biāo)識圖元文件對象 Module(模塊) hModulehLibModule 標(biāo)識一個代碼模塊對象,,如DLL或Exe模塊等,常用于訪問一個模塊里的資源,,如 字體,、圖標(biāo)、光標(biāo)等 Object(Kernel)(對象-內(nèi)核) hObject 標(biāo)識Win32定義的一系列同步對象,,如事件,、信號機(jī)、MUTEX等,,每個對象都有相 應(yīng)的句柄 Windows中的句柄有點(diǎn)像通常的C程序設(shè)計(jì)中使用的文件句柄,,其實(shí)就是內(nèi)部表格的索引值。Windows通過句柄到內(nèi)部表格中去存 取相關(guān)信息,,而應(yīng)用程序則總是通過調(diào)用一個 Windows函數(shù)來獲取一個句柄,,其他的Windows函數(shù)可使用這個句柄以引用相應(yīng)的 對象。句柄的實(shí)際值對應(yīng)用程序并不重要,,但向應(yīng)用程序提供句柄的Windows模塊知道如何使用該句柄去引用對象,,這種處理方 式就不會破壞Windows的多任務(wù)環(huán)境。 圖形設(shè)備接口 輸出結(jié)果。使用GDI函數(shù)可以繪制直線,、曲線,、閉合圖形、路徑,、文本以及位圖圖像,。所繪制的圖形的顏色和風(fēng)格依賴于所創(chuàng)建 的繪圖對象,即畫筆,、筆刷和字體,。用戶可以使用畫筆來繪制直線和曲線,使用筆刷來填充閉合圖形的內(nèi)部,,使用字體來書寫 文本,。 的信息,比如它的操作方式及當(dāng)前的選擇,。應(yīng)用程序可使用設(shè)備場景函數(shù)來創(chuàng)建DC,。GDI將返回一個設(shè)備場景句柄,,在隨后的調(diào) 用中,該句柄用于表示該設(shè)備,。例如,,應(yīng)用程序可以使用該句柄來獲取有關(guān)該設(shè)備性能的一些信息,諸如它的類型(顯示器,、 打印機(jī)或其他設(shè)備),,它的顯示界面的尺寸和分辨率等。 文件(meta file),。邏輯設(shè)備向應(yīng)用程序所提供的保存輸出結(jié)果的格式,,可以很容易地將其發(fā)送到物理設(shè)備上。一旦應(yīng)用程序 將輸出結(jié)果記錄到了一個元文件中,,那么該元文件就可以被使用任意多次,,并且該輸出結(jié)果可以被發(fā)送到任意多個物理設(shè)備上 |
|