简介

本文通过一个Currency Converter(外汇兑换)例子,讲述Windows Mobile 新功能Widget开发的基本概念和步骤,同时讲述了Widget如何调用WebService。

背景

最近比较关心汇率波动,所以在Widget上实现一个汇率转换器程序。

什么是Widget

Windows Mobile 6.5引入了Widget功能。为Windows Mobile开发提供了新的方式,使得开发Windows Mobile程序变得更简便,Widget的规范请看下面链接:http://www.w3.org/TR/2008/WD-widgets-20081222/ 。Widget有三个关键文件如下图。

Config.xml为配置文件,配置Widget的属性,这些属性包括名字,使用的html文件,是否访问网络以及图标等等。

<?xml version="1.0" encoding="utf-8" ?><widget version="1.0" xmlns="http://www.w3.org/ns/widgets" id="">    <name>Currency Converter</name>    <content src="currency.htm" type="text/html" />    <access network="true" />    <icon src="currency.gif"/>    <description>This is a currency converter widget!</description></widget> 

Currency.gif为图标文件,实际应用中,该文件可以为png,ico等其他图形格式。

Currency.htm为Widget的核心文件,开发Widget的核心就是开发该html文件,这里的html是指纯html(Raw HTML),开发者可以使用HTML来布局,使用CSS来定制样式,使用JavaScript来控制业务逻辑。开发widget使我想起几年前做JavaScript的日子,那时候还没有Ajax,ASP.net的服务器控件的交互性十分差,用户老是投诉界面的操作性,只好手工编写大量的JavaScript来提高用户体验。每次调试JavaScript只能在IE 5上执行,然后alert()出调试信息。开发Widget,我还没有找到很好的方法进行调试,还是有点像以前开发JavaScript那样,使用alert()的方式进行调试。

实现

HTML

<html><head>    <title>Currency Converter</title>    <script src="currency.js" type="text/javascript"></script></head><body><table>    <tr>        <td>From </td>        <td>            <select id="FromBox">              <option value="AUD" selected="selected">Australian Dollar(AUD)</option>              <option value="CNY">Chinese Yuan(CNY)</option>              <option value="HKD">Hong Kong Dollar(HKD)</option>              <option value="USD">U.S. Dollar(USD)</option>            </select>        </td>    </tr>    <tr>        <td>To </td>        <td>            <select id="ToBox">              <option value="AUD">Australian Dollar(AUD)</option>              <option value="CNY" selected="selected">Chinese Yuan(CNY)</option>              <option value="HKD">Hong Kong Dollar(HKD)</option>              <option value="USD">U.S. Dollar(USD)</option>            </select>        </td>    </tr>    <tr>        <td colspan=2>        <input type="text" id="Result" readonly onclick="clickConvert()" />         </td>    </tr></table></body></html> 

这里的HTMl十分简单,只是显示两个下拉框来表示币种,使用一个input text来显示Webservice查询结果。

菜单

菜单指的是Windows Mobile的左右操作菜单,widget.menu为 Windows Mobile特有,在PC上调试该菜单不能呈现。

var menu = widget.menu;var menu1001 = menu.createMenuItem(1001);menu1001.text = "Convert";menu1001.onSelect = clickConvert;menu.setSoftKey(menu1001, menu.leftSoftKeyIndex);

上面代码重写左边菜单,显示"Convert", 并且绑定事件方法 clickConvert,效果图如上。

调用WebService

该汇率转换程序是通过查询WebService来实现的,我使用的是http://www.webservicex.net/免费的WebService。调用WebService的代码如下:

var xmlHttpRequest = null;

function clickConvert() {    if (window.XMLHttpRequest)     {        xmlHttpRequest = new XMLHttpRequest();    }    else if (window.ActiveXObject)     {        xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");    }

    var url = "http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency="                 + document.getElementById("FromBox").value                 + "&ToCurrency="                + document.getElementById("ToBox").value;    xmlHttpRequest.open("GET", url, true);    xmlHttpRequest.onreadystatechange = getData;    xmlHttpRequest.send(null);}

function getData() {    if ((xmlHttpRequest.readyState == 4) &&( xmlHttpRequest.status == 200))    {

        var myXml = xmlHttpRequest.responseXML;        var xmlobject = null;        var XMLText = null;        if (window.ActiveXObject)        {            XMLText = myXml.childNodes[1].firstChild.nodeValue;         }        else        {            XMLText = myXml.childNodes[0].firstChild.nodeValue;        }        var result = document.getElementById("Result");        result.value = document.getElementById("FromBox").value                               + " to "                               + document.getElementById("ToBox").value                               + " : "                               + XMLText;    } }

先生成XMLHttpRequest的对象,组成需要访问的WebService的Url,通过GET的方式进行访问。返回结果的处理是异步的,通过onreadystatechange 属性指定异步处理函数。在访问过程中,getData()会被回调几次,需要判断xmlHttpRequest的readyState 和 status 来决定结果的返回。返回结果的读取和WebService的接口有关,根据WebService的出口分析需要的数据。这样一个调用WebService的过程就完成了。

调试

可以通过PC的IE进行调试,但是由于IE上没有Windows Mobile的菜单,所以需要做一点点特殊处理,例如我把名为Result的input框加入菜单的事件,那样在IE上只要点击该input框就可以进行调试了。

<input type="text" id="Result" readonly onclick="clickConvert()" /> 

理论上也可以使用FireBug来进行调试,可是平台相关性的在Firefox就不能用了。

构建

构建过程很简单,不需要编译,只需要压缩成zip格式的文件,把名字改成*.wgt或者*.widget就可以了。

我使用的7zip来进行构建,也可以写批处理文件进行构建,例如mark.bat文件,在批处理文件内进行压缩。

部署

把*.wgt文件拷贝到SD card。在Windows Mobile打开SD Card。

点击 Yes 进行安装。

运行

安装后在Start 菜单看到新的Widget。

运行结果如下。

目前为止一个调用WebService的Widget已经完成了。是不是很简单呢,我们基于免费WebService开发其他Widget。

关于JavaScript的WebService的开发,我参考了下面的文章,非常好。

Calling Cross Domain Web Services in AJAX

中文方面的资料可以参考 郭靖 的系列文章 http://www.shangducms.com/category/Windows-Mobile-65.aspx。

这周比较忙,写了好几天,终于写完了,大家都 have a good weekend.

源代码:CurrencyConverter.zip  请改名为Currency Converter.wgt。

运行环境:Windows Mobile 6.5

转载于:https://www.cnblogs.com/procoder/archive/2009/06/26/1511919.html

Windows Mobile 6.5 新功能widget开发相关推荐

  1. 基于Windows Mobile 2003 的 Pocket PC 为开发人员提供的新功能(转)

    对于 Pocket PC 用户和开发人员来说,基于 Microsoft® Windows Mobile® 2003 的 Pocket PC 是一个非常重要的里程碑.Pocket PC 2003 基于新 ...

  2. Windows 10 Version 2004 新功能盘点

    Windows 10 Version 2004 新功能盘点 Windows 10 Version 2004功能更新即将登场,但目前仍没有敲定具体的名称.目前微软已经发布了ISO镜像,意味着微软有望近期 ...

  3. Windows 11,一个新功能,一场新屠杀!

    6月24日,微软正式公布了新一代操作系统:Windows 11.这次的更新距离上一代操作系统Windows 10的发布,隔了有6年之久. 在新一代的操作系统中,包含了这些亮点: 采用了全新的UI设计. ...

  4. Windows Live Writer新版新功能试用

    微软的一款管理个人Blog的客户端工具Windows Live Writer经过前期版本的发展后,目前推出了其最新的Beta2版本.作为一款本地Blog管理工具,Windows Live Writer ...

  5. Windows 10强推新功能:能否让你的电脑更快

    Windows Defender提高你得电脑性能 电脑卡慢常常是电脑爱好者最头痛的问题,无论是做工作还是玩游戏,一个卡机就会让人走向崩溃的边缘.笔记本卡慢的原因有很多,但操作系统都绝对是电脑卡慢不可跳 ...

  6. Windows 10 20H1 2004新功能

    Windows 10的年度更新版本20H1即将问世. 目前可以从insider preview渠道中获得.这个版本中看上去对搜索功能做了不小的改进.包括搜索的磁盘占用率以及搜索的一些展示方式. 其它的 ...

  7. Windows 11,一个新功能,一场新屠杀

    6月24日,微软正式公布了新一代操作系统:Windows 11.这次的更新距离上一代操作系统Windows 10的发布,隔了有6年之久. 在新一代的操作系统中,包含了这些亮点: 采用了全新的UI设计. ...

  8. ios8新特性widget开发(手机上和通知栏并列的今天的制作)

    ios8发布已经有一段时间了,伴随着ios8同时也出现了许多新的特性,ios系统将会越来越开放,这是好事.其中一个新特性就是在下拉通知栏里加入了个性的widget,开发者可以自己定义widget的样式 ...

  9. Windows 11正式发布,新功能太绝了!

    前晚23点(6月24号),传说中的"下一代 Windows 操作系统"终于发布了. 在宣传时期,微软软CEO纳德拉就曾说过: 这将会是10年来最重磅的一次更新. 当时,大侠还是不太 ...

最新文章

  1. 自适应滤波:最小二乘法
  2. wannalfy 挑战赛8 F 白云的树(树形dp)
  3. 使用docker registry建立私有镜像仓库
  4. 如何在Jackson中使用PropertyNamingStrategy
  5. centos7下使用git
  6. Redis:主从配置
  7. celery java_Python的Java Celery项目相当于什么?
  8. 华为acl怎么生效_华为ACL配置教程
  9. 【Java笔记】四种权限修饰符总结
  10. 使用Kotlin的Android CoordinatorLayout
  11. 探究Windows内核你知多少
  12. Java单例模式双检锁原理
  13. 计算机408专业考研真题,2021年计算机考研408历年真题及答案
  14. react代码编辑器 react-ace
  15. EJB是什么?(节选)
  16. 固态硬盘装到服务器上影响寿命吗,谈谈SSD固态硬盘的寿命问题
  17. 贝叶斯(朴素贝叶斯,正太贝叶斯)及OpenCV源码分析
  18. CAIDA AS Rank项目介绍
  19. 景观智慧路灯:基于景观智慧灯杆的浙江嘉兴智慧旅游景区项目分享
  20. markdown 数学公式 任意符号 存在符号

热门文章

  1. CVPR 2019 | 国防科大提出双目超分辨算法,效果优异代码已开源
  2. 【TensorFlow】TensorFlow函数精讲之tf.truncated_normal()
  3. 深度学习最常用的10个激活函数!
  4. 图机器学习有多大神力?一文带你回顾2020,展望2021
  5. 速收藏,《机器学习实战》Python3环境算法实现代码
  6. 【TensorFlow系列一】TensorFlow工作原理
  7. 基础知识(一)matlab与c++混合编程之环境搭建
  8. php gui中文手册,git gui - [ Git中文开发手册 ] - 在线原生手册 - php中文网
  9. c++ unix time 运行时间_C++编程:c++里时间类型详解 time_t等
  10. DBeaver 导出EXCEL文件