準(zhǔn)備學(xué)習(xí) eVC
我的第一個(gè)項(xiàng)目
僅僅通過另一個(gè)簡(jiǎn)單的步驟創(chuàng)建項(xiàng)目
同中有異
制作一個(gè)聲音
暫時(shí)先到這里
歡迎回到大家非常熟悉的 MSDN Pocket PC 開發(fā)中心售貌,Larry Roof 和我將在這里輪流為您講解日益流行的手持設(shè)備的編程技巧漆弄。
當(dāng) Larry 帶著他的 iPAQ 走在大街上尋找無線 Internet 接入時(shí),像我這樣明智的人正在一邊查收電子郵件,一邊坐在本地星巴克舒適的椅子上儒溉,空間有 Volkswagen Beetle 那么大。這不是開玩笑 — 西雅圖令人神往的咖啡商場(chǎng)正忙于安裝 11Mbps 的無線 Internet 接入點(diǎn),這意味著我可以一只手拿著 double-tall latte 編寫這個(gè)特別的專欄梦谜,另一只手拿著油炸圈餅,同時(shí)感謝 Office XP 的語音識(shí)別功能袭景。
上個(gè)月唁桩,老好人 Larry 準(zhǔn)備使用令人崇拜的 Visual BASIC 語言闡述開發(fā)過程。您知道 — 它更像圖形冒險(xiǎn)程序耸棒,而不是真正的編程語言荒澡,它包含可愛的小圖片和對(duì)話框,您可以將它們拖過屏幕与殃。這次我們將使用真正的編程語言 — C++单山。不用擔(dān)心碍现,我們不會(huì)僅停留在簡(jiǎn)單的“Hello World”層面上。如果您是一位經(jīng)驗(yàn)豐富的 C++ 編碼人員米奸,那么您會(huì)非常吃驚:將您現(xiàn)有的知識(shí)應(yīng)用于這個(gè)令人興奮的新平臺(tái)是多么的容易爸缃印!如果您剛剛起步悴晰,或者很少接觸辩棒,那么您也可能印象深刻:編寫您的 Pocket PC 應(yīng)用程序是多么的簡(jiǎn)單啊膨疏!
如果您有 Windows ? 開發(fā)經(jīng)驗(yàn)一睁,那么您可能想知道,這個(gè) C++ 版本是否是某種“玩具”語言佃却。它會(huì)提供 Win32 ? 兼容的 API 嗎者吁?MFC 如何呢?ATL 如何呢饲帅?有什么樣的調(diào)試支持呢复凳?
好的,你們都會(huì)受到很好的款待灶泵。eVisual C++ ? 不是 C++ 的簡(jiǎn)裝版本育八,它是真正的 McCoy。此外赦邻,Pocket PC 操作系統(tǒng)也不是玩具 — 它是真正專業(yè)的操作系統(tǒng)髓棋,因此您可以認(rèn)為其中存在許多 Win32 API。MFC惶洲?沒問題按声。這個(gè)版本支持 MFC 并且也支持 ATL。然而有些功能已經(jīng)失去或減少了復(fù)雜度恬吕,您會(huì)倍感輕松签则。
準(zhǔn)備學(xué)習(xí) eVC
回想那些黑暗的歲月,大概看起來就像現(xiàn)在這樣铐料,Windows CE 開發(fā)套件由大量 Visual Studio 6 ? 開發(fā)套件的“插件”組成渐裂。實(shí)際上,需要多個(gè)插件 — Windows CE 工具包組件和每種您想開發(fā)的設(shè)備的軟件開發(fā)工具包 (SDK)钠惩。SDK 免費(fèi)柒凉,但 Windows CE 工具包需要付費(fèi)。也就是說妻柒,結(jié)合 Visual Studio 6 昂貴的專業(yè)版需求扛拨,為 CE 開發(fā)昂貴的業(yè)務(wù)。
當(dāng)發(fā)布 Pocket PC 設(shè)備時(shí)举塔,顯然有許多事情已經(jīng)重新考慮過了绑警。令我們高興的是求泰,這包含開發(fā)工具。勝于過去昂貴的系統(tǒng)计盒,現(xiàn)在有一種完全分開渴频、獨(dú)立版本的 Visual Studio 工具,它是為 Windows CE 開發(fā)單獨(dú)設(shè)計(jì)的工具北启,稱為 Microsoft eMbedded Visual Tools 3.0卜朗。SDK 仍然存在,您想開發(fā)的每個(gè)設(shè)備都需要一個(gè) SDK(即 Pocket PC咕村、Handheld PC 以及任何下一代設(shè)備)〕《ぃ現(xiàn)在可以從 https://msdn.microsoft.com/library/default.asp?url=/downloads/list/pocket2002.asp 免費(fèi)下載 eMbedded Visual 工具以及 C++ (eVC++) 和 Visual Basic (eVB) 這兩個(gè)版本。有三百多兆懈涛,下載過程會(huì)很長(zhǎng)逛万,因此可以考慮使用 CD-ROM 中的工具包∨疲可以在 Microsoft Evaluation & Resource Center 網(wǎng)站獲得全部詳細(xì)信息宇植。
您可能會(huì)想,“好吧埋心,實(shí)際上我沒有 Pocket PC指郁,但我仍然希望嘗試一下。您可以把您的 Pocket PC 借給我嗎拷呆?”當(dāng)然闲坎,我非常想把我的設(shè)備借給您,但是有更快的方法 — 模擬器洋腮。模擬器是一種運(yùn)行在您桌面上的 Pocket PC軟件版本箫柳。它的外觀和行為都像真的一樣 — 它甚至有許多標(biāo)準(zhǔn)的 Pocket PC 應(yīng)用程序,并且您可以編寫軟件并查看它的運(yùn)行情況啥供。好的,雖然它并不完美库糠,但您會(huì)發(fā)現(xiàn)它非常有用 — 特別是當(dāng)您的口袋中沒有 Pocket PC 時(shí)伙狐。
ms837876.road05232001-fig1(zh-cn,MSDN.10).gif
圖 1. Pocket PC 模擬器立刻使開發(fā)變得簡(jiǎn)單。
如果您將安裝一臺(tái) PC 來擔(dān)當(dāng)您的 Pocket PC 開發(fā)設(shè)備瞬欧,那么我強(qiáng)烈建議您使用 Windows 2000 作為您的操作系統(tǒng)贷屎,不要安裝任何以前的 Visual Studio 版本(Windows CE 或任何其他版本的 Windows)。不要企圖使用 Windows XP艘虎,甚至 Windows 98 或 95唉侄。雖然可以使用 Windows 98,但是有幾個(gè)“陷阱” — 您需要使用 Windows 98 SE野建,即使這樣属划,諸如模擬器這樣的重要工具也不能運(yùn)行恬叹。我使用 IBM Thinkpad 390 便攜式電腦作為我的開發(fā)機(jī)器。雖然它可能不是最新型的機(jī)器(IBM 可以隨時(shí)送我一臺(tái)新的 ThinkpadM小)绽昼,但是在 Windows 2000 下它運(yùn)行的很好,當(dāng)然须蜗,它可以移動(dòng)旅行到星巴克進(jìn)行咖啡因升級(jí)硅确。
說到咖啡,我現(xiàn)在會(huì)避開快飲明肮,直到您挑選出您的 PC 并且安裝完開發(fā)工具菱农。記住,在同一機(jī)器上完全可能既有 eVB Visual BASIC 工具又有 eVC Visual C++ 工具柿估,因此如果您上次遵循 Larry 的建議大莫,那么您的機(jī)器仍然可以良好運(yùn)行。
我的第一個(gè)項(xiàng)目
啟動(dòng) eMbedded Visual C++官份,會(huì)向您呈現(xiàn)出非常熟悉的 Visual C++ 6.0 版的畫面只厘。有一些變化,但是基本上沒變舅巷,如果您使用過 Visual C++ 6.0羔味,那么您會(huì)感覺就像遇到了一位老友。
現(xiàn)在是向您介紹向?qū)У臉O好時(shí)間 — 一組將會(huì)使您的生活變得方便快捷的功能钠右。向?qū)ьI(lǐng)您創(chuàng)建您的項(xiàng)目赋元,甚至帶領(lǐng)您進(jìn)階 — 您可以創(chuàng)建一個(gè)完整、獨(dú)立的“Hello World”程序飒房,信不信由您搁凸。這會(huì)越來越好,因?yàn)橐兄x模擬系統(tǒng)狠毯,為了查看所有運(yùn)行情況护糖,您甚至不需要擁有 Pocket PC。實(shí)際上 Microsoft 已經(jīng)特意使這方面無關(guān)痛癢嚼松。那么就由它去吧嫡良!
用六個(gè)簡(jiǎn)單的步驟創(chuàng)建一個(gè)項(xiàng)目
啟動(dòng) eVC。
從 File 菜單中選擇 New献酗。
您會(huì)看到下列對(duì)話框 — 或類似的東西 — 取決于您安裝的 SDK寝受。對(duì)話框列出了所有可能的不同程序類型,向?qū)е廊绾螏椭?/p>
選擇 WCE Pocket PC Application罕偎。
在 Project name: 框中輸入項(xiàng)目名稱很澄,例如 Helloworld。
單擊 OK喜滨。
ms837876.road05232001-fig2(zh-cn,MSDN.10).gif
圖 2. 可用的項(xiàng)目向?qū)?/p>
僅僅通過另一個(gè)簡(jiǎn)單的步驟創(chuàng)建項(xiàng)目
一旦您已經(jīng)確定了項(xiàng)目的名稱和類型辱志,那么您就可以決定要為您做多少工作。此時(shí)讓我們偷會(huì)兒懶培遵。
懶惰編程
選擇 A typical "Hello World" application浪藻。
單擊 Finish捐迫。
單擊 OK。
稍等爱葵,正在為您創(chuàng)建代碼施戴。
ms837876.road05232001-fig3(zh-cn,MSDN.10).gif
圖 3. 編程的懶惰方法
非常令人驚訝,這就是編寫一個(gè) Hello World 應(yīng)用程序的全部萌丈。如果您不相信我赞哗,那么可以運(yùn)行一下這個(gè)程序。 讓我們?cè)囍鴨?dòng)模擬器辆雾,它是一個(gè)有用的小實(shí)用工具肪笋。它并不完美,但它是免費(fèi)的度迂。
構(gòu)建您的程序
選擇 Win32 (WCE x86em) Release 或 Win32 (WCE x86em) Debug 作為活動(dòng)配置藤乙。在屏幕快照下面標(biāo)記下拉菜單。
從 Build 菜單中選擇 Execute Helloworld.exe惭墓。
將會(huì)加載模擬器并在屏幕上進(jìn)行顯示坛梁。酷腊凶!
然后會(huì)問您是否需要構(gòu)建您的程序划咐。選擇 Yes。
于是您的新程序就可以構(gòu)建钧萍、復(fù)制和啟動(dòng)了褐缠。
如果您的程序沒有啟動(dòng),請(qǐng)點(diǎn)擊模擬器的 Start 并找到 Helloworld.exe风瘦。
ms837876.road05232001-fig4(zh-cn,MSDN.10).gif
圖 4 :選擇活動(dòng)配置队魏。
ms837876.road05232001-fig5(zh-cn,MSDN.10).gif
圖 5 :令人感到驚奇的應(yīng)用程序
當(dāng)然,實(shí)際上不是每個(gè)人都需要這樣強(qiáng)大而缺少變化的程序弛秋,因此向?qū)?huì)向您提供幾個(gè)其他的選項(xiàng)器躏,例如,創(chuàng)建一個(gè)空項(xiàng)目或者創(chuàng)建一個(gè) MFC 應(yīng)用程序蟹略。我們將看到這些選項(xiàng),不用擔(dān)心遏佣。
同中有異
如果您瀏覽一下新項(xiàng)目的源代碼挖炬,同時(shí)您知道想要找什么,那么您就會(huì)看到所有相似的代碼片段状婶,它們組成了所有的 Windows 程序意敛。這有什么大驚小怪的呢馅巷?Pocket PC 只是一種通過 Shrink-o-Matic 光線傳遞信號(hào)的普通 PC 嗎?不草姻,這是不同的钓猬。或許最根本的不同在于沒有硬盤撩独,因此沒有長(zhǎng)時(shí)間的啟動(dòng)過程敞曹。當(dāng)您按下 Pocket PC 上的“On”按鈕時(shí)综膀,它將在一秒內(nèi)啟動(dòng)澳迫,因此它會(huì)在您需要它的任何時(shí)間出現(xiàn)。
當(dāng)您按下“Off”按鈕時(shí)剧劝,設(shè)備將進(jìn)入特殊的低能狀態(tài)橄登。屏幕關(guān)閉,CPU 休眠讥此,只使用微量的電池電流來保持內(nèi)存和一些內(nèi)部時(shí)鐘運(yùn)轉(zhuǎn)拢锹。
如果您按下重啟按鈕,那么設(shè)備將清除它的程序內(nèi)存萄喳,停止所有正在運(yùn)行的程序并重新啟動(dòng)卒稳。如果您移走電源(或者觸發(fā)了一個(gè)與設(shè)備特定鍵組合的完全重啟鍵),那么設(shè)備就會(huì)執(zhí)行完全重啟并恢復(fù)到它的出廠設(shè)置取胎。如果它會(huì)刪除您安裝的應(yīng)用程序(而不是 ROM 中內(nèi)置的應(yīng)用程序展哭,例如 Pocket Word)和您的數(shù)據(jù),那么無論如何您將不希望這些事情經(jīng)常發(fā)生闻蛀。
那么匪傍,我為什么要告訴您所有這些事情呢?“您喝醉了嗎觉痛?”我的經(jīng)理常常問我役衡。不 — 這是一種狀況:Pocket PC 與“真正”的 PC 不同之處在哪里,我們什么時(shí)候可以利用這種不同薪棒∈中可以這樣處理 — 我們將開發(fā)一個(gè)應(yīng)用程序,當(dāng)您打開 Pocket PC 時(shí)俐芯,它會(huì)發(fā)出美妙的聲音棵介。我的設(shè)計(jì)允許您增加優(yōu)美的聲音效果 — 例如 Hitchhiker's Guide to the Galaxy 這本書所制作的聲音(在 Douglas Adams 內(nèi)存中) — 當(dāng)您打開您的 iPAQ、Jornada 或 Cassiopeia 時(shí)吧史。
現(xiàn)在如果您已經(jīng)用過 Pocket PC邮辽,那么您可能發(fā)現(xiàn) Windows 下有個(gè)名為 Startup 的目錄。您可能已經(jīng)假定,當(dāng)設(shè)備啟動(dòng)后您希望建立它時(shí)吨述,這就是您放置應(yīng)用程序的地方岩睁。好的,這是陷阱 — 它不是這樣運(yùn)行的揣云。只有在重啟之后捕儒,Startup 目錄中的所有程序才能執(zhí)行,這意味著我們無法只通過將聲音效果程序放入 Startup 來播放我們的聲音效果邓夕×跤ǎ或許我們可以,但是只有在每次執(zhí)行重啟時(shí)它才播放翎迁,這相當(dāng)蹩腳栋猖。
下面是一種巧妙的方法。我們將使用 Windows CE 特定的函數(shù)汪榔,它可以在啟動(dòng)時(shí)創(chuàng)建一個(gè)程序蒲拉。我們創(chuàng)建的程序?qū)⑹且粋€(gè)可以播放聲音效果的程序。上面我說的都明白了嗎痴腌?好雌团,現(xiàn)在我們開始。
制作一個(gè)聲音
首先士聪,我們會(huì)編寫一個(gè)可以播放聲音示例的程序锦援。Pocket PC 可以使用名為 sndPlaySound() 的簡(jiǎn)單的 API 函數(shù)重新播放標(biāo)準(zhǔn) WAV 文件。保持我們一貫的懶惰風(fēng)格剥悟,我們將使用向?qū)?chuàng)建一個(gè)空項(xiàng)目灵寺,然后簡(jiǎn)單地調(diào)用 API。讓我們開始区岗。
創(chuàng)建您的 PlaySound 程序
關(guān)閉 embedded Visual Tools 中任何現(xiàn)有項(xiàng)目略板。
從 File 菜單中選擇 New。
選擇 WCE Pocket PC Application慈缔。
輸入程序名稱叮称,例如 PlaySound。
選擇 OK藐鹤。
選擇 A simple Windows CE application 作為項(xiàng)目類型瓤檐。
選擇 OK,創(chuàng)建您的項(xiàng)目娱节。
使用 File View 瀏覽構(gòu)成項(xiàng)目的源文件并選擇 PlaySound.cpp挠蛉。這是程序的核心,我們將在此處添加觸發(fā)聲音效果的代碼肄满。向?qū)б蔡砑幼⑨尅癙lace code here”碌秸,以免有什么疑問绍移。
因此悄窃,用下面這行代碼替換那一行:
sndPlaySound(L"Asterisk",SND_ASYNC);
sndPlaySound 函數(shù)帶有兩個(gè)參數(shù) — 第一個(gè)參數(shù)是播放的文件名稱讥电,第二個(gè)參數(shù)是一個(gè)標(biāo)志,告訴系統(tǒng)如何播放聲音轧抗。您可以從聯(lián)機(jī)幫助中獲得關(guān)于該函數(shù)的更多信息恩敌。我們可以依賴于此處存在的示例 Asterisk,它作為默認(rèn)聲音構(gòu)建到每個(gè)設(shè)備中横媚。實(shí)際上我們可以不寫文件名的“.wav”部分纠炮,假定它存在。還要檢查字母“L” — 它不是印刷錯(cuò)誤灯蝴,編譯器需要將它后面的文本看作 Unicode恢口,我們將在更新版本中介紹 Unicode。
如果您有一個(gè)真正的 Pocket PC穷躁,那么現(xiàn)在正好可以連接上并運(yùn)行 ActiveSync耕肩。如果您沒有,您也可以一直使用模擬器问潭,但是說實(shí)話猿诸,您現(xiàn)在真的想買一個(gè),對(duì)嗎狡忙?繼續(xù)梳虽,當(dāng)您訪問本地計(jì)算機(jī)存儲(chǔ)器時(shí),我們會(huì)一直等待您灾茁。
好的窜觉,然后呢?非常好北专。打開您的 Pocket PC 并將它連接上≠鞔欤現(xiàn)在您需要確定設(shè)備使用的處理器,因此您可以挑選正確的活動(dòng)配置逗余。您的設(shè)備會(huì)告訴您是否選擇 Start/Settings/System/About特咆,但是對(duì)于大多數(shù)普通的設(shè)備,下面的表格將十分方便:
展開表
設(shè)備
處理器
HP Jornada
SH3
Compaq iPAQ
ARM
Casio Cassiopeia
MIPS
使用這些信息來選擇正確的配置录粱。此時(shí)不用擔(dān)心選擇 Debug 還是 Release — 兩者都可以腻格。
構(gòu)建程序,它將自動(dòng)復(fù)制到您的設(shè)備中啥繁。當(dāng)您運(yùn)行它時(shí)菜职,您應(yīng)該聽到該示例。如果沒有聽到旗闽,那么請(qǐng)檢查您是否開啟了您設(shè)備上的音量控制酬核,您是否正確拼寫了“Asterisk”蜜另。(不要笑 — 我的老板常常指責(zé)我的拼寫,作為一個(gè)技術(shù)作者嫡意,這可能會(huì)傷害我的自信心举瑰。還用懷疑嗎,我已經(jīng)情感崩潰了蔬螟,對(duì)嗎此迅?)
現(xiàn)在我將編寫一個(gè)程序,它在啟動(dòng)時(shí)執(zhí)行該 PlaySound 程序旧巾。請(qǐng)關(guān)閉 PlaySound 項(xiàng)目耸序,然后創(chuàng)建另一個(gè)新的 "A simple Windows CE application" 類型的項(xiàng)目。調(diào)用這個(gè)“PlayOn”鲁猩,此次將下列代碼行添加到 PlayOn.cpp 文件中:
CeRunAppAtEvent(L"Playsound",NOTIFICATION_EVENT_WAKEUP);
該函數(shù)是 Windows CE 特定的函數(shù)(名稱開頭的 Ce 應(yīng)該告訴您)坎怪,當(dāng)它收到一個(gè)特定的通知消息時(shí),實(shí)際上它只是運(yùn)行指定的應(yīng)用程序廓握。相關(guān)的消息是 NOTIFICATION_EVENT_WAKEUP搅窿,當(dāng)設(shè)備開啟時(shí)發(fā)出此消息。
當(dāng)您運(yùn)行該程序時(shí)疾棵,您只需運(yùn)行一次戈钢,系統(tǒng)會(huì)一直準(zhǔn)備著 — 關(guān)閉,然后開啟是尔,然后呢殉了?然后呢?您將看到一個(gè)錯(cuò)誤信息拟枚。Playsound.exe 應(yīng)用程序必須在 Windows/ 目錄中薪铜,而不是在 Windows/Start Menu 目錄中,這是默認(rèn)放置該應(yīng)用程序的地方恩溅。從 Pocket PC 的文件資源管理器 (File Explorer) 中找到 Playsound.exe隔箍,然后將它剪切并粘貼到主 Windows 目錄中。現(xiàn)在關(guān)閉脚乡,然后重啟蜒滩,瞧! — 觸發(fā)了聲音示例奶稠。
現(xiàn)在可能出現(xiàn)了兩個(gè)問題俯艰。首先,您如何能夠使用自己的示例呢锌订,其次您如何能夠阻止它們?cè)谀看伍_啟設(shè)備時(shí)發(fā)生呢竹握。
使用您自己的示例比較容易。隨便找一個(gè) WAV 文件辆飘,然后將它復(fù)制到 Pocket PC 中啦辐。不要試圖使用任何一種非常古怪的采樣速率谓传,然后更改 Playsound.exe 程序以反映新文件名。
每次都阻止系統(tǒng)運(yùn)行 PlaySound.exe 應(yīng)用程序芹关,這有點(diǎn)棘手续挟。通知系統(tǒng)將幸免于熱重啟,因此您需要編寫另一個(gè)應(yīng)用程序充边。創(chuàng)建該程序并調(diào)用 PlayOff庸推,然后添加下面一行代碼:
CeRunAppAtEvent(L"Playsound",NOTIFICATION_EVENT_NONE);
這一行抵消了現(xiàn)有的通知。運(yùn)行一次浇冰,自動(dòng)啟動(dòng)功能會(huì)禁用。
暫時(shí)先到這里
我希望 eMbedded Visual C++ 的這個(gè)介紹對(duì)您恰好合適聋亡。通常肘习,在無足輕重與紛繁蕪雜之間找到平衡是非常困難的。如果您認(rèn)為我會(huì)在一個(gè)方向而不是另一個(gè)方向迷路坡倔,那么請(qǐng)隨時(shí)給我發(fā)郵件漂佩,這樣可能會(huì)有助于您產(chǎn)生將來的專欄。謝謝閱讀本文罪塔!
John Kennedy 白天是 Visual C++ 組的技術(shù)撰稿人/程序員投蝉,晚上則過著 Pocket PC 開發(fā)人員的神秘生活。
Larry Roof 是 tonked 的合作伙伴征堪,這是一家專門從事移動(dòng)解決方案開發(fā)和培訓(xùn)的公司瘩缆。他是 Professional Visual Basic Windows CE 一書的作者,可以從 Wrox Press 獲得此書佃蚜。