天天看點

開發識别螢幕方向的應用程式

适用範圍:

Windows Mobile™ 2003 第二版軟體

基于 Windows Mobile™ 的 Pocket PC

摘要:了解基于 Windows Mobile 的裝置如何在橫豎向模式下顯示、該功能的背景情況、為該功能開發移動應用程式的相關資訊、開發者指南中新的建議和示例。

請從 Microsoft 下載下傳中心下載下傳 Crossword.msi。

引言 

更改螢幕方向 

應用程式視窗如何識别螢幕方向 

重新整理螢幕内容 

RelayoutDialog 

原有應用程式的特性 

安裝警告消息 

結論 

Windows Mobile 2003 第二版軟體為 Pocket PC 引入了新的功能,使基于 Windows Mobile 的裝置可在橫豎向兩種模式下顯示。在有些裝置中,橫向是預設的顯示模式。此外,使用者将能在使用中讓螢幕在兩種方向之間切換,而不必重新設定裝置。

本文提供了有關該功能的背景資訊、并介紹了開發适用于橫豎向螢幕的移動應用程式的相關資訊。此外,還向開發者提供了新的指南(包括一些建議和示例)供參考。

傳回頁首 

通常,螢幕方向僅在使用者使用“螢幕方向”控制台,或按下某硬體按鈕來旋轉螢幕時才改變。

此外,應用程式也可通過 ChangeDisplaySettingsEx 函數以程式設計方式更改螢幕方向。該函數使用方法見 MSDN 中“Rotating the Content of the Screen”(旋轉螢幕内容的方向)一文。例如,如果使用的應用程式隻能在豎向模式下操作,則可通過程式設計改變螢幕方向。但是,如果螢幕方向的改變很突然,通過程式設計改變螢幕方向會讓使用者搞不清楚。應用程式應始終要求使用者在旋轉螢幕前确認顯示模式。

為了在豎向模式下顯示,将 dmDisplayOrientation 字段中的 DEVMODE 結構設定為 DMDO_0。對于右手橫向模式,使用 DMDO_270。對于左手橫向模式,使用 DMDO_90。

螢幕方向如果改變,或當“輸入面闆”出現時,應用程式的所有全屏頂層視窗都要适應新的取向。

注意: 如果視窗的上、左、右坐标在工作區域邊界之上或之外,該視窗被認為是全屏視窗。工作區域是标題欄下的整個螢幕區域。頂層視窗是無父視窗的視窗,即有一個 NULL父視窗。

如果視窗大小改變,視窗将收到 WM_SIZE 通知。WM_SIZE 消息的 lParam 參數的低位字指定了用戶端區域的新寬度,高位字指定了用戶端區域的新高度。應用程式應識别視窗大小的改變,并相應地更新視窗布局。此外,也應重新确定所包含任何子視窗的布局。

如果應用程式沒有全屏視窗,它收不到 WM_SIZE 通知。相反,它應在 wParam 參數設定為 SETTINGCHANGE_RESET 時監聽 WM_SETTINGCHANGE消息。

注意: 如果應用程式有頂層視窗,或使用 SHHandleWMSettingChange、SHInitDialog 和 SHFullScreen 方法建立了視窗,它會同時收到 WM_SIZE 和WM_SETTINGCHANGE 消息。但是,如果應用程式建立了子視窗,子視窗收不到 WM_SIZE 消息,即使子視窗是全屏視窗。

以下 WindowProc 模闆的代碼示例利用了 WM_SIZE 和 WM_SETTINGCHANGE 消息。

使用 Windows Mobile 2003 第二版軟體時,Pocket PC 的最小顯示區域是 240 個像素高和 240 個像素寬。程式設計人員應保證應用程式在最低配置下可用。常見問題是,菜單在豎向顯示模式下可能符合要求,但在橫向顯示模式不符合要求。如果這樣,需要在兩個菜單之間重新排列菜單項。

重新整理應用程式的螢幕内容時,可以使用下列 4 個程式設計選項:

調整内容适應視窗大小

更改内容

更改布局

設計所有布局通用的 240x240 正方形。

表 1 顯示了各方法(調整内容适應視窗大小有兩個示例)在 Pocket PC 的 Windows Mobile 軟體中重新整理螢幕内容的示例:

表 1:豎向圖與橫向圖的螢幕重新整理選項

螢幕重新整理選項

豎向

橫向

重新調整月曆網格單元的大小以适用工作區域。

“記憶體”設定控制台将清單框重新設定為最大尺寸,然後重新确定它四周所有界面元素的位置。

更改内容。

“月曆”在橫向顯示模式下一次隻顯示 8 個月份。

更改布局。

在橫向顯示模式下,Windows Media Player 的按鈕出現在視訊内容的一側,不是在下端。

設計正方形。

月曆“選項”對話框的整個内容在兩種取向模式下都顯示在 240x240 的正方形區域内。

請記住,要盡可能的設計通用布局,這樣應用程式可處理任意尺寸和任何寬高比的顯示内容。這意味着盡可能避免分開設計橫豎向模式。如果必須設計不同的橫豎向布局模式,不要簡單地因螢幕寬度大于螢幕高度,而假設應用程式能在橫向模式下顯示。例如,裝置螢幕寬可能有 321 個像素,而螢幕高有 320 個像素。在這樣的裝置上,應用程式也許能以橫豎向兩種模式顯示,應選擇應用程式最适用或首選的模式,這可能是豎向模式。

在 CrosswordSample 應用程式中,有一個函數是 RelayoutDialog,它可幫助重新設定、重新定位對話框中的子控件。例如,假設對話框有兩個對話模闆,一個用于橫向,一個用于豎向。如果這兩個模闆中的控件相同,且有相同的控件 ID,則可使用下列代碼作為 WM_SIZE 處理程式:

注意: 定義為 IDC_STATIC 的控件具有相同的控件 ID,是以如果有多個 IDC_STATIC控件,應當把它們重命名為 IDC_STATIC_1、IDC_STATIC_2等。

如果靜态控件在新布局中也發生了變換,RelayoutDialog 會同時更新靜态控件的文本和位圖。

當使用者在基于 Windows Mobile 2003 第二版的 Pocket PC 上運作舊應用程式時,使用者還保留了以往在豎向模式下的經驗,但豎向模式與橫向模式的經驗将有所不同。在橫向模式下,對話框的下半部分可能跑出螢幕底線之外。為了解決這個問題,系統将顯示一個垂直滾動條,允許使用者滾動螢幕。隻有存在常出現于豎向螢幕底部的控件時,才出現垂直滾動條。如果不出現,則不出現滾動條。

應用程式是否是“原有”應用程式,取決于可執行檔案頭中的子系統版本。預設情況下,使用 Windows Mobile 2003 SDK 編譯的應用程式中的子系統版本号為 4.20 或更低版本号,在将來版本的 Pocket PC SDK 中子系統版本号為 4.21 或更高版本号。子系統版本号為 4.20 或低于 4.20 時被認為是舊應用程式,可以看見滾動條。

知道了這種特性,使用者就能通過滾動條看見隐藏的圖像(假設不能直接看見的圖像和控件)。此外,您仍可以使用這種技術快速存儲或檢索圖像,但應在螢幕的左側完成這項工作。

理想情況下,對話框不應需要滾動條。為此,最好的方法是:使對話框控件在豎向模式下不被“輸入面闆”覆寫,故最好設計 240x240 的最低分辨率。

當在基于 Windows Mobile 的可旋轉螢幕的 Pocket PC 上安裝了舊應用程式時,将出現以下消息,如圖 11 所示:

圖 11 :安裝警告消息

這個對話告訴使用者,他們要使用的應用程式程式可能無法識别正方形螢幕旋轉,是以不能在橫向模式下正确顯示。隻有 VersionMin 值(它指定應用程式支援的最低作業系統版本号)低于 4.21,才顯示這個對話。

由于将 VersionMin 設定為 4.21 将阻止把應用程式安裝在基于舊 Windows Mobile 的 Pocket PC 上,是以建議把BuildMax 值(不常用)設定為表 2 中的值,禁用此消息:

表 2:BuildMax 值

0xA0000000

應用程式支援正方形螢幕(240x240 像素)。

0xC0000000

應用程式支援螢幕旋轉。

0xE0000000

應用程式支援正方形螢幕旋轉。

這些參數可通過編輯 INF 檔案的 [CEDevice] 部分(cabwiz 用來生成 CAB 檔案)來更改。有關 INF 檔案格式的詳細資訊,請參閱 MSDN 文檔。

開發基于 Windows Mobile 2003 第二版軟體的 Pocket PC 的應用程式,要求取消關于螢幕方向的假設。使用本文提供的簡單指南,您可以編寫安裝和運作于豎向、橫向和正方形螢幕上的應用程式。

繼續閱讀