[翻譯]-WinCE 程序設計 (3rd 版)--1.1 Windows CE有什麼不同之處

Windows CE有什麼不同之處
Windows CE有許多特性使得它不同於其它Windows 平臺。首先,運行Windows CE的系統,大多數可能不使用Intel x86兼容微處理器。實際上,Windows CE運行在4種不同的CPU系列裏:SHx, MIPS, ARM, 和 x86。幸運的是,開發環境幾乎將各種不同CPU的所有差異與程序員隔離開了。

Windows CE程序事先不能確定屏幕或鍵盤。Pocket PC設備有一個240*320的縱向屏幕,而其它系統具有傳統的480*240,640*240,640*480像素分辨率的橫向屏幕。一些嵌入式設備則根本沒有顯示器。一些目標設備可能不支持彩色,並且大部分Windows CE設備用觸摸屏替代了鼠標。一些在觸摸屏設備上,輕觸屏幕,表示鼠標左鍵點擊,沒有明顯的方法代表鼠標右鍵。爲了能處理右鍵,Windows 約定,當輕觸屏幕的時候,按下Alt鍵,由Windows CE程序把這個組合序列解釋爲鼠標右鍵點擊。

Windows CE設備具有更少的資源
運行Windows CE系統的目標設備上,各種資源變化極大。當寫一個標準Windows 程序的時候,程序員可以對目標設備做許多假定,並且設備幾乎都是IBM兼容機。目標設備通常有硬盤用於存儲,同時虛擬內存系統用硬盤作爲交換設備來模擬一個幾乎沒有數量限制的虛擬內存。程序員知道用戶有鍵盤、雙鍵鼠標以及可以當前支持256色、至少有800*600分辨率的顯示器。

Windows CE程序所運行的設備幾乎都沒有硬盤作爲大容量存儲。沒有硬盤不僅僅意味着沒有地方存儲大量文件,也意味着不能交換數據到磁盤上來創建虛擬內存。所以Windows CE程序幾乎總是在少量內存環境裏運行的。因爲資源缺乏,內存分配經常失敗。當空閒內存達到一個嚴重低的級別,Windows CE可能會自動終止一個程序。RAM的限制對Windows CE程序有很大的影響,並且是將現有的Windows應用程序移植到Windows CE過程涉及的主要挑戰之一。

Unicode
在寫Windows CE程序時,程序員可以使用的一個特性是Unicode. Unicode是一個字符編碼標準,使用16位表示一個字符,相對的,ASCII標準是用單個8位編碼一個字符。Unicode 允許相當簡單將程序移植到不同的國際市場,因爲世界上所有已知的字符都可以用65,536個Unicode 值裏的一個來表示。處理Unicode相對容易,只要避免假設字符串是用ASCII代表和字符是按單個字節存儲的。

使用Unicode的一個結果是每個字符佔2個字節而不是一個,字符串長了一倍。程序員必須小心計算緩衝區和字符串的長度。你不能再假設260字節可以存儲259個字符和一個0結尾符。作爲標準char數據類型的替代品,你應該使用TCHAR數據類型。TCHAR在MS Windows 95和98中定義爲char型,在Windows 2000,XP,Windows CE中,使用Unicode功能的程序裏,TCHAR定義爲unsigned short類型。這些類型定義,允許在基於ASCII和Unicode的操作系統上源代碼級的兼容。

新控件
Windows CE上有許多爲特殊環境設計的新控件。包括命令條、菜單條控件,提供類似菜單和工具條的功能,在具有更小屏幕的Windows CE設備上,這些爲了節省空間都合併一行裏。其它控件也爲Windows CE做了改進。Windows CE裏的編輯控件(edit control)可以設置爲自動將單詞首字母大寫,這對在無鍵盤的PDA上進行設計是很重要的。對於Windows 桌面版本里的控件,Windows CE則提供了大部分。例如,日期和時間調整控件、日曆控件使日曆和管理器應用程序更加適合諸如H/PC和Pocket PC等手持設備。其它Windows標準控件做了功能裁減,這反應了Windows CE特殊的硬件系統配置所具有的緊湊簡潔特性。

組件化
Windows CE編程中另一個需要注意的方面是Windows CE可以被微軟或OEM廠商分解和重新配置,以更好地適應目標市場或設備。Windows程序員通常只是檢查Windows 版本,看是否是Windows 95/98,Me系列或者2000,XP系列。通過獲得版本,程序員可以判斷哪些API函數可以使用。然而,Windows CE可以按無數種方式配置。

迄今爲止,Windows CE最流行的配置是Pocket PC。微軟定義了具體Windows CE組件集合,這些都體現在所有稱爲Pocket PC的設備上。然而,一些用Windows CE生產的OEM產品--PDA設備,並不叫Pocket PC。這些設備同Pocket PC設備在API上略微不同。如果你沒有意識到這一點,你很容易寫一個程序能運行在一個平臺,卻不能運行在另一個平臺。在嵌入式平臺上,OEM廠商決定包括什麼組件,並可以爲它特定的平臺創建一個SDK開發包。如果OEM廠商對第三方開發感興趣,它會爲它的設備提供一個可定製的SDK包。新的平臺不斷出現,它們有許多共同的地方,也有許多不同之處。程序員需要了解目標平臺,在嘗試用一個可能不被設備支持的功能集時,需要讓程序檢查在特殊平臺上什麼函數可用。

Win32子集
最後,因爲Windows CE比XP小很多,它不能像它大塊頭的兄弟XP那樣支持所有的函數調用。當你面對一個不支持打印功能的操作系統,比如原始模式下的Windows CE時,不要調用任何打印函數,Windows CE還去除了一些XP中支持的冗餘功能。雖然Windows CE可能不支持你喜歡的功能,但其它不同的函數集可能會工作的很好。有時Windows CE編程似乎主要是用Windows CE中稀少的API來找出實現一個特性的方式,雖然成千上萬的函數很少被調用。

發佈了2 篇原創文章 · 獲贊 1 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章