1. 程式人生 > >如何學習Windows程式設計

如何學習Windows程式設計

有很多初入門的小朋友跟我說,他們想學“底層”的技術,因為覺得技術含量高,所以想學Windows C++開發,看著呼叫一個個的引數超級多,呼叫起來超級麻煩的Windows API,覺著很酷。於是我念頭一轉,就有了這篇文章,根據我多年來做Windows 客戶端的經驗,跟大家談談Windows C++,該從哪一方面入手,這不會是一個有技術深度的文章,只是偶爾會涉及到一些術語以及一些入門書籍而已,對於Windows開發的老鳥們來說,只當是看著好玩了。

首先來談談最初的Windows開發。

如果開啟《Windows程式設計》這本書,關於Windows開發的來龍去脈就一目瞭然了。但是要注意,《Windows程式設計》是一本純講述Windows API的書,確切的說,這本書主要講的是關於Windows 使用者態的API,也就是User32.dll GDI32.dll這兩個庫檔案中的函式,大部分的內容都是關於Windows最基本的視窗元素的操控方面的API,比如建立視窗,繪製視窗,關閉視窗,訊息迴圈等等。這本書不需要你有C++方面的知識,理論上說只要你有C語言的基礎就可以看懂,但是如果你連C語言的基礎也沒有,看這本書可能會發生一些困難,如果你學過其它一門非面向物件的語言,這本書實際上也能夠勉強看懂。我在大學的時候就看了這本書,但是直到現在也沒有看完,書中的某些知識,實際上在Windows開發中已經很少用到了,我個人認為是沒有必要把這本書從頭到位看一遍的,在看了前面幾章以後,我就蠢蠢欲動,寫了一些簡單的程式,迅速鞏固了關於這些API呼叫的記憶,為今後進化到Windows C++階段打下了一個良好的基礎。所以,寫程式是很重要的,這個階段,我建議大家寫一些簡單的程式,比如打字測速程式,自己建立一個訊息迴圈,建立一個視窗,建立一個游標,用GDI函式輸出圖形及文字,這樣下來,基本的Windows程式設計概念就有了,不過注意寫的時候不要大段的Copy書上的程式碼,全部自己寫,否則無助於理解各個API的含義,這個程式,因為是自己寫的第一個Windows程式,所以時間限定在一個月到一個半月之內比較合適。度過這個階段以後,Windows程式設計的基本概念就應該在你腦海中形成了。

下面進入第二個階段,也就是C++風格的Windows開發,也就是職場上需求量很大的Windows C++程式設計師乾的事。

這時候你需要了解一下這個老掉牙的叫做MFC的東西,MFC是啥呢,其實是一個很原始的,用程式碼來拼搭介面的C++庫,當然,因為是C++庫,所以你必須具備了一定的C++知識。不過別因為原始就小巧了它,MFC比傳統的Windows SDK開發方式還是要前進了一大步的,因為不管怎麼說,它總算沾了面向物件的一點邊,有那麼一點點面向物件的意思了,比如一個視窗,會被封裝成CWnd類,裡面有建立視窗的成員函式,視窗繪製的函式也被封裝了進去,CWnd又會有其它的視窗派生類,比如CView啊CFrameWnd以及各類視窗控制元件。學了MFC,你就基本上對Windows C++開發入門了,換而言之,如果你學的還算過關的話,應該能在市場上淘到一份關於Windows C++開發的工作了。其實現在很多公司還在使用MFC這個老黃牛,雖然MFC跟現在流行的介面庫的易用程度比實在是差的太遠,但是MFC的介面效率高,細節操控豐富這仍然是不爭的事實。

在這個階段上,你可以做一些簡單的稍微上得了檯面的程式了,比如開發一個基於IE核心的瀏覽器,之所以我讓你開發這個程式,是因為開發IE相關的程式能學到很多跟COM有關的知識,COM也同樣是Windows客戶端開發人員的必備技能,它的生命力跟MFC一樣的頑強,甚至有過之而無不及。

這個階段上,如果你對MFC足夠熟悉了,還可以接觸一下WTL這個輕量級的模板介面庫,其實如果有了MFC的基礎,WTL的學習過程是很愉快的,很多MFC中的概念,比如訊息對映,在WTL中都有對應的東西,WTL更小巧,封裝的更高階(模板庫嘛),但是微軟官方不支援,所以不像MFC在MSDN上有專門的文件。最重要的是,WTL和ATL可以結合的非常好,這樣就使得在WTL上呼叫ATL寫的COM元件或是在ATL寫的COM元件中呼叫WTL的視窗變的簡單輕鬆,所以,以我現在的脾氣,是更加推薦大家使用WTL而非MFC的,但是毫無疑問的,WTL的學習成本更高,所以仁者見仁智者見智啦。

接下來就該學習COM了,學習COM嘛,幾本關於COM的基礎理論書籍還是要看的,比如《COM技術內幕》這個本書我比較推薦,比較淺顯,適合COM的初學者,另外潘愛民的《COM原理與應用》我也看過,馬馬虎虎也還算過得去吧,雖然感覺還是前面那本更好一點。至於那本神乎其神的《COM本質論》,我覺得不看也罷,那本書初看的時候沒看幾頁就走神,實在是晦澀,素我直言,《COM本質論》這本書,如果你沒有好的C++基礎還是別看了,純粹給自己添堵。

等到有了COM的基礎概念了,就可以看看《深入解析ATL》,ATL就是用來寫COM的,雖然它也封裝了一些視窗,控制元件,不過這本書稍微寫的深了一點,大段的程式碼剖析,初學者看起來還是有難度的,我當初很多地方都是強迫自己看完的,看完了後,收穫還是不小的。

在你有了一定的Windows程式開發經驗之後,可以看《Windows核心程式設計》,這本書講的都是關於Windows核心方面的東西,比如程序啦,核心物件啦,執行緒啦,DLL啦,SEH啦,總之我的看法,這本書與《Windows程式設計》遙相呼應,彌補了前者的不足,大篇幅的講述了Kernel32.dll裡面的函式,這本書很多內容我都通讀了好幾遍,某個國內排名前三的網際網路公司面試,面試官的很多問題都是這本書裡的東西,所以強烈建議大家把這本書好好學習一下。

總結了一下,看書是很重要的,但是不要忘了寫程式碼,我得感覺,看書的時間和寫程式碼的時間在三七開是比較好的,戰爭中學習戰爭,實踐出真知,這才是最重要的。