• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 2, 文章 - 73, 評(píng)論 - 60, 引用 - 0
            數(shù)據(jù)加載中……

            開發(fā)識(shí)別屏幕方向的應(yīng)用程序

            開發(fā)識(shí)別屏幕方向的應(yīng)用程序
            發(fā)布日期 : 8/17/2004 | 更新日期 : 8/17/2004

            Microsoft

            適用范圍:
            Windows Mobile™ 2003 第二版軟件
            基于 Windows Mobile™ 的 Pocket PC

            摘要:了解基于 Windows Mobile 的設(shè)備如何在橫豎向模式下顯示、該功能的后臺(tái)情況、為該功能開發(fā)移動(dòng)應(yīng)用程序的相關(guān)信息、開發(fā)者指南中新的建議和示例。

            請(qǐng)從 Microsoft 下載中心下載 Crossword.msi

            本頁(yè)內(nèi)容

            引言 引言
            更改屏幕方向 更改屏幕方向
            應(yīng)用程序窗口如何識(shí)別屏幕方向 應(yīng)用程序窗口如何識(shí)別屏幕方向
            刷新屏幕內(nèi)容 刷新屏幕內(nèi)容
            RelayoutDialog RelayoutDialog
            原有應(yīng)用程序的特性 原有應(yīng)用程序的特性
            安裝警告消息 安裝警告消息
            結(jié)論 結(jié)論

            引言

            Windows Mobile 2003 第二版軟件為 Pocket PC 引入了新的功能,使基于 Windows Mobile 的設(shè)備可在橫豎向兩種模式下顯示。在有些設(shè)備中,橫向是默認(rèn)的顯示模式。此外,用戶將能在使用中讓屏幕在兩種方向之間切換,而不必重新設(shè)置設(shè)備。

            本文提供了有關(guān)該功能的后臺(tái)信息、并介紹了開發(fā)適用于橫豎向屏幕的移動(dòng)應(yīng)用程序的相關(guān)信息。此外,還向開發(fā)者提供了新的指南(包括一些建議和示例)供參考。

            更改屏幕方向

            通常,屏幕方向僅在用戶使用“屏幕方向”控制面板,或按下某硬件按鈕來(lái)旋轉(zhuǎn)屏幕時(shí)才改變。

            此外,應(yīng)用程序也可通過(guò) ChangeDisplaySettingsEx 函數(shù)以編程方式更改屏幕方向。該函數(shù)使用方法見(jiàn) MSDN 中“Rotating the Content of the Screen”(旋轉(zhuǎn)屏幕內(nèi)容的方向)一文。例如,如果使用的應(yīng)用程序只能在豎向模式下操作,則可通過(guò)編程改變屏幕方向。但是,如果屏幕方向的改變很突然,通過(guò)編程改變屏幕方向會(huì)讓用戶搞不清楚。應(yīng)用程序應(yīng)始終要求用戶在旋轉(zhuǎn)屏幕前確認(rèn)顯示模式。

            為了在豎向模式下顯示,將 dmDisplayOrientation 字段中的 DEVMODE 結(jié)構(gòu)設(shè)置為 DMDO_0。對(duì)于右手橫向模式,使用 DMDO_270。對(duì)于左手橫向模式,使用 DMDO_90。

            應(yīng)用程序窗口如何識(shí)別屏幕方向

            屏幕方向如果改變,或當(dāng)“輸入面板”出現(xiàn)時(shí),應(yīng)用程序的所有全屏頂層窗口都要適應(yīng)新的取向。

            注意: 如果窗口的上、左、右坐標(biāo)在工作區(qū)域邊界之上或之外,該窗口被認(rèn)為是全屏窗口。工作區(qū)域是標(biāo)題欄下的整個(gè)屏幕區(qū)域。頂層窗口是無(wú)父窗口的窗口,即有一個(gè) NULL 父窗口。

            如果窗口大小改變,窗口將收到 WM_SIZE 通知。WM_SIZE 消息的 lParam 參數(shù)的低位字指定了客戶端區(qū)域的新寬度,高位字指定了客戶端區(qū)域的新高度。應(yīng)用程序應(yīng)識(shí)別窗口大小的改變,并相應(yīng)地更新窗口布局。此外,也應(yīng)重新確定所包含任何子窗口的布局。

            如果應(yīng)用程序沒(méi)有全屏窗口,它收不到 WM_SIZE 通知。相反,它應(yīng)在 wParam 參數(shù)設(shè)置為 SETTINGCHANGE_RESET 時(shí)監(jiān)聽 WM_SETTINGCHANGE消息。

            注意: 如果應(yīng)用程序有頂層窗口,或使用 SHHandleWMSettingChangeSHInitDialogSHFullScreen 方法創(chuàng)建了窗口,它會(huì)同時(shí)收到 WM_SIZEWM_SETTINGCHANGE 消息。但是,如果應(yīng)用程序創(chuàng)建了子窗口,子窗口收不到 WM_SIZE 消息,即使子窗口是全屏窗口。

            以下 WindowProc 模板的代碼示例利用了 WM_SIZEWM_SETTINGCHANGE 消息。

                switch (uMessage)
                {
                    case WM_SIZE:
                        // 重新計(jì)算所有子窗口的布局;重新設(shè)置
                        // 列出視圖和編輯框的大小,重新確定按鈕、
                        // 靜態(tài)文字和其他控件的位置。
                        break;
                    case WM_SETTINGCHANGE:
                        if (SETTINGCHANGE_RESET == wParam) {
                            // 屏幕方向改變。此時(shí)
                            // 執(zhí)行 WM_SIZE 不能執(zhí)行的處理,
            // 如重新調(diào)整全屏子窗口的大小,對(duì)
            // 頂層窗口調(diào)用 MoveWindow 等等。
            // 如果不需要處理 WM_SETTINGCHANGE 消息,可以
            // 忽略它。
                        }
                        break;
                  }
            

            刷新屏幕內(nèi)容

            使用 Windows Mobile 2003 第二版軟件時(shí),Pocket PC 的最小顯示區(qū)域是 240 個(gè)像素高和 240 個(gè)像素寬。編程人員應(yīng)保證應(yīng)用程序在最低配置下可用。常見(jiàn)問(wèn)題是,菜單在豎向顯示模式下可能符合要求,但在橫向顯示模式不符合要求。如果這樣,需要在兩個(gè)菜單之間重新排列菜單項(xiàng)。

            刷新應(yīng)用程序的屏幕內(nèi)容時(shí),可以使用下列 4 個(gè)編程選項(xiàng):

            • 調(diào)整內(nèi)容適應(yīng)窗口大小

            • 更改內(nèi)容

            • 更改布局

            • 設(shè)計(jì)所有布局通用的 240x240 正方形。

            1 顯示了各方法(調(diào)整內(nèi)容適應(yīng)窗口大小有兩個(gè)示例)在 Pocket PC 的 Windows Mobile 軟件中刷新屏幕內(nèi)容的示例:

            表 1:豎向圖與橫向圖的屏幕刷新選項(xiàng)

            屏幕刷新選項(xiàng)

            豎向

            橫向

            調(diào)整內(nèi)容適應(yīng)窗口大小

            重新調(diào)整日歷網(wǎng)格單元的大小以適用工作區(qū)域。

             

            screen_orientation_awareness01

             

            screen_orientation_awareness02

            調(diào)整內(nèi)容適應(yīng)窗口大小

            “內(nèi)存”設(shè)置控制面板將列表框重新設(shè)置為最大尺寸,然后重新確定它四周所有界面元素的位置。

             

            screen_orientation_awareness03

             

            screen_orientation_awareness04

            更改內(nèi)容。

            “日歷”在橫向顯示模式下一次只顯示 8 個(gè)月份。

             

            screen_orientation_awareness05

             

            screen_orientation_awareness06

            更改布局。

            在橫向顯示模式下,Windows Media Player 的按鈕出現(xiàn)在視頻內(nèi)容的一側(cè),不是在下端。

             

            screen_orientation_awareness07

             

            screen_orientation_awareness08

            設(shè)計(jì)正方形。

            日歷“選項(xiàng)”對(duì)話框的整個(gè)內(nèi)容在兩種取向模式下都顯示在 240x240 的正方形區(qū)域內(nèi)。

             

            screen_orientation_awareness09

             

            screen_orientation_awareness10

            請(qǐng)記住,要盡可能的設(shè)計(jì)通用布局,這樣應(yīng)用程序可處理任意尺寸和任何寬高比的顯示內(nèi)容。這意味著盡可能避免分開設(shè)計(jì)橫豎向模式。如果必須設(shè)計(jì)不同的橫豎向布局模式,不要簡(jiǎn)單地因屏幕寬度大于屏幕高度,而假設(shè)應(yīng)用程序能在橫向模式下顯示。例如,設(shè)備屏幕寬可能有 321 個(gè)像素,而屏幕高有 320 個(gè)像素。在這樣的設(shè)備上,應(yīng)用程序也許能以橫豎向兩種模式顯示,應(yīng)選擇應(yīng)用程序最適用或首選的模式,這可能是豎向模式。

            RelayoutDialog

            在 CrosswordSample 應(yīng)用程序中,有一個(gè)函數(shù)是 RelayoutDialog,它可幫助重新設(shè)置、重新定位對(duì)話框中的子控件。例如,假設(shè)對(duì)話框有兩個(gè)對(duì)話模板,一個(gè)用于橫向,一個(gè)用于豎向。如果這兩個(gè)模板中的控件相同,且有相同的控件 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,所以如果有多個(gè) IDC_STATIC控件,應(yīng)當(dāng)把它們重命名為 IDC_STATIC_1IDC_STATIC_2等。

            如果靜態(tài)控件在新布局中也發(fā)生了變換,RelayoutDialog 會(huì)同時(shí)更新靜態(tài)控件的文本和位圖。

            原有應(yīng)用程序的特性

            當(dāng)用戶在基于 Windows Mobile 2003 第二版的 Pocket PC 上運(yùn)行舊應(yīng)用程序時(shí),用戶還保留了以往在豎向模式下的經(jīng)驗(yàn),但豎向模式與橫向模式的經(jīng)驗(yàn)將有所不同。在橫向模式下,對(duì)話框的下半部分可能跑出屏幕底線之外。為了解決這個(gè)問(wèn)題,系統(tǒng)將顯示一個(gè)垂直滾動(dòng)條,允許用戶滾動(dòng)屏幕。只有存在常出現(xiàn)于豎向屏幕底部的控件時(shí),才出現(xiàn)垂直滾動(dòng)條。如果不出現(xiàn),則不出現(xiàn)滾動(dòng)條。

            應(yīng)用程序是否是“原有”應(yīng)用程序,取決于可執(zhí)行文件頭中的子系統(tǒng)版本。默認(rèn)情況下,使用 Windows Mobile 2003 SDK 編譯的應(yīng)用程序中的子系統(tǒng)版本號(hào)為 4.20 或更低版本號(hào),在將來(lái)版本的 Pocket PC SDK 中子系統(tǒng)版本號(hào)為 4.21 或更高版本號(hào)。子系統(tǒng)版本號(hào)為 4.20 或低于 4.20 時(shí)被認(rèn)為是舊應(yīng)用程序,可以看見(jiàn)滾動(dòng)條。

            知道了這種特性,用戶就能通過(guò)滾動(dòng)條看見(jiàn)隱藏的圖像(假設(shè)不能直接看見(jiàn)的圖像和控件)。此外,您仍可以使用這種技術(shù)快速存儲(chǔ)或檢索圖像,但應(yīng)在屏幕的左側(cè)完成這項(xiàng)工作。

            理想情況下,對(duì)話框不應(yīng)需要滾動(dòng)條。為此,最好的方法是:使對(duì)話框控件在豎向模式下不被“輸入面板”覆蓋,故最好設(shè)計(jì) 240x240 的最低分辨率。

            安裝警告消息

            當(dāng)在基于 Windows Mobile 的可旋轉(zhuǎn)屏幕的 Pocket PC 上安裝了舊應(yīng)用程序時(shí),將出現(xiàn)以下消息,如 11 所示:

            screen_orientation_awareness11

            11 :安裝警告消息

            這個(gè)對(duì)話告訴用戶,他們要使用的應(yīng)用程序程序可能無(wú)法識(shí)別正方形屏幕旋轉(zhuǎn),因此不能在橫向模式下正確顯示。只有 VersionMin 值(它指定應(yīng)用程序支持的最低操作系統(tǒng)版本號(hào))低于 4.21,才顯示這個(gè)對(duì)話。

            由于將 VersionMin 設(shè)置為 4.21 將阻止把應(yīng)用程序安裝在基于舊 Windows Mobile 的 Pocket PC 上,所以建議把BuildMax 值(不常用)設(shè)置為表 2 中的值,禁用此消息:

            表 2:BuildMax 值

            0xA0000000

            應(yīng)用程序支持正方形屏幕(240x240 像素)。

            0xC0000000

            應(yīng)用程序支持屏幕旋轉(zhuǎn)。

            0xE0000000

            應(yīng)用程序支持正方形屏幕旋轉(zhuǎn)。

            這些參數(shù)可通過(guò)編輯 INF 文件的 [CEDevice] 部分(cabwiz 用來(lái)生成 CAB 文件)來(lái)更改。有關(guān) INF 文件格式的詳細(xì)信息,請(qǐng)參閱 MSDN 文檔。

            結(jié)論

            開發(fā)基于 Windows Mobile 2003 第二版軟件的 Pocket PC 的應(yīng)用程序,要求取消關(guān)于屏幕方向的假設(shè)。使用本文提供的簡(jiǎn)單指南,您可以編寫安裝和運(yùn)行于豎向、橫向和正方形屏幕上的應(yīng)用程序。

             

            posted on 2008-01-23 11:30 郭天文 閱讀(816) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows Mobile

            九九久久精品无码专区| 99蜜桃臀久久久欧美精品网站| 欧美精品久久久久久久自慰| 色诱久久久久综合网ywww| 一级做a爰片久久毛片人呢| 久久久WWW成人免费精品| 97精品伊人久久大香线蕉| 久久婷婷五月综合国产尤物app| 九九久久99综合一区二区| 人人狠狠综合88综合久久| 久久精品国产亚洲av高清漫画 | 久久成人国产精品一区二区| 久久久国产一区二区三区| 久久午夜无码鲁丝片秋霞 | 久久久无码精品亚洲日韩软件| 欧美久久久久久| 国产精品美女久久久久网| 久久久久国产亚洲AV麻豆| 久久综合久久性久99毛片| 午夜天堂精品久久久久| 国内精品久久久久久久久电影网| 色欲综合久久中文字幕网| 色婷婷久久综合中文久久一本| 久久水蜜桃亚洲av无码精品麻豆 | 久久精品国产精品亜洲毛片| 九九精品99久久久香蕉| 蜜桃麻豆www久久国产精品| 久久国产精品成人免费| 亚洲精品蜜桃久久久久久| 久久青青国产| 国产99久久久国产精品~~牛| 久久无码人妻一区二区三区 | 成人久久精品一区二区三区 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 狠狠色婷婷久久综合频道日韩| 久久精品国产亚洲av瑜伽| 亚洲狠狠久久综合一区77777 | 免费国产99久久久香蕉| 精品久久久久久亚洲| 久久久老熟女一区二区三区| 中文精品久久久久人妻不卡|