說到Windows CE不由得就想到微軟推出的WIN系列PC操作系統(tǒng),Windows的出現(xiàn)在很大程度上改變了程序員的編程習慣,把程序員從冗長的代碼中解放了出來。那么Windows CE呢?會不會給掌上電腦的程序設計帶來一次新的飛躍呢?一切沒有事實依據(jù)的預測都是不可靠的,我們只能通過認識WIN CE的優(yōu)勢與特點來小心翼翼的展望一下也許并不遙遠的未來。 CE能被廣泛的應用到各種嵌入式的產(chǎn)品中與其是一個緊湊、高效和可升級的操作系統(tǒng)有著直接的關系。從手持電腦到專門的工業(yè)控制器和消費用電子產(chǎn)品隨處可見CE的靚影。Windows CE已經(jīng)通過了其自身的能力證明:它能夠滿足32位嵌入式式程序開發(fā)的需求。同樣重要的是: Windows CE使嵌入式式系統(tǒng)的設計者得以充分利用Microsoft的32位基于Windows的開發(fā)工具的全部的函數(shù)---API。
本文并不是刻意要完全做Win32的編程指南,而是要介紹用Win32作為嵌入式式應用程序的開發(fā)工具。
回答一個問題先:什么是WIN32?
“WIN32”表示對于所有的Microsoft 32位平臺的一種普通的應用編程接口(API)。這些平臺通常指: Windows 95, Windows 98, Windows NT, Windows CE。 本文我們主要關注Windows CE操作系統(tǒng),可是需要弄清楚的是大多數(shù) Win32的應用編程接口對上面幾種平臺都適用。不過不同的平臺由于不同的特性及硬件的約束,其應用編程接口也不完全相同。WIN32平臺家族的一些成員支持全部的WIN32的應用編程接口(下簡稱API),而的只支持一部分的API。 為緊湊的、嵌入式的應用軟件和小型設備而設計的Windows CE受WIN32的API限制最多。話雖如此, Windows CE 的API也足夠的完善,處理實際的大量的高級的嵌入式式應用程序也沒什么問題。
概念性的飛躍:WIN32與Microsoft基本類庫(MFC)
用WIN32界面設計并不是創(chuàng)建32位基于 Windows的應用程序的唯一的途徑。另一種重要的途徑是可在WIN32與 Microsoft Visual C++開發(fā)環(huán)境使用的Microsoft基本類庫(MFC)。MFC為許多(不是所有)的WIN32的API進行了高度的封裝。通常,MFC提供了代表重要的WINDOWS的用戶界面對象的類,象窗口,對話框,畫刷,畫筆,和字體。MFC也為沒有任何用戶界面要求的嵌入式式應用軟件提供了相應的類。MFC類的成員函數(shù)調(diào)用WIN32API的函數(shù),可以使復雜的應用程序的設計巧妙的簡化。
作為WIN32的程序員,你可以自由的選取使用C或C++和WIN32 API, 或者用C++與MFC。VISUAL C++開發(fā)系統(tǒng)對于所有的,包括 Windows CE 的WIN32的目標操作系統(tǒng)都支持以上的兩種開發(fā)系統(tǒng)。
再說點廢話:Windows CE的內(nèi)核和 Win32 API
WINDOWS CE很容易讓人產(chǎn)生這樣一個錯覺,認為它僅僅是現(xiàn)有的操作系統(tǒng)(如/98/NT)降級版。但事實上Windows CE是以小型的、高度用戶化的面向嵌入式應用程序的操作系統(tǒng)開發(fā)起來的。在WINDOWS CE排除(或代替)了一些基于WINDOWS CE的應用軟件所不需要的操作系統(tǒng)特性的同時,它的內(nèi)核也具有大量的Microsoft 32位的操作系統(tǒng)的最精華的東西。例如在Windows NT下, 所有的在Windows CE下運行所應用軟件都運行在有優(yōu)先權的多任務處理環(huán)境下,在被全保護的內(nèi)存空間里。還有,象 Windows NT一樣,Windows CE支持本地統(tǒng)一的字符編碼標準碼字符串,使它更適于國際推廣??墒牵幌蟮?2位WINDOWS平臺,, Windows CE是十分緊湊和用戶化的,僅僅占用小于的內(nèi)存。
Windows CE的WIN32 API比其他的32位的Windows操作系統(tǒng)的WIN32 API要??;它只包括大約相當于Windows NT的半數(shù)的API。但是 Windows CE的WIN32 API也有其他系統(tǒng)所沒有的特性。例如:通知API,它能夠操作系統(tǒng)的層次,而不是在應用程序的層次上處理通知事件(如時鐘)。觸屏的API和對Windows CE的數(shù)據(jù)庫的內(nèi)置的支持是其他的操作系統(tǒng)所沒有的。觸屏的API使用于觸覺敏感顯示器的屏幕校正和用戶交互的管理容易實現(xiàn),而數(shù)據(jù)庫的API提供了快速簡捷的訪問數(shù)據(jù)庫的的一常用工具。另一個關于Windows CE的鮮為人知的方面是它的高度的模塊化;嵌入式系統(tǒng)開發(fā)者(用Microsoft Windows CE內(nèi)含的面向Visual C++的軟件包)能夠創(chuàng)建一個相當對于它們的獨特的硬件平臺和應用軟件用戶化了的Windows CE的版本。這對于一個使用Windows CE平臺的WIN32 API的用戶來就意味著對于的、32位的嵌入式式系統(tǒng),它是一種更簡單的API,更加優(yōu)化的目標操作系統(tǒng)。下面,我們將研究一些重要 的WIN32 API和Windows CE操作系統(tǒng)的內(nèi)部的內(nèi)容。
言歸正傳:程序和線程
了解WIN32 API和Windows CE操作系統(tǒng)的底層內(nèi)容的第一步就是了解多任務和多線程應用程序是如何組織的。WIN32術語中,程序被定義成一個正在運行中的進程實例。象其他的32位Windows 平臺一樣,Windows CE是一個多任務的操作系統(tǒng),在一個運行中的程序里,它支持執(zhí)行多個線程在后臺運行。
WIN32的線程的處理同其他常用的嵌入式的操作系統(tǒng)是有區(qū)別的。不象或其派生的系統(tǒng),32位Windows平臺從一開始設計就支持多線程應用程序。線程管理(時序安排,同步和資源管理)由內(nèi)核來完成,程序開發(fā)者利用函數(shù)裝入內(nèi)核(通過WIN32 API訪問)來建立和管理他們應用程序中的線索索。
例如,如果一個嵌入式應用程序必須監(jiān)視多個輸入設備并且在監(jiān)視到一個或多個設備上不同步發(fā)生的事件的時候要作出恰當?shù)姆从?。更進一步,如果這樣一個程序也需要更新一些共享的資源(如全局數(shù)據(jù)結(jié)構,磁盤上的文件,或其他設備)來作為與相關設備事件的反映。象這樣的一個程序需要一個可靠的線程管理系統(tǒng)。這恰恰是WIN32 API能夠提供的函數(shù)。多個線程能夠快捷并且容易的用WIN32 API線程創(chuàng)建界面,建立同步線程。(多個線程同時訪問一個數(shù)據(jù))這些可以通過關鍵的段,有名稱和沒有名稱事件,以及互斥的目標來實現(xiàn)。Windows CE 被設計成在執(zhí)行這些同步時僅占用最少的程序資源。
一個新的名詞:消息
在32位windows平臺上運行的程序更專門化,程序的線程依賴于消息來初始化程序,控制系統(tǒng)資源并且與操作系統(tǒng)和用戶通信。 windows消息有各種各樣來源 ,包括操作系統(tǒng),用戶活動諸如鍵盤輸入、、觸到屏幕,以及其它運行的程序或者線程。
當消息被送到線程時,這條消息被放置在消息隊列中等待最后處理。每一條線程擁有完全獨立的消息隊列。線程一般有不斷運行的消息循環(huán),恢復和處理消息。當隊列地沒有消息,并且線程不從事于其它任何活動,系統(tǒng)掛起線程,以節(jié)省中央控制器資源。
消息也能用于控制目的,初始化你的應用程序中各種類型的程序,并且他們能利用消息參數(shù)傳遞數(shù)據(jù)。例如,線程可能收到觸屏被激活的消息,消息參數(shù)可以表明X和Y為用戶行動的坐標。 在另一種類型的消息中,參數(shù)可以包括指針或者指向數(shù)據(jù)結(jié)構、窗口或其他對象的句柄。