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