前言
如果你是一個編程初學者,如果你剛剛結束C語言的課程。你可能會有點失望和懷疑:這就是C語言嗎?靠它就能編出軟件?無法想象Windows桌面上一個普通的窗口是怎樣出現在眼前的。從C語言的上機作業到Windows編程確實有比較大的gap。或許你已經看了programming Windows的前三章,但是對於那個hellowin程序甚為迷惘。希望hfire的這篇文章能幫你填補這個gap,並提供一些學習的經驗。為什麼是淺談,因為hfire知道的也不夠深,肯定會有錯誤,請批評指正。
程序與運行時環境及操作系統
當你用Turbo C編寫了一個C程序,然後編譯連結它,得到了一個可執行文件。在DOS的命令提示符下鍵入這個exe文件的文件名,然後它就執行了。表面看事情就是這些。作為一個應用程序員,我們不用考慮背後的事情,但是有一個簡單的事實我們必須清楚的認識:程序不只是靠自己運行,它需要運行時環境的配合。考慮一下用一個printf函數顯示一個字符串的過程。顯然這個函數不是你自己寫的。或許你聽說過C-Runtime Library,C運行時庫,沒錯,你的程序只有依靠它才能運行。printf的代碼就在C運行時庫中,因此你可以輕松的調用它而不管它是怎麼實現的。但是,C運行時庫也會調用一些別的函數,這些函數是由操作系統提供的,稱為中斷服務程序,而操作系統的中斷服務程序會進一步的調用BiOS中斷服務程序。可以看出,程序的運行是由一層一層的服務支撐起來的。在這裡面,操作系統擔當了非常重要的角色。它提供了程序員可以直接使用的例程,也可以稱為Application Programming Interface (應用程序編程界面,API) 。Dos中一般沒有API的說法,DOS的編程界面是由中斷服務程序充當。在Windows中編程就要常常和API打交道。32位Windows的API有2000多個,一方面它提供了功能強大的編程界面,另一方面它使初學者望而卻步。
Windows操作系統基本常識
Windows是一個單用戶多任務圖形化操作系統。所謂單用戶,指同時只能由一個用戶(一個人)通過Windows系統操作電腦;所謂多任務,指同時可以有多個進程並發執行。既然Windows系統有這些特點,那麼Windows編程就會體現這些特點。為了做到多任務,Windows程序使用消息機制,有我的消息我才干活,沒我的消息就把CPU讓給別人;為了做到圖形化,Windows程序必須顯示窗口並自己繪制客戶區,就連顯示字符串也必須畫到客戶區上。還有一點,Windows廣泛使用動態鏈接。Windows的API就放在動態鏈接庫中,以供程序運行時調用。在Windows 98中有32位的gdi32.dll,user32.dll,kernel32.dll和16位的gdi.exe,user.exe,krnl386.exe,API就存在於這些動態鏈接庫中。
什麼是Windows SDK
SDK即software develope kit(軟件開發工具包),它包含了進行Windows軟件開發的文檔和API函數的輸入庫、頭文件(因為API在動態鏈接庫中,