基于Windows Mobile 5.0的掌上天氣預(yù)報(bào)設(shè)計(jì)

2010-08-28 10:52:45來源:西部e網(wǎng)作者:

概述:描述一個(gè)基于Windows mobile 5.0的天氣預(yù)報(bào)程序設(shè)計(jì)過程
開發(fā)工具:Visual studio 2005(C#/)Windows Mobile 5.0 Pocket PC SDK/WM6 模擬器
試用機(jī)型:多普達(dá) D600
關(guān)鍵字:.NET CF,PPC, WebService,Windows mobile, 天氣預(yù)報(bào)


  下載安裝程序:PocketWeatherInstall.cab
  下載源代碼:PocketWeather.rar

  總的來說,使用.NET Compact Framework 設(shè)計(jì)程序還是比較容易入手的,本文就在設(shè)計(jì)過程中碰到的幾個(gè)問題做一個(gè)簡要說明。

1. 天氣接口

采用一個(gè)網(wǎng)上免費(fèi)的Web服務(wù),來源www.WebXml.com.cn,使用非常方便,調(diào)用getWeatherbyCityName返回一個(gè)string數(shù)組,包含相關(guān)天氣信息。   

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. 獲取程序運(yùn)行路徑

PPC獲取當(dāng)前程序路徑還比較麻煩:

public static string GetApplicationDirectory()

  {

       return System.IO.Path.GetDirectoryName(

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

   }


3. 保存用戶設(shè)置

將用戶設(shè)置信息保存在一個(gè)DataSet中,然后存儲(chǔ)為本地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");

讀取時(shí)從XML文件獲取DataSet,然后再讀取數(shù)據(jù)。

     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. 輸入法面板

當(dāng)彈出輸入法面板是會(huì)擋住一些用戶控件,感覺很不好,處理辦法就是將控件放在一個(gè)Panel中,設(shè)置Panel的AutoScroll屬性為True,在面板狀態(tài)改變時(shí)同時(shí)改變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. 對(duì)話框問題

程序在打開一個(gè)對(duì)話框時(shí),如果切換到其他程序,然后在系統(tǒng)運(yùn)行程序列表中會(huì)看到兩項(xiàng)記錄,應(yīng)該避免這種情況;解決辦法就是在程序激活和停用時(shí)修改窗口標(biāo)題:

private void FormOpetion_Deactivate(object sender, EventArgs e)

        {

            this.Text = "";

        }

        private void FormOpetion_Activated(object sender, EventArgs e)

        {

            this.Text = "設(shè)置";

        }

6. 其他

還應(yīng)該考慮在屏幕旋轉(zhuǎn)時(shí),要重新調(diào)整控件的位置。

關(guān)鍵詞:C#