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.其他:

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

    界面:


  • 相关阅读:
    Mac下配置Android adb环境变量
    在远程Linux上搭建jenkins
    早期渲染模板-Thymeleaf总结
    启动SpringBoot时的banner自定义修改
    MySQL密码策略及修改或忘记密码
    (转)Maven使用总结
    转-安全层开发—Shiro对比Spring Security
    JavaWeb应用-发布打成jar包和war包区别
    Gitea中常规git工作流程
    简述JSP与Servlet的区别及联系
  • 原文地址:https://www.cnblogs.com/seabluescn/p/942695.html
Copyright © 2011-2022 走看看