当前位置:首页>>开发编程>>VS.NET>>新闻内容  
基于Windows Mobile 5.0的掌上天气预报设计
作者: 发布时间:2007-11-24 16:25:22 | 【字体:

概述:描述一个基于Windows mobile 5.0的天气预报程序设计过程
开发工具:Visual studio 2005(C#/)Windows Mobile 5.0 Pocket PC SDK/WM6 模拟器
试用机型:多普达 D600
关键字:.NET CF,PPC, WebService,Windows mobile, 天气预报


  下载安装程序:PocketWeatherInstall.cab
  下载源代码:PocketWeather.rar

  总的来说,使用.NET Compact Framework 设计程序还是比较容易入手的,本文就在设计过程中碰到的几个问题做一个简要说明。

1. 天气接口

采用一个网上免费的Web服务,来源www.WebXml.com.cn,使用非常方便,调用getWeatherbyCityName返回一个string数组,包含相关天气信息。   

string city = this.lblCurrentCity.Text.Trim();

PocketWeather.cn.com.webxml.www.WeatherWebService Weather =

new PocketWeather.cn.com.webxml.www.WeatherWebService();

string[] info = Weather.getWeatherbyCityName(city);


2. 获取程序运行路径

PPC获取当前程序路径还比较麻烦:

public static string GetApplicationDirectory()

  {

       return System.IO.Path.GetDirectoryName(

System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

   }


3. 保存用户设置

将用户设置信息保存在一个DataSet中,然后存储为本地XML文件:

DataSet ds = new DataSet("LastWeather");          

            DataTable tabLast = new DataTable("Weather");

            tabLast.Columns.Add("KeyStr", typeof(string));

            tabLast.Columns.Add("Content", typeof(string));

            DataRow row = tabLast.NewRow();

            row["KeyStr"] = "lblTodayWeather";

            row["Content"] = this.lblTodayWeather.Text;

            tabLast.Rows.Add(row);          

            row = tabLast.NewRow();

            row["KeyStr"] = "LastModifyTime";

            row["Content"] = SystemConfig.LastModifyTime;

            tabLast.Rows.Add(row);

            ds.Tables.Add(tabLast);

            ds.WriteXml(SystemConfig.GetApplicationDirectory() + """Last.xml");

读取时从XML文件获取DataSet,然后再读取数据。

     DataSet ds = new DataSet();

     ds.ReadXml(SystemConfig.GetApplicationDirectory() + """Last.xml");

     DataTable tabSetting = ds.Tables["Weather"];

     DataRow[] rows = tabSetting.Select("KeyStr='lblTodayWeather'");

     if (rows.Length != 0)

     {

             this.lblTodayWeather.Text = rows[0]["Content"].ToString();

      }            

       rows = tabSetting.Select("KeyStr='LastModifyTime'");

       if (rows.Length != 0)

       {

              SystemConfig.LastModifyTime = rows[0]["Content"].ToString();

       } 

4. 输入法面板

当弹出输入法面板是会挡住一些用户控件,感觉很不好,处理办法就是将控件放在一个Panel中,设置Panel的AutoScroll属性为True,在面板状态改变时同时改变Panel的尺寸。

private Microsoft.WindowsCE.Forms.InputPanel m_inp

= new Microsoft.WindowsCE.Forms.InputPanel();

public FormOpetion()

        {

            InitializeComponent();

            this.m_inp.EnabledChanged += new EventHandler(m_inp_EnabledChanged);

        }

        void m_inp_EnabledChanged(object sender, EventArgs e)

        {

            m_panel.Size = m_inp.VisibleDesktop.Size;          

        }
 
5. 对话框问题

程序在打开一个对话框时,如果切换到其他程序,然后在系统运行程序列表中会看到两项记录,应该避免这种情况;解决办法就是在程序激活和停用时修改窗口标题:

private void FormOpetion_Deactivate(object sender, EventArgs e)

        {

            this.Text = "";

        }

        private void FormOpetion_Activated(object sender, EventArgs e)

        {

            this.Text = "设置";

        }

6. 其他

还应该考虑在屏幕旋转时,要重新调整控件的位置。


文章来源:
·C#的支付宝Payto接口代码
·C#实现窗口最小化到系统托盘
·解密QQ的MsgEx.db消息文件格式
·QQ的TEA填充算法C#实现
·C#用Guid获取不规则的唯一值(标识)
·C#下实现程序在线升级的方法
·C#发送Email邮件三种方法的总结
·C#格式化数值结果表(格式化字符串)
·教你用C#开发智能手机游戏:推箱子
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我