看看上面这个Emulator的截图吧,有WM 2003se、5.0、6.0的,有pocket PC、smartphone、classic、professional的,有英文的,也有中文的,分辨率、DPI都各有区别。在这么多眼花缭乱的WM平台上开发应用程序,UI的设计,特别是compatible的UI策略,是很重要的。之前的Docking and Anchoring Controls on Windows Mobile也是其中一点。在MSDN上看到了这个方面比较有指导意义的文章Create Compatible User Interfaces,觉得有必要和大家共同探讨一下。

1. 通用UI策略

l 不要在编写代码的时候将屏幕信息设定死,取而代之的是使用GetSystemMetrics or GetClientRect来获取屏幕当前的size。同样,在托管代码中,使用Form的Width、Height属性。

l 处理Resize事件。在设备加载程序、动态加载界面或者改变屏幕方向的时候,我们要考Form的宽度与高度等信息。

l 使用单独的控件。如果有可能的话,尽量使用单独的控件来覆盖整个屏幕,例如ListView或者TreeView。

l 控件重新布局。屏幕从portrait模式改变到landscape模式,或者从landscape模式改变到portrait模式时,我们要考虑改变控件的布局。当然,最简单的方法就是使用Anchor and Dock属性。下图1就展示了这个微妙的差别:

图1:控件使用Anchor and Dock属性的差别

如果我们进行native code开发,就可以参考MSDN上的Introducing Screenlib来完成。

l 测试的时候,尽量使用较多的Emulator,并且要在portrait模式和landscape模式间切换,来考验我们写的应用程序性能。

2. 字体和字号

使用SHGetUIMetrics函数来检测用户选择的字体大小,并且在应用程序中使用相同的字体,以使用户获得一致的体验。应用程序可以监听SH_UIMETRIC_CHANGE消息来获得用户改变默认设置的事件。

3. 用户界面的颜色

所有的Form控件都会适应当前的主题(Theme),当然,如果我们使用GDI来重绘的话,最好得到当前系统使用的主题信息,然后对控件使用一致的策略。

4. Soft Key策略

一般来说,左边的Soft Key是执行单条常用的命令,而非弹出一个菜单。右边的Soft Key一般是弹出菜单,并且将最常用的选项放在第一行,进行高亮显示。同时,避免使用多于两级的子菜单。

5. 程序图标

和PC的应用程序不同,Windows Mobile使用不同大小的Icon。一般说来,我们在资源中包含不同分辨率下的程序图标,并且在程序运行的时候来检测,然后决定加载项。可以参考windows mobile blog: Which icon sizes should I use in my application?。Fox23的Blog上也说明了这点。

6. 避免使用位图

由于windows mobile设备的屏幕大小、分辨率和形状等各不相同,所以会导致图像显示效果的不同。同一张位图在“96 DPI, 320x240”和“192 DPI, 480x480”的机子上,显示效果如下图2所示:

图2:同一张位图在不同分辨率屏幕上的效果

可以看到,在高分辨率下,同一张位图并不适合屏幕。

参考文献:Create Compatible User Interfaces/Introducing Screenlib/ Which icon sizes should I use in my application?。

转载于:https://blog.51cto.com/xyzlmn/819965

创建Windows Mobile上兼容性好的UI 程序相关推荐

  1. windows mobile开发循序渐进(4)移动应用程序的数据存储之本地数据存储第二篇

    之所以分解来写,是因为在写的过程中会有些穿插的工作,希望能够尽量写的更细节一些. 上篇说的是本地存储的XML和DataSet之间的交互,现在我们来看看windows mobile 是如何与数据库进行交 ...

  2. windows mobile开发循序渐进(5)移动应用程序与webservice之间的数据交互

    上篇遗留问题: 在使用数据库方面,egmkang和瑞雪年给了不少建议,我也测试了SQLite的使用,在对SQL Server CE的查询方面,egmkang的性能方面的测试代码也运行了一遍,很感谢你们 ...

  3. 在32位WINDOWS系统上开发64位应用程序

    在32位WINDOWS系统上开发64位应用程序 创建 2011-9-2 有些时候需要开发WINDOWS 64位应用程序,但不想安装64位操作系统,所以需要在32位系统下开发64位应用.其步骤并不复杂. ...

  4. java for mobil,Windows Mobile上的Java(ME)

    Does anyone have experience deploying Java ME apps to Windows Mobile? What are the high-level steps ...

  5. Windows Mobile 上显示png,jpg,bmp等图片

    不只是可以显示png,jpg,bmp等等都可以,gif也行,不过只能显示单帧. 一种方法是用IImagingFactory 中的CreateImageFromFile 先看看msdn: This me ...

  6. 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)

    在 Windows 系统中,管理员权限和非管理员权限运行的程序之间不能使用 Windows 提供的通信机制进行通信.对于部分文件夹(ProgramData),管理员权限创建的文件是不能以非管理员权限修 ...

  7. 转贴下windows mobile上常用的注册表优化选项

    在修改前请大家先备份好注册表!以防万一 一.提高系统运行速度     打开HKEY_LOCAL_MACHINE/System/StorageManager/FATFS查看值/EnableCache:将 ...

  8. 【转载】windows mobile 上隐藏和关闭X以及OK的处理

    [转自]http://blog.csdn.net/czbever 1.隐藏X:  在WM_CREATE里  SetWindowLong(hWnd,GWL_STYLE,WS_NONAVDONEBUTTO ...

  9. 在Windows Mobile上运行J2SE/J2ME!!!!!

    本来来自http://blog.csdn.net/hellogv/ 有没有想过,在PC运行的J2SE程序可以在WINCE/PPC2003以上的系统运行? 现在外国的开源社区已经实现了做出来了这个WIN ...

最新文章

  1. 数据结构与算法:17 图
  2. 推荐一个从高中就开始自学IT的大佬
  3. 小程序之通过参数改变标签
  4. 特斯拉马斯克直聘AI人才:不看学历看能力
  5. Vue—上手实践—环境搭建
  6. 自然语言处理----处理原始文本
  7. 又一起.NET程序挂死, 用 Windbg 抽丝剥茧式的真实案例分析
  8. VM虚拟机中CentOS6.4操作系统安装一
  9. springboot项目实例_Springboot项目的接口防刷的实例
  10. Python打印指定日期日历
  11. C++递归删除非空目录所有文件
  12. Vivado2018.1安装教程
  13. Waymo上线11万美元挑战赛,福特开放1.6TB自动驾驶数据
  14. JAVA——判断多选题的对错
  15. Oracle VM VirtualBox 打开Ubuntu出现0x00000000指令引用的0x00000000内存,该内存不能为written的解决方案
  16. 老佛爷“驾到”潮爆的IT Bag也来了(组图)
  17. List集合中 中contains方法的使用详解
  18. linux开放外部端口访问
  19. springboot发送邮件-163邮箱
  20. Android Accessibility(辅助功能) 学习

热门文章

  1. linux 读写权限
  2. 理解 JavaScript 的 async/await
  3. leetCode 41.First Missing Positive (第一个丢失的正数) 解题思路和方法
  4. GIT入门笔记(11)- 多种撤销修改场景和对策--实战练习
  5. 移动端web页面自适应和rem
  6. Web下的整体测试 --性能测试及优化思路
  7. 奢侈品网购真正大牌占比未过半:被指只剩噱头
  8. 深入Pthread(五):线程属性
  9. 【论文写作】学位论文写作过程中应注意的7个问题,非常实用
  10. js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例