概述:描述一個(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)整控件的位置。