zoukankan      html  css  js  c++  java
  • 基于Windows Mobile 5.0的掌上天气预报设计

      基于Windows Mobile 5.0的掌上天气预报设计

    概述:描述一个基于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.其他:

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

    界面:


  • 相关阅读:
    Flasback数据库(闪回数据库)
    Oracle回收站
    PL/SQL中如何执行DDL、SCL?
    oracle中的隐式提交(auto commit)
    raise_application_error用法
    sqlplus中"-S"和"-L"用法
    愿随君,走天涯
    你的过去,我不曾参与;你的未来,与你紧相依
    Oracle中SAVEPOINT和ROLLBACK用法
    Linux基础命令-Nginx-正则表达式( grep sed awk )-Shell Script--etc
  • 原文地址:https://www.cnblogs.com/seabluescn/p/942695.html
Copyright © 2011-2022 走看看