zoukankan      html  css  js  c++  java
  • 开发识别屏幕方向的应用程序

    适用范围:
    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消息。

    注意: 如果应用程序有顶层窗口,或使用 SHHandleWMSettingChangeSHInitDialog 和 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:竖向图与横向图的屏幕刷新选项

    屏幕刷新选项

    竖向

    横向

    调整内容适应窗口大小

    重新调整日历网格单元的大小以适用工作区域。

     

    screen_orientation_awareness01

     

    screen_orientation_awareness02

    调整内容适应窗口大小

    “内存”设置控制面板将列表框重新设置为最大尺寸,然后重新确定它四周所有界面元素的位置。

     

    screen_orientation_awareness03

     

    screen_orientation_awareness04

    更改内容。

    “日历”在横向显示模式下一次只显示 8 个月份。

     

    screen_orientation_awareness05

     

    screen_orientation_awareness06

    更改布局。

    在横向显示模式下,Windows Media Player 的按钮出现在视频内容的一侧,不是在下端。

     

    screen_orientation_awareness07

     

    screen_orientation_awareness08

    设计正方形。

    日历“选项”对话框的整个内容在两种取向模式下都显示在 240x240 的正方形区域内。

     

    screen_orientation_awareness09

     

    screen_orientation_awareness10

    请记住,要尽可能的设计通用布局,这样应用程序可处理任意尺寸和任何宽高比的显示内容。这意味着尽可能避免分开设计横竖向模式。如果必须设计不同的横竖向布局模式,不要简单地因屏幕宽度大于屏幕高度,而假设应用程序能在横向模式下显示。例如,设备屏幕宽可能有 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_1IDC_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 所示:

    screen_orientation_awareness11

    图 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 的应用程序,要求取消关于屏幕方向的假设。使用本文提供的简单指南,您可以编写安装和运行于竖向、横向和正方形屏幕上的应用程序。

  • 相关阅读:
    第39周星期日中秋节杂记
    php array_multisort
    php统计近一周和近30天的用户数据
    什么是CGI、FastCGI、PHPCGI、PHPFPM、SpawnFCGI?
    PHP array_multisort()函数超详细理解
    微博第三方登陆请求授权出现错误码:21322(重定向地址不匹配)的解决方法
    艾伟_转载:C# 反射技术应用 狼人:
    艾伟_转载:HttpApplication的认识与加深理解 狼人:
    艾伟_转载:C# .NET学习经验总结 狼人:
    艾伟_转载:C# 委托的同步调用和异步调用 狼人:
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299174.html
Copyright © 2011-2022 走看看