簡介我是在1996年秋MicrosoftWindowsCE發(fā)行之前開始了解這個軟件的。作為一個多年的Windows程序員,我被這個操作系統(tǒng)深深地吸引了。這個操作系統(tǒng)將著名的WindowsAPI應用到一個更小、更節(jié)省能源的操作系統(tǒng)上。用于這個小的計算機上的API的精髓部分能使成千上萬的Windows程序員為一個全新的系統(tǒng)類編寫應用程序。然而,也有一些小的差別,使編寫WindowsCE代碼與編寫Windows98或WindowsNT代碼略有不同,我在這本書中要說明的也正是這些不同。WindoWsCE是什么?WindowsCE是最新、最小型,也是爭論最多的一個非常有趣的MicrosoftWindows操作系統(tǒng)。WindowsCE的設計思路是一種小型的、基于ROM的、具有Win32子集API的操作系統(tǒng)。WindowsCE將WindowsAPI擴展到了那些認為Windows98和WindowsNT的體積太大的市場和計算機中。對于需要與DOS、Windows2.x和Windows3.x向后兼容的用戶來說,Windows98是一個偉大的操作系統(tǒng)。盡管它也有缺點,但它在這個困難的任務面前取得了令人驚訝的成功。另一方面,WindowsNT是為企業(yè)編寫的。它為取得高的可靠性和堅固性而犧牲了兼容性和大小。WindowsCE不與MSDOS或Windows向后兼容。它也不是為企業(yè)計算而設計的全能操作系統(tǒng)。相反,WindowsCE是一個輕量級、多線程、帶有可選圖形用戶界面的操作系統(tǒng),它的優(yōu)勢在于小的尺寸、Win32API子集和對多平臺的支持能力?;赪indowsCE的產品第一個為WindowsCE設計的產品是手持的“管理者”類型的設備,這些設備有480×20或640×240屏幕和很好的鍵盤。這些被稱為“手持PC”的設備,首先是在FallComdex96上展示的。在FallComdex97發(fā)布了一種得到大幅度改進的操作系統(tǒng),WindowsCE2.0,它以一種熟悉的方式結合了更新的硬件——這一次,它的屏幕大小改為640×240,并且有了一個較大的鍵盤。在1998年的ConsumerElectronicsShow上,Microsoft宣布了兩種新的平臺:掌上PC和汽車PC。掌上PC針對的是現在被PalmPilot壟斷的使用輸入筆的管理者市場。這種掌上PC的大小有照片那么大,240×320的屏幕并使用筆式輸入方式?,F在市場上已經有了相當數量的掌上P。圖1展示了掌上PC(這里是CasioE-10)和手持PC(這里是CasioA-20)。就在本書要出版時,Microsoft已經提出了手持PC專業(yè)版。這是一種大大增強了的,具有新的應用程序的手持PC,它使用了最新版本的操作系統(tǒng),WindowsCE2.11(1)。這種產品將WindowsCE的壓縮特性帶到了膝上型電腦中。將WindowsCE應用到膝上電腦中的優(yōu)點有很多。首先,HandheldPCPro的電池工作時間至少為10小時,比與PC兼容的膝上型電腦的平均2~3小時要長得多。其次,WindowsCE產品的尺寸和重量對用戶也要友好得多,系統(tǒng)厚度只有1英寸,重量不超過3英磅。即使是尺寸很小,但一個HandheldPCPro仍有一個大的VGA屏幕和一個正常人即可使用的鍵盤。圖2所示的VademClioHandheldPCPro是將WindowsCE應用在新平臺中的一個例子。該系統(tǒng)可以作為一個標準的膝上型電腦或“翻轉”為一個輸入板模式的設備。這個設備就是WindowsCE如何擴展到新的系統(tǒng)類型的范例。我在本書中提到的HandheldPCPro是基于操作系統(tǒng)的WindowsCE2.1版本來說的,因為平臺名稱HandheldPCPro是在設計過程的末期才定下來的。實際上,我知道一種代碼為Jupiter的正在開發(fā)中的HandheldPCPro。然而,在書中不能使用代碼名,因此它的操作系統(tǒng)版本必須滿足要求。其他平臺——汽車PC,WebTV機頂盒和為特殊任務而設計的嵌入式平臺,現在已經有了產品,或者將要在以后的幾個月中出現。WindowsCE讓人吃驚的是它的操作系統(tǒng)的靈活性,這就使它能在各種類型的設計中保留相同的、基本的和著名的Win32API。您為什么要讀這本書?《MicrosoftWindowsCE程序設計》是為任何一個要為WindowsCE設計應用程序的人而編寫的。對那些使用WindowsCE的為特定的應用程序編寫嵌入系統(tǒng)的程序員和對將現有的Windows應用程序進行移植或編寫全新程序的程序員來說,都可以使用本書來使他們的任務變得更加容易。對于嵌入式系統(tǒng)的程序員來說,可能不像Windows程序員那樣熟悉Win32API,他們可以通過閱讀本書的第一部分來熟悉Windows編程。這一部分與CharlesPetzold著《Windows程序設計》(第5版)(北京大學出版社,1999)不同,它不是一個全面的指南,它只為讀者提供了閱讀其他章節(jié)的基本信息。同樣,它可以幫助嵌入式系統(tǒng)程序員開發(fā)復雜程度一般但具備很好的使用性的WindowsCE程序。有經驗的Windows程序員可以用本書學習WindowsCE、WindowsNT和Windows98中所用Win32API的不同之處。熟悉Win32編程的程序員會認識到Windows98API和WindowsNTAPI的細微區(qū)別。WindowsCE和它的兩個兄弟之間的區(qū)別就大多了。Win-dowsCE的小體積就意味著它不支持Win32模塊中重復的API,甚至根本就不支持某些Win32API。另一方面,由于WindowsCE的獨特設置,它將Win32API功能擴展到了在書中包含的一些領域中。本書的編寫方法是通過實例來進行教學。在本書中,我寫了很多WindowsCE示例程序,每個程序的源代碼都打印出來了。程序的源代碼和編譯好的程序(這些程序可以用于WindowsCE支持的多種處理器)包括在與本書配套的光盤中。本書中的所有例子都直接寫為API形式,這就是所謂的“Petzold”編程方法。由于本書的目的是讓讀者學會編寫WindowsCE程序,所以在示例中將避免使用像MFC這樣的類庫,使用這樣的類庫會使編寫WindowsCE程序的獨特本質變得模糊不清。一些人也許會說,WindowsCE中MFC的實用性消除了對WindowsAPI的直接了解。我相信相反的想法是正確的。對WindowsAPI的了解會使對MFC的使用更加有效。同樣,我相信對操作系統(tǒng)的深刻了解也能大幅度簡化應用程序的調試。關于MFC一個簡單的事實是,WindowsCE系統(tǒng)不是最好的用于像MFC那樣的通用目的類庫的平臺。WindowsCE設備的較慢的處理器和小的內存容量會讓使用MFC充滿問題。絕大多數WindowsCE系統(tǒng)在它們的R0M中不包含MFC類庫。這就意味著MFC和MFC所需要的OLE32DLL必須被下載到系統(tǒng)中,掌上PC的第一版甚至不支持MFC。有人說,在WindowsCE中也可以使用MFC。如果您為某個已知的在R0M中應該有MFC和OLE32DLL的系統(tǒng)寫了一個客戶程序,那么,您就可以使用MFC。對于這些特定的應用程序,您也許要使用MFC,但這僅限于您知道目標環(huán)境,并且系統(tǒng)已經為完成工作而配置了適量的內存。WindowsCE開發(fā)工具閱讀本書的讀者應該了解C語言,并且至少要對Microsoft的Windows比較熟悉。所有的代碼都是用Microsoft的VisualC++5.0和WindowsNT4.0下用于WindowsCE的Win-dowsCEVisualC++完成的。要編譯本書中的示例程序,您需要在標準的IBM兼容PC上運行的MicrosoftVisualC++5.0(它是集成開發(fā)環(huán)境(IDE)DevStudio的一部分)。您同樣需要MicrosoftVisualC++forWindowsCE,它不是一個單獨的產品,而是VisualC++5.0的一個附加項,VisualC++5.0編譯器合并了一些組件,用這些組件能生成用于WindowsCE支持的不同CPU的代碼。通過普通零售渠道買不到VisualC++forWindowsCE,但您可以在Microsoft的Web站點上直接獲取訂購信息。最后,您需要一個用于WindowsCE的平臺SDK。這些平臺SDK提供了用于每個WindowsCE平臺的自定義包含文件,這些平臺SDK可以從Microsoft的Web站點免費獲得。為了方便起見,在寫本書的時候,我將這個平臺SDK包含在與本書配套的光盤中。盡管開發(fā)WindowsCE程序不是絕對需要WindowsNT4.0,但我強烈建議用它作為開發(fā)環(huán)境。雖然可以通過Windows98編譯和下載WindowsCE程序,但是集成開發(fā)環(huán)境(IDE)的很多特性,例如,WindowsCE仿真和遠程調試在Windows98中就不支持。除了一些在工具菜單中列出的新工具外,WindowsCE的VisualC++沒有改變VisualC++的外觀,安裝用于WindowsCE的VisualC++也不會妨礙您為其他Windows操作系統(tǒng)編寫程序。在安裝了用于WindowsCE的VisualC++以后,在您創(chuàng)建新Win32程序時,它就會在平臺列表中添加新的WindowsCE目標,例如WCEMIP、WCESH和WCEx86Em。同樣,WindowsCEMFCAppWizard也將被添加到新工程列表中來幫助創(chuàng)建用于WindowsCE的MFC程序。 標系統(tǒng)您不需要用WindowsCE目標設備來體驗本書中的示例程序。對于不同的平臺SDK,這里有一個WindowsCE仿真器,這個仿真器允許您在WindowsNT下進行基本的WindowsCE程序的測試工作。當您想進行最初的調試工作以確保程序能啟動、創(chuàng)建適當的窗口、對菜單選擇進行了反應等時,這個仿真器是非常好用的。然而,這個仿真器也有一些局限性,并且這里沒有進行替換以便讓目標WindowsCE系統(tǒng)來對應用程序進行最終的調試和測試。在決定用什么WindowsCE硬件進行測試時,您應該考慮一些因素。首先要考慮的就是,如果該程序將是一個商業(yè)產品,那么您至少要為每個目標CP購買一個系統(tǒng)。您要對每個目標CPU進行測試,因為盡管源代碼可能相同,但是可執(zhí)行文件在大小上可能會有不同,這樣對每個目標CPU的內存分配情況也會不同。絕大多數程序都是專為手持PC或掌上PC所設計的,而不是同時為它們設計的。雖然手持PC和掌上PC的基本操作系統(tǒng)都是WindowsCE,但其內部的硬件卻差別很大。掌上PC對內存有嚴格的限制,它的屏幕很小,面向的對象不同,沒有鍵盤,而這對于手持PC和HandheldPCPro都是不能接受的。掌上PC的其他一些局限,如不能打印和沒有TrueType字體支持,這也使它的系統(tǒng)環(huán)境與手持PC有所不同。在本書中,我演示的程序能在手持PC、HandheldPCPro或掌上PC上運行。目的是讓這里的課程對于所有平臺都適用。然而,在某些情況下,不同的屏幕尺寸意味著示例 程序會在某個特定的系統(tǒng)下運行得更好。此時我會指出它們的區(qū)別以及它們存在的原因。例如,某些控件可能只存在于某一個平臺上,或者存在于其他平臺上。兩個平臺的外殼——手持PC或掌上PC——也不同,并且需要單獨講述。最后,WindowsCE中的一個小的特性集在小一些的掌上PC平臺上是不支持的。光盤上有什么?配套光盤中包含了本書所有示例的源代碼。我同時也為MicrosoftDevStudio提供了工程文件,這樣您就可以打開預先配置的工程。除非另有說明,示例都與WindowsCE2.0兼容,這樣它們就可以在現有的大多數WindowsCE系統(tǒng)上運行。第十三章“外殼編程——第二部分”包含了為WindowsCE2.01編譯的示例程序,所以它們在現在的手持PC上不能執(zhí)行。還有一些例子,例如,第十二章中的控制臺程序,它們是專為HAndheldPCPro和其他在WindowsCE2.10下運行的設備編寫的。當您為一個特定平臺編譯程序時,要記住這也許與以前的WindowsCE不兼容。例如,Microsoft將WindowsCE2.0的靜態(tài)鏈接庫中的一些C庫支持轉移到了用于WindowsCE2.01的操作系統(tǒng),即掌上PC。這雖然減小了可執(zhí)行程序的大小,但是使得掌上PC編譯的代碼將不能在一個運行WindowsCE2.0的手持PC上運行。然而,您仍可以為運行WindowsCE2.0的手持PC編寫代碼,然后讓它在掌上PC中運行。除了示例程序以外,光盤上還有一些WindowsCE程序員感興趣的文件夾。手持PC和掌上PC的平臺SDK已經包含在這張光盤上了。但遺憾的是,在本書出版時,HandheldPCPro的SDK還沒有完成,像其他SDK平臺一樣,它也可以從Microsoft的Web站點上免費獲得。請仔細閱讀光盤上的Readme文件,了解光盤上還有什么其他最新信息。其他資源盡管我試圖讓本書成為一本能包括WindowsCE編程方方面面的書籍,但是,一本書不可能包含所有的內容。JohnMurray編寫的《InsideWindowsCE》是本書很好的補充,在書中,它介紹了WindowsCE的來歷,了解這些信息對于理解為什么WindowsCE被設計成這樣是很重要的。一旦您了解了為什么,就會很容易地推斷出解決問題的方式和時間。Munay的書很了不起,這不僅因為您可以學到有關WindowsCE的知識,而且因為它是一本寓教于樂的書籍。要了解更多有關Windows編程的信息,在這里我向您推薦一本經典的書籍,CharlesPetzold著《Windows程序設計》(第5版)(北京大學出版社,1999)。這本書是迄今為止學習Windows編程最好的書。CharlesPetzold用大量的示例說明了如何解決那些盡管常見但卻有一定難度的Windows問題。如果要學習更多有關Win32核心API的內容,我向您推薦JeffRichter著《AdvancedWindows》。Jeff在這本書中涵蓋了極其詳細的與過程、線程和內存管理有關的內容。如果要學習更多有關MFC編程的內容,沒有比JeffPros-ise的《ProgrammingWindows95withMFC》更好的書了。這本書是“Petzold”風格的MFC編程方面的書,它是MFC程序員的基礎讀物。信息反饋盡管我盡量使本書中的內容更加準確,但是您還是會發(fā)現一些錯誤。如果您發(fā)現了本書的問題或對本書下一版的改進有很好的建議,請把您的想法發(fā)至CEBook@DelValle.com。我不能保證會答復所有的建議,但是我會閱讀每一條建議。DougBolingTahoe,加利福尼亞1998年8月