?? windows sdk入門淺談.txt
字號:
Windows SDK入門淺談 — 寫給初學者2007-07-01 22:17Windows 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的基本數據類型define的。比如UINT就是unsinged int,PSTR就是
pointer to string 的意思,猜猜就知道是char * 。Windows還有很多系統定義
的結構體,比如WNDCLASS,MSG等,這些東西見的多了就自然明白了。Windows
還有一個重要的概念,句柄。通過句柄就可以操作Windows對象。HWND,HINSTANCE,
HDC等都是句柄。
再說說Windows程序的結構。一般有一個WinMain函數作為程序的入口點,
在WinMain里面定義窗口類,進行消息循環。消息循環就是那個普通的while循環,
在其中接收消息、分發消息。然后是窗口函數WndProc,名字可以自己定。在其中
用一個大tch結構檢索消息,在每個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時就可以做到“胸中自有溝壑”。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -