Windows SDK入門淺談 — 寫給初學者

來源:互聯網
上載者:User

Windows SDK入門淺談 — 寫給初學者

 

前言

   如果你是一個編程初學者,如果你剛剛結束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在動態連結程式庫中,這些動態連結程式庫是系統的組成部分因此不用再提供,而輸入庫和標頭檔則必須,這樣才能在你的程式中使用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的基礎資料型別 (Elementary Data Type)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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.