發布日期 : 8/17/2004 | 更新日期 : 8/17/2004
Microsoft
適用范圍:
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 消息。
switch (uMessage)
{
case WM_SIZE:
// 重新計算所有子窗口的布局;重新設置
// 列出視圖和編輯框的大小,重新確定按鈕、
// 靜態文字和其他控件的位置。
break;
case WM_SETTINGCHANGE:
if (SETTINGCHANGE_RESET == wParam) {
// 屏幕方向改變。此時
// 執行 WM_SIZE 不能執行的處理,
// 如重新調整全屏子窗口的大小,對
// 頂層窗口調用 MoveWindow 等等。
// 如果不需要處理 WM_SETTINGCHANGE 消息,可以
// 忽略它。
}
break;
}
刷新屏幕內容
使用 Windows Mobile 2003 第二版軟件時,Pocket PC 的最小顯示區域是 240 個像素高和 240 個像素寬。編程人員應保證應用程序在最低配置下可用。常見問題是,菜單在豎向顯示模式下可能符合要求,但在橫向顯示模式不符合要求。如果這樣,需要在兩個菜單之間重新排列菜單項。
刷新應用程序的屏幕內容時,可以使用下列 4 個編程選項:
-
調整內容適應窗口大小
-
更改內容
-
更改布局
-
設計所有布局通用的 240x240 正方形。
表 1 顯示了各方法(調整內容適應窗口大小有兩個示例)在 Pocket PC 的 Windows Mobile 軟件中刷新屏幕內容的示例:
表 1:豎向圖與橫向圖的屏幕刷新選項
屏幕刷新選項
|
豎向
|
橫向
|
調整內容適應窗口大小
重新調整日歷網格單元的大小以適用工作區域。
|
|
|
調整內容適應窗口大小
“內存”設置控制面板將列表框重新設置為最大尺寸,然后重新確定它四周所有界面元素的位置。
|
|
|
更改內容。
“日歷”在橫向顯示模式下一次只顯示 8 個月份。
|
|
|
更改布局。
在橫向顯示模式下,Windows Media Player 的按鈕出現在視頻內容的一側,不是在下端。
|
|
|
設計正方形。
日歷“選項”對話框的整個內容在兩種取向模式下都顯示在 240x240 的正方形區域內。
|
|
|
請記住,要盡可能的設計通用布局,這樣應用程序可處理任意尺寸和任何寬高比的顯示內容。這意味著盡可能避免分開設計橫豎向模式。如果必須設計不同的橫豎向布局模式,不要簡單地因屏幕寬度大于屏幕高度,而假設應用程序能在橫向模式下顯示。例如,設備屏幕寬可能有 321 個像素,而屏幕高有 320 個像素。在這樣的設備上,應用程序也許能以橫豎向兩種模式顯示,應選擇應用程序最適用或首選的模式,這可能是豎向模式。
RelayoutDialog
在 CrosswordSample 應用程序中,有一個函數是 RelayoutDialog,它可幫助重新設置、重新定位對話框中的子控件。例如,假設對話框有兩個對話模板,一個用于橫向,一個用于豎向。如果這兩個模板中的控件相同,且有相同的控件 ID,則可使用下列代碼作為 WM_SIZE 處理程序:
case WM_SIZE:
RelayoutDialog(g_hInst, hDlg, InWideMode() ?
MAKEINTRESOURCE(IDD_TOOLS_OPTIONS_1_WIDE) :
MAKEINTRESOURCE(IDD_TOOLS_OPTIONS_1));
注意: 定義為 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 的應用程序,要求取消關于屏幕方向的假設。使用本文提供的簡單指南,您可以編寫安裝和運行于豎向、橫向和正方形屏幕上的應用程序。