版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
WindowsCE程序設(shè)計(jì)
作者對(duì)如何把Windows、嵌入式程序設(shè)計(jì)經(jīng)驗(yàn)應(yīng)用到WindowsCE.NET環(huán)境里做了嫻熟的示范。這這個(gè)環(huán)境
里,可以為支持Windows的PocketPC、Smartphone以及其它下一代設(shè)備編寫更快,更小的應(yīng)用。
目錄
前言
第一部分-Windows程序設(shè)計(jì)基礎(chǔ)
第1章-"HelloWindowsCE"
第2章-屏幕繪畫
第3章-輸入:鍵盤、鼠標(biāo)和觸摸屏
第4章-窗口、控件和菜單
第5章-公共控件和WindowsCE
第6章-對(duì)話狂和屬性表
第二部分-WindowsCE程序設(shè)計(jì)
第7章-內(nèi)存管理
第8章-文件和注冊(cè)
第9章-WindowsCE數(shù)據(jù)庫(kù)
第10章-模塊、進(jìn)程和線程
第11章-通知機(jī)制
第三部分-通信
第12章-串口通信
第13章-MindowsCE網(wǎng)絡(luò)通信
第14章-設(shè)備間通信
第15章-桌面連接
第四部分設(shè)備編程
第16章-瀏覽器Shell編程
第17章-PocketPC編程
第18章-PocketPC擴(kuò)展
第19章-Smartphone編程
第20章-游戲API-GAPI
第五部分-WindowsCE高級(jí)編程
第21章-系統(tǒng)編程
第22章-設(shè)備驅(qū)動(dòng)程序和服務(wù)編程
第23章-.NetCF下的程序設(shè)計(jì)
索引
封底
用這本廣受業(yè)界推崇的WindowsCE.NET參考書,為最新的智能移動(dòng)設(shè)備設(shè)計(jì)整潔、高性能的應(yīng)用程序。在
第3版里,基本內(nèi)容已經(jīng)根據(jù)WindowsCE.NET4.2和微軟.NETCF做了更新。作者DouglasBoling對(duì)如
何把Windows、嵌入式程序設(shè)計(jì)經(jīng)驗(yàn)應(yīng)用到WindowsCE.NET環(huán)境里做了嫻熟的示范。在這個(gè)環(huán)境里,可以
為支持Windows的PocketPC,Smartphone以及其它下一代設(shè)備編寫更快,更小的應(yīng)用。在DouglasBoling
專家級(jí)的指導(dǎo)下,可以促進(jìn)提升你的技術(shù),更快的適應(yīng)市場(chǎng)變化。
內(nèi)容要點(diǎn):
?用特定的技術(shù)處理內(nèi)存、存儲(chǔ)和電源限制
?能夠和網(wǎng)絡(luò)、PC、其他設(shè)備(包括使用紅外線和藍(lán)牙技術(shù)的設(shè)備)通信
?新內(nèi)容一為Smartphone的特殊要求編程,包括安全特性。
?新內(nèi)容一在PocketPCPhone和Smartphone上使用短消息服務(wù)(SMS)寫面向連接的應(yīng)用
?新內(nèi)容一編寫自己的設(shè)備驅(qū)動(dòng)程序、服務(wù)程序和超級(jí)服務(wù)程序
?配置用戶和事件通知
?使用游戲API編程
關(guān)于作者
作為?個(gè)作家、培訓(xùn)師和顧問,DouglasBoling從WindowsCE初始就開始涉足這個(gè)領(lǐng)域了,被公認(rèn)為這
個(gè)平臺(tái)的權(quán)威。他頻繁的出現(xiàn)在各種主要的專業(yè)開發(fā)人員大會(huì)上,微軟嵌入式開發(fā)大會(huì)、微軟專業(yè)開發(fā)者
大會(huì)以及TechEd都有他的身影。通過(guò)他的Boling都ns他的ng公司,Doug為許多在WindowsCE上工作的
一流公司做教學(xué)和咨詢。
主要的專業(yè)開發(fā)人員大會(huì)上,微軟嵌入式開發(fā)大會(huì)、微軟專業(yè)開發(fā)者大會(huì)以及TechEd都有他的身影。通過(guò)
他的BolingConsulting公司,Doug為許多在WindowsCE上工作的一流公司做教學(xué)和咨詢。
前言
兒乎是從眄ndowsCE誕生起,我就開始在它上面工作了。作為一個(gè)多年的晅ndows程序員,能夠?qū)⑽业?/p>
Windows程序設(shè)計(jì)經(jīng)驗(yàn)應(yīng)用到如此多
的不同而又很小的系統(tǒng)上,使我感到吃驚。這些WindowsCE系統(tǒng)運(yùn)行在各個(gè)領(lǐng)域,從類似PC的迷你膝上
機(jī)到蜂窩手機(jī),再到深藏于一些大
型工業(yè)設(shè)備里的嵌入式設(shè)備。WindowsCE里的Win32API使成千上萬(wàn)的Windows程序員能夠在--個(gè)全新的
系統(tǒng)領(lǐng)域里寫應(yīng)用程序。然而,細(xì)
微的差別,使得在WindowsCE中編程不同于在桌面版本的Windows中編程。我將在本書里進(jìn)行講解的正是
這些差異。
WindowsCE到底是什么?
WindowsCE是最小,也可能是最有趣的微軟Windows操作系統(tǒng)。WindowsCE徹頭徹尾的被設(shè)計(jì)成一個(gè)基
于ROM的,使用Win32API子集的小
型操作系統(tǒng)。WindowsCE把WindowsAPI擴(kuò)展到那些不支持大容量XP內(nèi)核的領(lǐng)域和機(jī)器上。
目前逐步消亡的Windows95/98/Me對(duì)那些需要向后兼容MS-DOS、Windows2.x和3.x程序的用戶來(lái)說(shuō),
是個(gè)大操作系統(tǒng)。雖然它有缺點(diǎn),
但WindowsMe還是繼承了這個(gè)困難的任務(wù)。另一方面,WindowsNT/2000/XP是用于企業(yè)級(jí)的。它犧牲了
兼容性和大小,來(lái)達(dá)到高級(jí)別的穩(wěn)
定和健壯。WindowsXP家庭版是WindowsXP的一個(gè)版本,用于家庭用戶,它盡力保持了兼容性,但這相
對(duì)于它的基本目標(biāo)一穩(wěn)定性來(lái)說(shuō)
,兼容性還是排在第2位的。
WindowsCE并不向后兼容MS-DOS或者Windows.它不是一個(gè)為企業(yè)級(jí)計(jì)算設(shè)計(jì)的全功能的操作系統(tǒng)。相反,
WindowsCE是一個(gè)輕量級(jí)、多線
程的操作系統(tǒng),它具有可選的圖形用戶接口。它的長(zhǎng)處在于它的小尺寸、Win32API子集和多平臺(tái)支持。
WindowsCE也是最初.NETCF版本的基礎(chǔ),.NETCF是.NET在移動(dòng)和嵌入式設(shè)備上的版本。這個(gè)精簡(jiǎn)框架
使用一個(gè)更小的類庫(kù)提供了一個(gè)同
樣強(qiáng)大的.NET運(yùn)行時(shí)環(huán)境,這使得它適合用于電池供電的小型設(shè)備上。
WinCE歷史簡(jiǎn)介
為了理解WindowsCE的歷史,你需要理解操作系統(tǒng)和使用操作系統(tǒng)的產(chǎn)品之間的區(qū)別。操作系統(tǒng)是微軟內(nèi)
部一組核心團(tuán)隊(duì)開發(fā)的。他們的產(chǎn)品就是操作系統(tǒng)自身。其他團(tuán)隊(duì),比如開發(fā)PocketPC的團(tuán)隊(duì),在操作
系統(tǒng)即將發(fā)布的時(shí)候,獲得并使用最新版本的操作系統(tǒng)。這種劃分成兩部分的方式,可能對(duì)理解WindowsCE
是怎么發(fā)展的會(huì)產(chǎn)生一些混淆。下面讓我們分別看一下這兩部分的歷史一設(shè)備和操作系統(tǒng)自身。
設(shè)備
首批為WindowsCE設(shè)計(jì)的是手持式“管理器”設(shè)備,配有480*240或640*240的屏幕和Chiclet鍵盤(計(jì)
算機(jī)常用的一種鍵盤,有一個(gè)很小的矩形鍵盤)。這些設(shè)備,稱為手持式PC,在1996年首次面世。在Fall
Comdex97大會(huì)上,WindowsCE2.0,一個(gè)進(jìn)行了顯著更新的操作系統(tǒng)版本發(fā)布了,和它配套的是類似的
更新一些的硬件,具有640*240的橫向屏幕,一些是彩色的,還具有略大一些的鍵盤。
1998年1月,消費(fèi)電子展覽會(huì)上,微軟宣布了兩個(gè)平臺(tái),掌上電腦(譯者注:Palm-sizePC可以看作Pocket
PC的前身,其中使用WindowsCE2.x的稱為Palm-sizePC,使用WindowsCE3.x的稱為PocketPC)和
車載PC(譯者注:AutoPC是WindowsCE的一種應(yīng)用模式,多用在一些車載電腦、工業(yè)自動(dòng)控制等場(chǎng)合,
可按客戶需要修改輸入輸出方式而不限定使用原有的程序。)。掌上電腦目標(biāo)直接瞄準(zhǔn)了由Palm0s統(tǒng)治
的基于筆式的管理器市場(chǎng)。掌上電腦具有縱向顯示的特點(diǎn),并配有240*320的屏幕,使用輸入筆來(lái)作為輸
入方式。但是很不幸,對(duì)WindowsCE愛好者來(lái)說(shuō),對(duì)這種原始掌上電腦,公眾顯然缺乏熱情。
此后,出現(xiàn)了一種新的迷你膝上式WindowsCE設(shè)備,配備了觸摸式輸入鍵盤和VGA/SuperVGA屏幕。這種
設(shè)備被稱為H/PC(專業(yè)版),電池可使用10小時(shí),并配備了微軟PocketOffice軟件改進(jìn)版。這種設(shè)備
中有許多具有內(nèi)置Modem,■—些甚至配備了thenstandard屏幕,移動(dòng)軌跡墊或者IBM軌跡球設(shè)備。
2000年4月,微軟宣布了PocketPC,它對(duì)老式掌上電腦(Palm-sizePC)做了極大的增強(qiáng)。最初的Pocket
PC使用預(yù)發(fā)布的具有更多功能的WindowsCE3.0.PocketPC的用戶界面也有所不同,具有更加整潔的2
緯外觀和修改過(guò)的主頁(yè)-Today桌面。然而,PocketPC最重要的特性是極大的改進(jìn)了WindowsCE的性能。
微軟做了很多工作來(lái)調(diào)優(yōu)WindowsCE的性能。這些改進(jìn)加上更快的CPU,可以讓系統(tǒng)像Pocket管理器期
望的那樣運(yùn)行的更快。在這種PocketPC里,摩爾定律使得叫ndowsCE設(shè)備可以跨越這條線:現(xiàn)在硬件已
經(jīng)有能力提供WindowsCE需要的運(yùn)算能力了。
手持式PC在2000年時(shí)升級(jí)到了WindowsCE3.0。雖然這些系統(tǒng)(現(xiàn)在稱為手持式PC2000)在消費(fèi)領(lǐng)域沒
有成功,但在工業(yè)領(lǐng)域找到了市場(chǎng)。它憑借相對(duì)低的費(fèi)用,大屏幕和長(zhǎng)時(shí)間電池能力滿足了這個(gè)機(jī)會(huì)市場(chǎng)。
2001年晚些時(shí)候,PocketPC更新為PocketPC2002.這次發(fā)布使用了WindowsCE。0的最終發(fā)布版本,
并做了一些用戶接口方面的改進(jìn)。同時(shí)也增加了PocketPCPhone版本,在PocketPC設(shè)備中集成了蜂窩
電話支持功能。這些設(shè)備具有了PocketPC的功能,也具有蜂窩電話的聯(lián)通功能,形成了新一代的幾乎可
以始終連接的移動(dòng)軟件。
微軟的另一組人發(fā)布了SmartDisplay(譯者注:一種具有觸摸屏的無(wú)線監(jiān)視器,可以通過(guò)802.11b無(wú)線網(wǎng)
絡(luò)連接到個(gè)人計(jì)算機(jī),并使用WindowsXPProfessional操作系統(tǒng)的"RemoteDesktop"(遠(yuǎn)程桌面)來(lái)
訪問主機(jī))。它使用WindowsCE.NET4.1系統(tǒng),具有平板式設(shè)備形式,有無(wú)線網(wǎng)絡(luò)訪問能力,有一個(gè)底座
可以連接到PC上。當(dāng)使用底座的時(shí)候,它可以做第2個(gè)顯示器。當(dāng)不用底座的時(shí)候,它可作為PC的移動(dòng)
顯小器。
2003年春季,PocketPC團(tuán)隊(duì)發(fā)布了升級(jí)版的PocketPC,稱為PocketPC2003。系統(tǒng)在用戶接口方面沒
有很多變化,但由于是基于WindowsCE.NET4.2,所以在穩(wěn)定性和性能方面都有了巨大改進(jìn)。PocketPC2003
還集成了藍(lán)牙支持功能,OEM廠商可以選擇是否包含該功能。
微軟還和OEM廠商合作生產(chǎn)基于WindowsCE的蜂窩電話。這些電話中的少部分被稱為Smartphone(智能
電話),在2002年末發(fā)布了,最初是基于WindowsCE3.0。2003年升級(jí)到了WindowsCE4.2,并增加了
一系列特征,包括.NETruntime功能。
新設(shè)備一直不斷在發(fā)布,例如MediatoGo設(shè)備,就是使用硬盤來(lái)存儲(chǔ)的移動(dòng)視頻播放器。WindowsCE操
作系統(tǒng)的強(qiáng)大功能,使應(yīng)用程序憑借運(yùn)行在這些設(shè)備上的簡(jiǎn)單操作系統(tǒng)超越了系統(tǒng)能力。
操作系統(tǒng)
雖然面向消費(fèi)者的產(chǎn)品可以不斷產(chǎn)生新聞熱點(diǎn),但最重要的開發(fā)工作仍然在操作系統(tǒng)自身。WindowsCE從
1.0之日就開始不斷演化,當(dāng)它還是一個(gè)簡(jiǎn)單的管理器操作系統(tǒng)時(shí)就被寄予厚望。從WindowsCE2.0開始
一直持續(xù)到今日,微軟不斷發(fā)布WindowsCE的嵌入式版木,使開發(fā)者可以用在他們自定義的硬件上。雖然
像PocketPC等消費(fèi)平臺(tái)占據(jù)了宣傳的主體,但對(duì)基本操作系統(tǒng)的改進(jìn)是使諸如PocketPC和Smartphone
之類的設(shè)備能夠運(yùn)做的基礎(chǔ)。
在FallComdex1997大會(huì)上,WindowsCE2.0隨著手持式PC2.0一起發(fā)布了。WindowsCE2.0增加了網(wǎng)
絡(luò)支持,包括Windows標(biāo)準(zhǔn)網(wǎng)絡(luò)功能,支持NDISminiport驅(qū)動(dòng)模式,以及通用NE2000網(wǎng)絡(luò)卡驅(qū)動(dòng)支持。
雖然增加的COM被限制在進(jìn)程內(nèi)服務(wù),但可以用來(lái)支持腳本編寫。引入了新的顯示驅(qū)動(dòng)模式,可以支持像
素深度,而不再是WindowsCE1.0中原始的每像素2位了。WindowsCE2.0是WindowsCE操作系統(tǒng)中第
一個(gè)與諸如H/PC等產(chǎn)品分離,獨(dú)立發(fā)布的版本。開發(fā)者可以購(gòu)買WindowsCE嵌入式工具包(ETK),它可以
讓開發(fā)者為特殊的硬件平臺(tái)定制WindowsCE。然而,用過(guò)ETK后,開發(fā)者會(huì)發(fā)現(xiàn),這個(gè)產(chǎn)品的功能還沒有
達(dá)到它所宣稱的目標(biāo)。
隨著掌上電腦(Palm-sizePC)在1998年初發(fā)布后,WindowsCE又在不斷改進(jìn)。雖然WindowsCE2.01
沒有按ETK形式發(fā)布,但它在減少操作系統(tǒng)和應(yīng)用程序大小方面做的努力還是值得稱道的。在WindowsCE
2.01中,C運(yùn)行時(shí)庫(kù)從每個(gè)EXE和DLL都要綁定的靜態(tài)鏈接庫(kù)中去掉了,放到了操作系統(tǒng)里。這極大的減
小了操作系統(tǒng)和應(yīng)用程序的大小。
1998年8月,微軟發(fā)布了H/PC,配套的發(fā)布了操作系統(tǒng)的新版本-2.11版。WindowsCE2.11是從未正式
發(fā)布的WindowsCE2.1的服務(wù)升級(jí)包。這一年年末,WindowsCE2.11作為WindowsCE平臺(tái)的2.11版本,
發(fā)布給了嵌入式開發(fā)者社區(qū)。該版本支持改進(jìn)的對(duì)象存儲(chǔ),允許要存儲(chǔ)的文件大于4M。還增加了對(duì)控制臺(tái)
程序的支持,同時(shí)增加了MS-DOS風(fēng)格的命令行解釋器CMD.exe的WindowsCE支持。WindowsCE2.11還增
加了FastIR,用于支持IrDA的4M紅外線標(biāo)準(zhǔn),同時(shí)增加了一些特殊功能來(lái)支持IP多點(diǎn)傳送。最初的安
全概念被引入:設(shè)備可以檢查和拒絕裝載沒有被認(rèn)證的模塊。
WindowsCE2.12也是作為2.1-白樺(WindowsCE2.1的代號(hào))的服務(wù)包發(fā)布的。這次發(fā)布中最大的亮點(diǎn)
是一個(gè)增強(qiáng)的平臺(tái)Builder工具集,它具有一個(gè)圖形化的前端界面。用一個(gè)新的通知接口調(diào)整了系統(tǒng)操作,
新的接口將不同的通知功能進(jìn)行了組合。通知的用戶接口暴露在平臺(tái)Builder中,允許嵌入式應(yīng)用開發(fā)者
定制通知對(duì)話框。微軟基于PC的Internet瀏覽器IE4.0也被引入到WindowsCE中,稱為Genie-通用
IE控件。這個(gè)HTML瀏覽器控件完善了簡(jiǎn)單小巧的PocketInternet瀏覽器。微軟消息隊(duì)列(MMQ)也被加
了進(jìn)去。WindowsCE2.11中的安全功能”運(yùn)行/不運(yùn)行(go/nogo)”也增加了“運(yùn)行,但不信任(go,but
don'ttrust)”的選項(xiàng)。這樣,不被信任的模塊可以運(yùn)行,但不能調(diào)用關(guān)鍵功能集,也不能修改注冊(cè)表的
某些部分。
期待已久的WindowsCE3.0終于在2000年中發(fā)布了。這次發(fā)布是跟隨同年4月發(fā)布的PocketPC的,它
使用了WindowsCE3.0略早一些的內(nèi)部版本。WindowsCE3.0最大的亮點(diǎn)在它的內(nèi)核,內(nèi)核為更好的支
持實(shí)時(shí)功能而做了優(yōu)化。增強(qiáng)后的內(nèi)核,支持256個(gè)線程優(yōu)先級(jí)(之前的版本是8個(gè)),可調(diào)整線程周期,
可嵌套的中斷服務(wù)程序,并減少了內(nèi)核等待時(shí)間。
WindowsCE3.0改進(jìn)的地方不僅僅在內(nèi)核上。一個(gè)新的COM組件被加入進(jìn)來(lái),用來(lái)完善2.0就有的進(jìn)程內(nèi)
COM功能。新的組件支持完整的進(jìn)程外COM和DCOM功能。對(duì)象存儲(chǔ)區(qū)域也做了改進(jìn),可以支持256MRAM
了。對(duì)象存儲(chǔ)區(qū)域里的文件大小限制也提高到了32M/文件。PlatformBuilder3.0的附加的軟件包加入了
更多的功能,增加了mediaplayer控件,提高了多媒體支持。用PPTP,ICS和遠(yuǎn)程桌面顯示功能改進(jìn)了網(wǎng)
絡(luò)支持。還正式引入了DirectXAPI。
WindowsCE接下來(lái)的一個(gè)版本,改變的不僅僅是新特性,產(chǎn)品的名字也改了。2001年初,WindowsCE.NET
4.0發(fā)布了。這個(gè)版本里,改變了虛擬內(nèi)存的管理方式,將每個(gè)應(yīng)用程序的虛擬內(nèi)存空間擴(kuò)大了1倍。Windows
CE.NET4.0還增加了新的驅(qū)動(dòng)裝載模式,服務(wù)(Services)支持,新的基于文件的注冊(cè)選項(xiàng),藍(lán)牙功能,802.11
以及1394支持。具有諷刺意味的是,WindowsCE.NET4.0雖然叫.NET,但卻不支持.NET精簡(jiǎn)框架。
2001年末,WindowsCE4.1跟隨WindowsCE4.0之后發(fā)布了,增加了IPv6支持,Winsock2支持,一組
支持applets的新功能,以及一^個(gè)叫PowerManager的例子。WindowsCE4.1支持.NET精簡(jiǎn)框架。.NET運(yùn)
行時(shí)庫(kù)作為一個(gè)快速修復(fù)包(QFE),在操作系統(tǒng)發(fā)布后提供的。
2003第2季度,WindowsCE.NET4.2發(fā)布了。這次升級(jí),提供了很棒的、OEM廠商期待的新特性-在嵌入
式系統(tǒng)上支持PocketPC應(yīng)用程序。PocketPC特有的API,比如菜單條、軟輸入法以及其它解釋器特性,
被移植到基本操作系統(tǒng)里了。為支持名字空間擴(kuò)展,瀏覽器Shell被重寫。通過(guò)在某些CPU上直接支持硬
件分頁(yè)表功能,內(nèi)核性能得到了改進(jìn)。
因?yàn)閃indowsCE不斷在發(fā)展,下個(gè)版本的WindowsCE正在開發(fā)中,一旦有新版本發(fā)布的信息,我將更新
到我的網(wǎng)站www.bolingconsulting.com。
為什么你應(yīng)該讀這本書
《微軟WindowsCE程序設(shè)計(jì)》一書,是為任何想給WindowsCE或.NET精簡(jiǎn)框架編寫應(yīng)用程序的人寫的。
嵌入式系統(tǒng)程序員為特定的應(yīng)用使用WindowsCE,Windows程序員對(duì)寫或者移植一個(gè)已有的Windows程序
很感興趣,甚至可管理代碼的開發(fā)者都可以用本書里的信息來(lái)使他們的工作更容易。
嵌入式系統(tǒng)上的程序員,他們或許沒有Windows程序員熟悉Min32API,他們可以讀本書第1部分的內(nèi)容
來(lái)熟悉Windows編程。雖然這一部分不如《Windows程序設(shè)計(jì)》(CharlesPetzold著)這類書能提供全面
的指南,但它的確提供了一些基本信息,使讀者可以讀懂后面的內(nèi)容。它也為嵌入式系統(tǒng)程序員開發(fā)復(fù)雜
但很有用的WindowsCE程序提供了幫助。
有經(jīng)驗(yàn)的Windows程序員可以通過(guò)本書學(xué)習(xí)WindowsCE和WindowsXP中Win32API的差異,兩者之間
的差異是很顯著的。WindowsCE的小巧意味著Win32模式里的很多API不能被支持。Win32API的某些部
分根本不被支持。另一方面,因?yàn)閃indowsCE的特殊性,WindowsCE在許多領(lǐng)域擴(kuò)展了Win32API,本書
將講述這些領(lǐng)域。
本書對(duì)使用.NETCF的開發(fā)者也很有用。當(dāng)前的CF在功能上有些缺陷:需要用可管理的應(yīng)用程序來(lái)調(diào)用操
作系統(tǒng)來(lái)執(zhí)行某個(gè)任務(wù)。本書對(duì)從操作系統(tǒng)可以獲得什么做了很好的指導(dǎo)。書中有一章節(jié)會(huì)討論在基于
WindowsCE的設(shè)備中開發(fā)可管理代碼所涉及的特性。
本書通過(guò)例子來(lái)進(jìn)行教學(xué)。我專門為本書寫了許多班ndowsCE示例程序。例子的原代碼列在了書中。源代
碼及最終編譯后的程序可以在附書光盤里找到,這些適合許多WindowsCE支持的處理器。
書中的示例都是直接用API寫的,即所謂的“Petzold”編程方式。由于本書的目標(biāo)是教你如何為班ndows
CE編寫程序,所以示例都避免使用諸如MFC等類庫(kù),應(yīng)為這會(huì)使為WindowsCE寫應(yīng)用程序所涉及的特性
產(chǎn)生混亂。一些人可能會(huì)認(rèn)為WindowsCE中有MFC,了解WindowsCEAPI的必要性就不那么大了。我并
不這么認(rèn)為,WindowsCEAPI的知識(shí)可以使你更有效的使用MFC。我認(rèn)為真正了解操作系統(tǒng)能夠有效的簡(jiǎn)
化應(yīng)用程序的調(diào)試。
第3版新內(nèi)容
第3版本做了比較大的修訂,增加了很多重要的內(nèi)容,包括Smartphone、藍(lán)牙等多個(gè)新主題。本書更新了
WindowsCE.NET4.2的新特性。增加了新的章節(jié),覆蓋Smartphone和.NETCF?許多章節(jié)做了明顯擴(kuò)充,
覆蓋了OBEX、藍(lán)牙和服務(wù)等主題。另有一些章節(jié)做了重新整理以更好的描述主題。
為Smartphone以及PocketPCPhone的通信特性增加了一章內(nèi)容,涉及如何為Smartphone2003設(shè)備寫應(yīng)
用程序。還講述了在Smartphone和PocketPCPhone上,如何通過(guò)SMS系統(tǒng),使用聯(lián)接管理器、發(fā)送和接
收消息功能來(lái)寫應(yīng)用程序。
新增了一章關(guān)于.NETCF內(nèi)容的,涉及如何寫WindowsCE上可管理的應(yīng)用程序。在此之后,集中在.NETCF
的特殊類WindowsForm的應(yīng)用程序上。本章涉及的一個(gè)重要部分是,當(dāng)可管理類庫(kù)不能提供應(yīng)用所需的功
能時(shí),如何在可管理的代碼中調(diào)用不可管理或者本地代碼。
設(shè)備之間通信這一章節(jié)涉及藍(lán)牙和OBEX。藍(lán)牙是一個(gè)無(wú)線通信標(biāo)準(zhǔn),但坦白地說(shuō),在許多文章中并沒有很
好的解釋說(shuō)明。這一章介紹了藍(lán)牙技術(shù)并提供了一個(gè)簡(jiǎn)單易懂的使用示例。本章還包括OBEX內(nèi)容,OBEX
是藍(lán)牙和紅外線數(shù)字聯(lián)盟使用的對(duì)象交換標(biāo)準(zhǔn)。本章另外一個(gè)例子演示了如何用OBEX通過(guò)藍(lán)牙或者紅外線
數(shù)據(jù)方式去傳送文件到其他設(shè)備。
PocketPC這一章增加了PocketPC2003設(shè)備的新特性。本書第2版PocketPC一章中的菜單條例子己經(jīng)
移到了通用控件這一章,這表明出在最新的WindowsCE版本中,PocketPCAPI將一些功能移到操作系統(tǒng)
中。
驅(qū)動(dòng)程序和服務(wù)一章也做了更新,涉及WindowsCE服務(wù)。WindowsCE服務(wù)在WindowsCE.NET4.0中引
入。WindowsCE服務(wù)程序?yàn)榫帉懞笈_(tái)運(yùn)行程序提供了方法,避免為服務(wù)使用單獨(dú)的進(jìn)程所帶來(lái)的開銷。操
作系統(tǒng)還提供超級(jí)服務(wù)來(lái)監(jiān)控IP端口,并在客戶端連接該端口的時(shí)候通知服務(wù)。本章提供了一個(gè)簡(jiǎn)單的
WindowsCE服務(wù)例子,演示了如何寫服務(wù)程序和使用超級(jí)服務(wù)的特性。
對(duì)本書第1版的讀者來(lái)說(shuō),本書包含了第2版的所有新特性。更新內(nèi)容涉及PocketPC和WindowsCE設(shè)備
驅(qū)動(dòng)程序,以及第1版發(fā)布后,實(shí)現(xiàn)的新的內(nèi)容管理和線程特性。
.NET精簡(jiǎn)框架
一個(gè)開發(fā)者沒有聽說(shuō)過(guò)微軟的.NET計(jì)劃,那他一定是在荒島上。該計(jì)劃包括一個(gè)運(yùn)行時(shí)環(huán)境,把代碼從硬
件上隔離開,同時(shí)提供一個(gè)類型安全的運(yùn)行時(shí)環(huán)境以增加安全性。為嵌入式和電池供電的設(shè)備編寫了更小
一些的運(yùn)行庫(kù)。.NET精簡(jiǎn)框架的最初版本運(yùn)行在有WindowsCE的PocketPC和基于WindowsCE.NET4.1
及以后的嵌入式系統(tǒng)上。
嵌入式設(shè)備的特殊要求使得在它上面只用可管理的代碼寫應(yīng)用程序成為一項(xiàng)挑戰(zhàn)。嵌入式應(yīng)用和一些移動(dòng)
應(yīng)用要求應(yīng)用程序和設(shè)備緊密的集成在一起。因?yàn)檫\(yùn)行時(shí)庫(kù)的特性之一就是將應(yīng)用和硬件隔離,所以一個(gè)
嵌入式可管理的應(yīng)用程序有時(shí)需要打破運(yùn)行時(shí)庫(kù)的限制,直接訪問某些操作系統(tǒng)的功能。
正如前面所提到的,在精簡(jiǎn)框架這一章節(jié)里,花費(fèi)了大量時(shí)間來(lái)討論如何使可管理的應(yīng)用程序訪問操作系
統(tǒng)。討論涉及到一些技術(shù),比如通過(guò)跨越可管理/本地代碼邊界來(lái)聚集參數(shù)等,當(dāng)然,在精簡(jiǎn)構(gòu)架里完成這
個(gè)任務(wù)比在桌面應(yīng)用中更困難。
關(guān)于MFC
對(duì)于問是否該用MFC開發(fā)WindowsCE下應(yīng)用程序的人,過(guò)去,我通常的回答是:不要用。老版的windows
CE系統(tǒng)加上比較慢的CPU,運(yùn)行復(fù)雜、全功能的MFC應(yīng)用會(huì)帶來(lái)很大的壓力。但現(xiàn)在,我不再這么絕對(duì)了。
新版的WindowsCE平臺(tái)足夠快,可以用合理的性能運(yùn)行基于MFC的應(yīng)用。MFC運(yùn)行時(shí)庫(kù)包含在這些設(shè)備的
ROM中,所以應(yīng)用程序僅僅是代碼,而不再是代碼加MFC運(yùn)行時(shí)庫(kù)。
但正像速度和運(yùn)行庫(kù)都己經(jīng)加到平臺(tái)里去一樣,MFC正逐漸沒落。微軟不再推薦MFC應(yīng)用開發(fā),取而代之
的是.NET開發(fā)。所以你應(yīng)該用MFC開發(fā)嗎?我的回答是不要再用MFC開發(fā)新項(xiàng)目。對(duì)于舊項(xiàng)目,仍然有機(jī)
會(huì)用MFC,但僅僅只是因?yàn)檫@些項(xiàng)目沒有移植到其他開發(fā)平臺(tái)上。
WindowsCE開發(fā)工具
本書假設(shè)讀者了解C和熟悉微軟Windows,在XP下用微軟嵌入式VisualC++開發(fā)過(guò)本地程序。為了編譯書
中的例子程序,需要微軟嵌入式VisualC++4.0,這可以在附書光盤中找到。需要相關(guān)的適合WindowsCE
設(shè)備的SDK,用于你的目標(biāo)設(shè)備。
每個(gè)例子已經(jīng)有一個(gè)預(yù)先定義好的工程設(shè)置,但你也可以選擇從頭創(chuàng)建一個(gè)工程。對(duì)大多數(shù)例子來(lái)說(shuō),簡(jiǎn)
單創(chuàng)建一個(gè)普通WCE應(yīng)用程序工程就可以了。對(duì)于那些要求訪問PocketPC上特殊功能的例子,即使整個(gè)
工程設(shè)置不是特別為PocketPC應(yīng)用定義的,也可以用特殊的代碼鏈接這些功能。
對(duì)那些想為PocketPC2000和2002寫應(yīng)用程序的開發(fā)者來(lái)說(shuō),需要使用嵌入式VisualC++3.0。不幸
的是,附書光盤沒有足夠的空間同時(shí)放eVC3和eVC4,但你可以從微軟網(wǎng)站下載eVC3。還需要用于這些老
版本PocketPC系統(tǒng)的SDK。一些例子,例如藍(lán)牙、OBEX和服務(wù)等例子,使用了老系統(tǒng)里沒有的例子。
用VisualStudio.NET2003可以開發(fā).NET精簡(jiǎn)框架應(yīng)用程序。因?yàn)樘蠛头敲赓M(fèi),所以沒有在光盤里提
供。當(dāng)然,這個(gè)工具是非常高效的開發(fā)工具。那些對(duì)開發(fā)可管理代碼感興趣的人來(lái)說(shuō),開發(fā)效率提高減輕
了升級(jí)花費(fèi)所帶來(lái)的痛苦.在精簡(jiǎn)框架這一章,你需要VisualSludio.NET2003來(lái)編譯里面的例子。該工
具為所有的PocketPC設(shè)備以及基于WindowsCE4.1以上的嵌入式版本提供了必要的運(yùn)行時(shí)庫(kù)。
目標(biāo)系統(tǒng)
你并不需要WindowsCE目標(biāo)設(shè)備來(lái)體驗(yàn)書中提供的例子。各種SDK平臺(tái)都帶有WindowsCE模擬器,讓你
可以在Wind5VsXP對(duì)WindowsCE程序下執(zhí)行基本測(cè)試。在你手邊沒有實(shí)際的設(shè)備的時(shí)候,可以很方便地
使用模擬器。模擬器執(zhí)行PC模擬器中的WindowsCE版本,而PC模擬器會(huì)在PC上執(zhí)行一個(gè)實(shí)際的Windows
CE操作系統(tǒng)。
在決定使用哪種WindowsCE硬件來(lái)測(cè)試的時(shí)候,你應(yīng)該考慮很多因素。首先,如果應(yīng)用程序式一個(gè)商業(yè)產(chǎn)
品,你至少應(yīng)該為每種目標(biāo)CPU購(gòu)買一個(gè)系統(tǒng)。你需要在所有目標(biāo)CPU上進(jìn)行測(cè)試,因?yàn)殡m然源代碼可能
相同,但執(zhí)行結(jié)果可能不同,并且每種目標(biāo)CPU分配的內(nèi)存大小也不同。
CD里的內(nèi)容
附書光盤包含了書中所有例子的源代碼。我提供了MSeVC的工程文件,你可以打開這些預(yù)配置的文件。所
有的例子都是為WindowsCE4.2、PocketPC2003和Smartphone2003設(shè)計(jì)的。
除了例子,光盤中還包含免費(fèi)的eVC。這和你從微軟站點(diǎn)下載或者通過(guò)光盤購(gòu)買的版本一樣,可以把這些
工作看作是贈(zèng)品。還包括了PocketPC2003的平臺(tái)SDK。
光盤還包括一個(gè)StartCD程序,提供圖形化界面,讓你可以訪問CD里的內(nèi)容。如果你開了Windows自動(dòng)運(yùn)
行功能,當(dāng)你把光盤插到光驅(qū)中,這個(gè)程序就會(huì)自動(dòng)運(yùn)行。如果不能自動(dòng)運(yùn)行,進(jìn)入CD根目錄,運(yùn)行
StartCD.exe即可。Readme,txt文件為CD中的內(nèi)容提供了更多的信息,介紹了包含的工具和SDK的系統(tǒng)要
求,以及對(duì)包含產(chǎn)品的支持信息。
下面是為了安裝和運(yùn)行MSeVC所需要的系統(tǒng)要求。注意eVC是運(yùn)行在Windows2000,WindowsXP,或者
WindowsServer2003上的。
*帶Pentium處理器的PC:推薦Pentium150MHz或者更高。
*MicrosoftWindowsXP,Windows2000ServicePack2(orlater)orWindowsServer2003
*32MB內(nèi)存,推薦48MB
*硬盤空間:最小安裝360MB,完全安裝720MB
*帶光驅(qū)
*VGA或更高分辨率的顯示器,推薦SVGA
*微軟鼠標(biāo)或兼容鼠標(biāo)設(shè)備。
其它資源
雖然我試圖將本書做成“一站式”的WindowsCE編程書籍,但沒有一本書可以覆蓋各個(gè)方面的。通常,要
了解更多眄ndows編程知識(shí),我推薦經(jīng)典書籍一CharlesPetzold寫的Windows編程(微軟出版社,1998)
一書。這是迄今為止最好的Windows編程書籍。Charles提供了例子,演示如何解決困難而又常見的Windows
問題。要更多的了解Win32核心API,我推薦JeffRichter的《Windows核心編程》(Programming
ApplicationsforMicrosoftWindows(MicrosoftPress,1999))°Jeff揭示了進(jìn)程、線程和內(nèi)存管理
方面的很多細(xì)節(jié)技術(shù)。要了解更多的MFC編程知識(shí),沒有比JeffProsise的《MFC程序設(shè)計(jì)》(Programming
WindowswithMFC(MicrosoftPress,1999).)更好的書籍了。這本書是MFC版的Petzold編程書籍,
可以說(shuō)是MFC程序員必讀。
要更多的了解.NET編程,我推薦CharlesPetzold的《C#Windows程序設(shè)計(jì)》(ProgrammingWindowswith
C#(MicrosoftPress,2002)),Charles將他令人驚嘆的技巧應(yīng)用到了.NET框架的WindowsForm中。
這是趕上.NET客戶端編程發(fā)展速度的一本非常的好書。
第1章HelloWindowsCE
概述
從經(jīng)典的《TheCProgrammingLanguage》一書開始,傳統(tǒng)上編程方面的書都是從"Hello,world”程序
開始的。這是一個(gè)合理恰當(dāng)?shù)拈_始。每個(gè)程序都有一個(gè)基本底層結(jié)構(gòu),分析它可以揭示所有運(yùn)行在這個(gè)操
作系統(tǒng)上的應(yīng)用程序都具有的基礎(chǔ),避一些設(shè)計(jì)復(fù)雜的任務(wù)將結(jié)構(gòu)搞的難以理解。
在本書"Hello,world”一章里,包含了關(guān)于設(shè)置和使用編程環(huán)境的細(xì)節(jié)。用于開發(fā)微軟WindowsCE應(yīng)
用程序的環(huán)境與開發(fā)標(biāo)準(zhǔn)微軟Windows應(yīng)用程序的環(huán)境有些不同,因?yàn)閃indowsCE程序是在運(yùn)行XP的PC
機(jī)器上編寫,卻主要在獨(dú)立的基于WindowsCE的目標(biāo)機(jī)器上進(jìn)行調(diào)試的。
經(jīng)驗(yàn)豐富的Windows程序員可能會(huì)跳過(guò)這一章進(jìn)入有更多內(nèi)容的主題,但我建議你至少瀏覽一下本章,
了解標(biāo)準(zhǔn)舊ndows編程和WindowsCE編程之間的區(qū)別。兩個(gè)開發(fā)過(guò)程中許多細(xì)微而又重要的不同之處和
WindowsCE應(yīng)用程序的基本構(gòu)架包含在第一章里。
1.1WindowsCE不同之處
WindowsCE有許多特性使得它不同于其它Windows平臺(tái)。首先,運(yùn)行WindersCE的系統(tǒng),大多數(shù)可
能不使用Intelx86兼容微處理器。實(shí)際上,WindowsCE運(yùn)行在4種不同的CPU系列里:SHx,MIPS,ARM,
和x86。幸運(yùn)的是,開發(fā)環(huán)境幾乎將各種不同CPU的所有差異與程序員隔離開了。
WindowsCE程序事先不能確定屏幕或鍵盤。PocketPC設(shè)備有一個(gè)240*320的縱向屏幕,而其它系統(tǒng)
具有傳統(tǒng)的480*240,640*240,640*480像素分辨率的橫向屏幕。一些嵌入式設(shè)備則根本沒有顯示器。一些
目標(biāo)設(shè)備可能不支持彩色,并且大部分晅ndowsCE設(shè)備用觸摸屏替代了鼠標(biāo)。一些在觸摸屏設(shè)備上,輕觸
屏幕,表示鼠標(biāo)左鍵點(diǎn)擊,沒有明顯的方法代表鼠標(biāo)右鍵。為了能處理右鍵,Windows約定,當(dāng)輕觸屏幕
的時(shí)候,按下Alt鍵,由時(shí)ndowsCE程序把這個(gè)組合序列解釋為鼠標(biāo)右鍵點(diǎn)擊。
WindowsCE設(shè)備具有更少的資源
運(yùn)行WindowsCE系統(tǒng)的目標(biāo)設(shè)備上,各種資源變化極大。當(dāng)寫一個(gè)標(biāo)準(zhǔn)Windows程序的時(shí)候,程序
員可以對(duì)目標(biāo)設(shè)備做許多假定,并且設(shè)備幾乎都是IBM兼容機(jī)。目標(biāo)設(shè)備通常有硬盤用于存儲(chǔ),同時(shí)虛擬
內(nèi)存系統(tǒng)用硬盤作為交換設(shè)備來(lái)模擬一個(gè)幾乎沒有數(shù)量限制的虛擬內(nèi)存?程序員知道用戶有鍵盤、雙鍵鼠
標(biāo)以及可以當(dāng)前支持256色、至少有800*600分辨率的顯示器。
WindowsCE程序所運(yùn)行的設(shè)備幾乎都沒有硬盤作為大容量存儲(chǔ)。沒有硬盤不僅僅意味著沒有地方存儲(chǔ)
大量文件,也意味著不能交換數(shù)據(jù)到磁盤上來(lái)創(chuàng)建虛擬內(nèi)存。所以WindowsCE程序幾乎總是在少量?jī)?nèi)存環(huán)
境里運(yùn)行的。因?yàn)橘Y源缺乏,內(nèi)存分配經(jīng)常失敗。當(dāng)空閑內(nèi)存達(dá)到一個(gè)嚴(yán)重低的級(jí)別,版ndowsCE可能會(huì)
自動(dòng)終止一個(gè)程序。RAM的限制對(duì)WindowsCE程序有很大的影響,并且是將現(xiàn)有的Windows應(yīng)用程序移植
到WindowsCE過(guò)程涉及的主要挑戰(zhàn)之一。
Unicode
在寫WindowsCE程序時(shí),程序員可以使用的一個(gè)特性是Unicode.Unicode是一個(gè)字符編碼標(biāo)準(zhǔn),使
用16位表示一個(gè)字符,相對(duì)的,ASCII標(biāo)準(zhǔn)是用單個(gè)8位編碼一個(gè)字符。Unicode允許相當(dāng)簡(jiǎn)單將程序移
植到不同的國(guó)際市場(chǎng),因?yàn)槭澜缟纤幸阎淖址伎梢杂?5,536個(gè)Unicode值里的一個(gè)來(lái)表示。處理
Unicode相對(duì)容易,只要避免假設(shè)字符串是用ASCII代表和字符是按單個(gè)字節(jié)存儲(chǔ)的。
使用Unicode的一個(gè)結(jié)果是每個(gè)字符占2個(gè)字節(jié)而不是一個(gè),字符串長(zhǎng)了?倍。程序員必須小心計(jì)算
緩沖區(qū)和字符串的長(zhǎng)度。你不能再假設(shè)260字節(jié)可以存儲(chǔ)259個(gè)字符和一個(gè)0結(jié)尾符。作為標(biāo)準(zhǔn)char數(shù)據(jù)
類型的替代品,你應(yīng)該使用TCHAR數(shù)據(jù)類型。TCHAR在MSWindows95和98中定義為char型,在Windows
2000,XP,WindowsCE中,使用Unicode功能的程序里,TCHAR定義為unsignedshort類型。這些類型定義,
允許在基于ASCII和Unicode的操作系統(tǒng)上源代碼級(jí)的兼容。
新控件
WindowsCE上有許多為特殊環(huán)境設(shè)計(jì)的新控件。包括命令條、菜單條控件,提供類似菜單和工具條的
功能,在具有更小屏幕的WindowsCE設(shè)備上,這些為了節(jié)省空間都合并一行里。其它控件也為WindowsCE
做了改進(jìn)。WindowsCE里的編輯控件(edilcontrol)可以設(shè)置為自動(dòng)將單詞首字母大寫,這對(duì)在無(wú)鍵盤
的PDA上進(jìn)行設(shè)計(jì)是很重要的。對(duì)于Windows桌面版本里的控件,WindowsCE則提供了大部分。例如,日
期和時(shí)間調(diào)整控件、日歷控件使日歷和管理器應(yīng)用程序更加適合諸如H/PC和PocketPC等手持設(shè)備。其它
Windows標(biāo)準(zhǔn)控件做了功能裁減,這反應(yīng)了WindowsCE特殊的硬件系統(tǒng)配置所具有的緊湊簡(jiǎn)潔特性。
組件化
WindowsCE編程中另一個(gè)需要注意的方面是WindowsCE可以被微軟或OEM廠商分解和重新配置,以
更好地適應(yīng)目標(biāo)市場(chǎng)或設(shè)備。Windows程序員通常只是檢查Windows版本,看是否是Windows95/98,Me
系列或者2000,XP系列。通過(guò)獲得版本,程序員可以判斷哪些API函數(shù)可以使用。然而,WindowsCE可
以按無(wú)數(shù)種方式配置。
迄今為止,WindowsCE最流行的配置是PocketPC。微軟定義了具體WindowsCE組件集合,這些都體
現(xiàn)在所有稱為PocketPC的設(shè)備上。然而,—■些用WindowsCE生產(chǎn)的OEM產(chǎn)品--PDA設(shè)備,并不叫Pocket
PC。這些設(shè)備同PocketPC設(shè)備在API上略微不同。如果你沒有意識(shí)到這一點(diǎn),你很容易寫一個(gè)程序能運(yùn)
行在一個(gè)平臺(tái),卻不能運(yùn)行在另一個(gè)平臺(tái)。在嵌入式平臺(tái)上,OEM廠商決定包括什么組件,并可以為它特
定的平臺(tái)創(chuàng)建一個(gè)SDK開發(fā)包。如果OEM廠商對(duì)第三方開發(fā)感興趣,它會(huì)為它的設(shè)備提供一個(gè)可定制的SDK
包。新的平臺(tái)不斷出現(xiàn),它們有許多共同的地方,也有許多不同之處。程序員需要了解目標(biāo)平臺(tái),在嘗試
用一個(gè)可能不被設(shè)備支持的功能集時(shí),需要讓程序檢查在特殊平臺(tái)上什么函數(shù)可用。
Win32子集
最后,因?yàn)閃indowsCE比XP小很多,它不能像它大塊頭的兄弟XP那樣支持所有的函數(shù)調(diào)用。當(dāng)你面
對(duì)一個(gè)不支持打印功能的操作系統(tǒng),比如原始模式下的WindowsCE時(shí),不要調(diào)用任何打印函數(shù),WindowsCE
還去除了一些XP中支持的冗余功能。雖然WindowsCE可能不支持你喜歡的功能,但其它不同的函數(shù)集可
能會(huì)工作的很好。有時(shí)WindowsCE編程似乎主要是用WindowsCE中稀少的API來(lái)找出實(shí)現(xiàn)一個(gè)特性的方
式,雖然成千上萬(wàn)的函數(shù)很少被調(diào)用。
1.2依然是Windows編程
雖然WindowsCE和晅ndows的其它版本之間確實(shí)存在差異,但不應(yīng)該夸大這種差異。編寫WindowsCE
應(yīng)用程序依然是編寫Windows應(yīng)用程序。
有同樣的消息循環(huán),同樣的窗口,大部分情況下,具有同樣的資源和控件。差異并不會(huì)掩蓋相同的地
方一。匈牙利命名方式是重要的相同點(diǎn)之一。
匈牙利命名方法
自從CharlesPetzold寫《Windows程序設(shè)計(jì)》一書開始,大部分Windows程序都采用了匈牙利命名
方法,這是一種傳統(tǒng)和良好的命名方法。這種編程風(fēng)格是CharlesSimonyi多年前在微軟發(fā)明的,它給程
序里每個(gè)變量用1到2個(gè)字母的前綴來(lái)表示變量的類型。例如,命名為Name的字符串?dāng)?shù)組應(yīng)該命名為
szName,前綴sz表示變量類型是以0做終止符的字符串。匈牙利命名法的價(jià)值在于極大的提高了源程序的
可讀性。其它的程序員,或者你看一段代碼,不應(yīng)該重復(fù)的看變量聲明來(lái)判定變量的類型。表1T列出了
變量典型的匈牙利前綴。
表1-1變量的匈牙利前綴
變量類
型匈
牙利前綴
Integer
iorn
Word
(16-bit)wors
Doubleword(32-bitunsigned)Dw
Long(32-bitsigned)L
Char
C
String
Sz
Pointer
P
Long
pointerIp
Handle
h
Windowhandlehwnd
Struct
sizecb
你可以看到Windows早期的一些痕跡。Ip或者長(zhǎng)指針,在Inlel16位編程模式下,指針分位短指針
(16位偏移)和長(zhǎng)指針(附加偏移段)。其它前綴由類型的縮寫構(gòu)成。例如,刷子的句柄通常是hbr。前
綴可以是組合的,就像Ipsz,指出一個(gè)以0結(jié)尾的長(zhǎng)指針。WindowsAPI中大部分結(jié)構(gòu)是采用匈牙利表示
法來(lái)給它們的域命名的。本書通篇使用這種命名法。我鼓勵(lì)你在你的程序里用這種命名方法。
1.3第一個(gè)WindowsCE程序
說(shuō)了這么多,就讓我們一起看一下你的第一個(gè)WindowsCE程序吧。列表1T顯示了Heilol-為Windows
CE寫的一個(gè)簡(jiǎn)單的HelloWorld應(yīng)用程序。
Listing1-1:Hellol,一個(gè)簡(jiǎn)單的Windows應(yīng)用程序
Hellol.cpp
/=============:==:==========-======:====-=-=====-====~==================
//Hellol-AsimpleapplicationforWindowsCE
//WrittenforthebookProgrammingWindowsCE
//Copyright(C)2003DouglasBoling
#include"windows.h〃
//Programentrypoint
intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstance,
LPWSTRIpCmdLine,intnCmdShow){
printf("HelloWorld\n,/);
return0;
)
如您所見,除了程序入口點(diǎn)外,代碼看上去十分類似經(jīng)典的Kernighan和Ritchie版程序。在注釋之
后,有一行代碼
ttinclude“windows.h〃
這個(gè)文件包含了一組文件,它們中定義了WindowsAPI及其用到的結(jié)構(gòu)和常量。
程序的入口點(diǎn)是本程序和標(biāo)準(zhǔn)C程序之間最大的差別。作為C標(biāo)準(zhǔn)入口intmain(char**argv,int
argc)的替代品,WindowsCE通過(guò)標(biāo)準(zhǔn)Windows入口點(diǎn)[注1]iniWINAPIWinMain(HINSTANCEhlnstance,
HINSTANCEhPrevInstance,LPWSTRIpCmdLine,intnCmdShow);構(gòu)建程序環(huán)境。
WindowsCE在一些方面不同于桌面版的Windows。
第1個(gè)參數(shù),hlnstance為其它應(yīng)用程序指明具程序?qū)嵗矠樾枰?yàn)證這個(gè)EXE的WindowsAPI函
數(shù)提供了程序?qū)嵗?/p>
參數(shù)hPrevInstance是從舊的Win16Api(Windows3.1及更早的系統(tǒng))遺留下來(lái)的。包括WindowsCE
在內(nèi)的所有Win32操作系統(tǒng)中,hPrevInstance始終是0,可以忽略掉。
參數(shù)IpCmdLine指向一個(gè)Unicode字符串,包含了命令行文本。從微軟WindowsCE瀏覽器啟動(dòng)的應(yīng)用
程序沒有命令行參數(shù),但在某些情況下,例如當(dāng)系統(tǒng)自動(dòng)啟動(dòng)一個(gè)程序時(shí),系統(tǒng)包含一個(gè)命令行參數(shù)來(lái)說(shuō)
明程序?yàn)槭裁幢粏?dòng)。參數(shù)IpCmdLine是WindowsCE與XP出現(xiàn)差異的情況之一,在晅ndowsCE里,命
令行字符串是Unicode字符串,在其它版本的聽ndows里,命令行字符串總是ASCH的。
最后一個(gè)參數(shù),nCmdShow,指明了程序主窗口的初始狀態(tài)。由父進(jìn)程,通常是瀏覽器傳遞這個(gè)參數(shù)到
程序里。它對(duì)應(yīng)用程序如何配置主窗口給出了說(shuō)明。該參數(shù)可能會(huì)規(guī)定窗口最初顯示成圖標(biāo)
(SW_SHOWMINIMIZE),或者顯示最大化(SN[SHOWMAXIMIZED)來(lái)覆蓋整個(gè)桌面,或者顯示為普通(SW_RESTORE)
大小來(lái)表明窗口按標(biāo)準(zhǔn)可變大小方式顯示在屏幕上。其它值規(guī)定窗口初始狀態(tài)對(duì)用戶不可見,或者規(guī)定窗
口可見但不能成為活動(dòng)窗口。在WindowsCE里,這個(gè)參數(shù)的值被限制成3個(gè)狀態(tài):普通(SW_SHOW)、隱
藏(S憶HIDE)和非激活顯示(SW_SHOWNOACTIVATE)除非應(yīng)用程序需要強(qiáng)制它的窗口預(yù)先確定狀態(tài),在
程序主窗口被創(chuàng)建后,這個(gè)值是不加修改,只是簡(jiǎn)單的傳遞給ShowWindow函數(shù)的。
下一行是這個(gè)應(yīng)用程序唯一的功能行:printf("HelloWorld'n");
WindowsCE支持大部分標(biāo)準(zhǔn)C庫(kù),包括printf,getchar等等。這一行有趣的地方在于它不像Windows
CE其它任何地方,這個(gè)串不是Unicode而是ANSI。下面是對(duì)這個(gè)現(xiàn)象的合理解釋:對(duì)于用ANSI標(biāo)準(zhǔn)編譯
的C標(biāo)準(zhǔn)庫(kù),printf和諸如strcpy等其它字符串庫(kù)函數(shù)用的是ANSI字符串。當(dāng)然,WindowsCE支持這些
標(biāo)準(zhǔn)函數(shù)的Unicode版,例如wprintf,getwchar,和wcscpy?
最后,用return0;結(jié)束程序。
其它進(jìn)程可以用Win32API函數(shù)GetExitCodeProcess獲取返回值。
構(gòu)建第一個(gè)應(yīng)用程序
要在你的系統(tǒng)上從頭創(chuàng)建Hellol,可以啟動(dòng)MSeVC++,在[File]菜單上選擇[新建]創(chuàng)建一個(gè)新工程。
當(dāng)看到新工程的對(duì)話框,可以明顯的看到WinCE編程與標(biāo)準(zhǔn)Win32編程的變化。你有機(jī)會(huì)選擇在圖1T中
所顯示的各種平臺(tái)。對(duì)于非MFC或ATL工程,首選是WCEPocketPC應(yīng)用(用于PockelPC)和WCE應(yīng)用
(用于其它WindowsCE系統(tǒng))。您還可以選擇適當(dāng)?shù)哪繕?biāo)CPU。例如,選擇Win32(WCEMIPI)來(lái)為使用MIPS
CPU的WindowsCE平臺(tái)編譯程序。無(wú)論是何種目標(biāo)設(shè)備,都要確保選擇IVCE模擬器。這樣你就可以在用XP
下的模擬器中運(yùn)行例子程序了。
圖1T平臺(tái)列表使eVC++能夠面向不同的WindowsCE平臺(tái)。
接下來(lái),eVC++會(huì)詢問您是否想創(chuàng)建一個(gè)空的工程、一個(gè)簡(jiǎn)單程序或者一個(gè)Hell。World應(yīng)用。對(duì)本
書里所有的例子,都選擇空工程。這樣做是為了避免代碼向?qū)蚶犹砑尤魏晤~外的代碼。在[File]菜單
選擇[New],Hellol.cpp創(chuàng)建新文件。
當(dāng)為Hell。1創(chuàng)建或從CD復(fù)制了合適的源文件,選擇晅n32(WCEx86em)Debug作為目標(biāo)平臺(tái),之后
build這個(gè)程序。這一步會(huì)編譯源代碼,如果沒有編譯錯(cuò)誤的話,系統(tǒng)自動(dòng)啟動(dòng)模擬器,并把EXE程序放
到模擬器文件系統(tǒng)里,接下來(lái)你可以啟動(dòng)Hellol。如果你在Windows98或Me系統(tǒng)下,模擬器系統(tǒng)能夠會(huì)
顯示一個(gè)錯(cuò)誤信息,因?yàn)槟M器只能在Win2000或XP下運(yùn)行。
如果你有WindowsCE系統(tǒng),比如PocketPC(PPC),把PPC連接到PC上,方法和同步PC的內(nèi)容到PPC
一樣。打開微軟ActiveSync,建立PPC和PC的鏈接。為了WindowsCE設(shè)備能夠運(yùn)行,雖然ActiveSync
鏈接并不是必須的,但我發(fā)現(xiàn)讓它運(yùn)行可以為開發(fā)環(huán)境和WindowsCE系統(tǒng)之間建立一個(gè)更穩(wěn)定的鏈接。
一但PC和WindowsCE設(shè)備之間的鏈接成功和運(yùn)行,切換回eVC++,選擇合適的目標(biāo)設(shè)備(如適合iPaq
PocketPC的Win32[WCEARM]Debug)進(jìn)行編譯和rebuild。和為模擬器創(chuàng)建程序一樣,如果沒有錯(cuò)誤,
eVC++自動(dòng)下載編譯程序到遠(yuǎn)程設(shè)備上。程序要么被放到對(duì)象存儲(chǔ)的根目錄上,要么放在\windows\start
菜單日中。
運(yùn)行該程序
要在嵌入式WinodowsCE設(shè)備H/PC上運(yùn)行Heilol,單擊手持式PC的MyComputer圖標(biāo),找到根目錄
下的文件,之后雙擊應(yīng)用程序圖標(biāo)啟動(dòng)程序。
要在PocketPC上運(yùn)行程序,從設(shè)備的Start菜單選擇程序就可以了。因?yàn)閑VC++已經(jīng)把程序下載到
\windows\start菜單所在的目錄了。這種方式下,下載的應(yīng)用程序自動(dòng)顯示在Start菜單里。
有問題?
如果在PocketPC上點(diǎn)擊圖標(biāo)或開始菜單選擇Hei1。1程序,似乎沒什么反應(yīng)。在手持式PC上,程序
似乎只是刷新了一下屏幕。這是因?yàn)槌绦騿?dòng)、寫到控制臺(tái)并結(jié)束了。除非你從一個(gè)已經(jīng)創(chuàng)建的控制臺(tái)啟
動(dòng)程序,否則WindowsCE會(huì)在Hell會(huì)執(zhí)行printf語(yǔ)句時(shí),創(chuàng)建一個(gè)控制臺(tái)窗口,并且在Hellol結(jié)束的
時(shí)候自動(dòng)關(guān)閉控制臺(tái)。
在PocketPC上,應(yīng)用程序可以運(yùn)行,但PocketPC并不為諸如printf之類的輸出提供控制臺(tái)顯示的
功能。通過(guò)把驅(qū)動(dòng)程序console,dll放到PocketPC的Windows目錄里,可以為PocketPC增加控制臺(tái)支
持。驅(qū)動(dòng)程序從驅(qū)動(dòng)程序接口獲取輸入,創(chuàng)建屏幕窗口,打印輸出字符串??刂婆_(tái)啟動(dòng)程序可以從手持式
PC和嵌入式版本的WindowsCE獲得。
注1:雖然從技術(shù)上可以改變?nèi)肟邳c(diǎn)原型來(lái)匹配C的標(biāo)準(zhǔn)入口點(diǎn),但通常不值得這么麻煩的。
1.4Hello2
既然已經(jīng)有了基礎(chǔ),那么是時(shí)候把Hellol升級(jí)一下,至少應(yīng)該讓人可以看見它。因?yàn)楹芏郬indowsCE
系統(tǒng)沒有控制臺(tái)驅(qū)動(dòng)程序,Hello2創(chuàng)建一個(gè)消息框而不是用printf來(lái)顯示“Hell。CE”文字。Hello2的
程序如下表1-2所示:
列表1-2:Hello2,使用MessageBox函數(shù)的簡(jiǎn)單應(yīng)用程序
Hello2.cpp
〃=========================================================
//Hello2-AsimpleapplicationforWindowsCE
//WrittenforthebookProgrammingWindowsCE
//Copyright(C)2003DouglasBoling
#include"windows,h”
intWINAPIWinMain(IIINSTANCEhlnstance,HINSTANCEhPrevInstance,
LPWSTRIpCmdLine,intnCmdShow){
MessageBox(NULL,TEXT("HelloWorld"),TEXT(〃Hello2"),MBOK);
return0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南政法職業(yè)學(xué)院《WEB開發(fā)技術(shù)B(JAVA)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南醫(yī)學(xué)院《民族民間工藝傳承創(chuàng)新專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南外國(guó)語(yǔ)職業(yè)學(xué)院《乒乓球Ⅲ》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度電商平臺(tái)商家入駐服務(wù)合同6篇
- 二零二五年度工業(yè)產(chǎn)品廣告宣傳合同模板3篇
- 充填攪拌工操作規(guī)程(2篇)
- 2025版恒順達(dá)航運(yùn)公司水路運(yùn)輸合同(69型船舶含報(bào)關(guān)服務(wù))3篇
- 二零二五年度大棚種植基地轉(zhuǎn)讓及品牌合作合同3篇
- 二零二五年度商業(yè)秘密許可合同:某企業(yè)與合作伙伴關(guān)于商業(yè)秘密使用許可3篇
- 混凝土課程設(shè)計(jì)彈性方法
- 《動(dòng)物遺傳育種學(xué)》動(dòng)物醫(yī)學(xué)全套教學(xué)課件
- 基金會(huì)項(xiàng)目基金捐贈(zèng)立項(xiàng)表
- OCT青光眼及視野報(bào)告
- 人音版小學(xué)音樂四年級(jí)下冊(cè)課程綱要
- 初中語(yǔ)文人教七年級(jí)上冊(cè)朝花夕拾學(xué)生導(dǎo)讀單
- 山西鄉(xiāng)寧焦煤集團(tuán)臺(tái)頭煤焦公司礦井兼并重組整合項(xiàng)目初步設(shè)計(jì)安全專篇
- 弱電工程自檢報(bào)告
- DB33∕T 628.1-2021 交通建設(shè)工程工程量清單計(jì)價(jià)規(guī)范 第1部分:公路工程
- (完整版)八年級(jí)上綜合性學(xué)習(xí)-我們的互聯(lián)網(wǎng)時(shí)代-練習(xí)卷(含答案)
- 吉林省自學(xué)考試畢業(yè)生登記表
- 切線長(zhǎng)定理、弦切角定理、切割線定理、相交弦定理93336
評(píng)論
0/150
提交評(píng)論