【轉】Windows SDK入門淺談

前言程序員

 

   若是你是一個編程初學者,若是你剛剛結束C語言的課程。你可能會有點失望和懷疑:這就是C語言嗎?靠它就能編出軟件?沒法想象Windows桌面上一個普通的窗口是怎樣出如今眼前的。從C語言的上機做業到Windows編程確實有比較大的gap。或許你已經看了programming Windows的前三章,可是對於那個hellowin程序甚爲迷惘。但願hfire的這篇文章能幫你填補這個gap,並提供一些學習的經驗。爲何是淺談,由於hfire知道的也不夠深,確定會有錯誤,請批評指正。編程

 

程序與運行時環境及操做系統windows

 

  當你用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在動態連接庫中,這些動態連接庫是系統的組成部分所以不用再提供,而輸入庫和頭文件則必須,這樣才能在你的程序中使用API函數)。早期SDK是一個單獨發放的包,如今在Visual C++和其餘一些開發環境中已經包含了它。若是你已經安裝了VC++那麼就能夠開始編寫Windows程序了。隨着Windows系統的發展,SDK的內容愈來愈多,咱們只要抓住最基本的方面。至於其餘專門的主題,就根據本身的興趣和技術方向進一步學習了。開發工具

 

不用被第一個Windows程序嚇住網站

 

  若是你已經開始,你的教材應該是那本經典的programming windows (petzold)或者是一本類似的書。但不管哪本書,一開始你都會面對一個基本的Windows SDK程序,這個程序有幾十行。儘管也不算長,但比C版的hello world長多了。更糟的是,裏面充斥着奇怪的變量類型和常量定義,不過先不用被它嚇住,讓咱們看看這裏面有些什麼。首先會有一個#include <windows.h> ,嗯,沒什麼奇怪的,這和#inclde <stdio.h>沒什麼兩樣。而後是一個函數聲明:LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 有點困惑了,一會兒就出來了好幾個「生詞」,並且函數名前面有兩個修飾符也是之前沒有遇到的。好在咱們還能夠辨認出這是一個函數聲明。再往下看是WinMain函數,又是一堆生詞,我猜測你可能已經開始鬱悶了。想一遍看懂這個程序確實困難,因此看不懂也不要緊。看不下去了能夠看看書上的講解。這篇文章並非要完整分析這個程序的,hfire不可能有petzold講的好。在這裏hfire幫你分析一下一些陌生的東西。操作系統

  首先說Windows的數據類型。儘管這些數據類型看上去很陌生,其實它們是由C的基本數據類型define的。好比UINT就是unsinged int,PSTR就是pointer to string 的意思,猜猜就知道是char * 。Windows還有不少系統定義的結構體,好比WNDCLASS,MSG等,這些東西見的多了就天然明白了。Windows還有一個重要的概念,句柄。經過句柄就能夠操做Windows對象。HWND,HINSTANCE,HDC等都是句柄。

  再說說Windows程序的結構。通常有一個WinMain函數做爲程序的入口點,在WinMain裏面定義窗口類,進行消息循環。消息循環就是那個普通的while循環,在其中接收消息、分發消息。而後是窗口函數WndProc,名字能夠本身定。在其中用一個大的switch結構檢索消息,在每一個case下面寫處理消息的代碼。最簡單的Windows SDK程序只要寫這兩個函數就夠了。等你的程序寫長了,就要把特定的消息處理代碼寫成函數,以便在處理消息時調用,甚至你可使用C++來寫程序。等你熟悉這種結構之後,就能夠任意發揮了。

  其餘的不想說太多,學SDK很重要的是不要指望在開始時把每行代碼都搞清楚。

 

學習的方法

 

  固然是多寫程序了。最好每一個主題都寫一個。從一開始的窗口,文本顯示到圖形顯示、控件、對話框,多寫就能領會Windows編程的內涵。當第一部分學的差很少了,能夠寫一個綜合點的程序。最後你會發現你能夠寫很長的程序了,1000多行也不算長,但對於當時學C時是不可思議的。還有重要的是多上一些專門的網站,好比VC知識庫(www.vckbase.com)和VC之路(有一本很好的教程,不過如今網站的東西都沒了,正在恢復),另外www.csdn.net也是一個不錯的地方。

 

幾種Windows編程方法的辨析及其它

 

  不少初學者每每會將Windows編程和VC++混爲一談。打開VC++的新建項目,能夠看到VC++支持不少種工程。包括命令行的,MFC的,還有就是Win32 Application,即SDK程序。使用VC++未必是編寫SDK程序,編寫SDK程序也未必要用VC++。 編寫Windows程序的方法也不止SDK一種,還包括使用類庫如MFC,OWL,使用快速開發工具如VB,Delphi。這些方法各有各的用處。使用SDK無疑是最麻煩的了,咱們學習SDK也並不是是爲了用它來編軟件,雖然它能夠,主要是爲了對Windows編程有比較清晰的認識,這樣你使用MFC時就能夠作到「胸中自有溝壑」。

 

the end

相關文章
相關標籤/搜索