今天,我们将要开发我们的第一个Windows Mobile(以下简称WM)程序,和其他传统学习方式一样,我们第一个要学的就是hello程序,本文的程序可以从http://work.newhua.com/cfan/201001/HelloWM.rar下载到。
小知识
几乎每种语言的入门教程的第一程序都是hello, world,这个程序最早出现于1972年,由贝尔实验室成员Brian Kernighan撰写的内部技术文件《Introduction to the Language B》之中。后来经过了《C语言程序设计》这本畅销教程风靡全球。这个程序的标准打印内容为“全小写,无惊叹号,逗号后需有一个空格”。
1.每个WM程序最早都是“项目”
首先,我们需要创建一个WM项目:运行Visual Studio 2008(简称VS2008),点击菜单“文件→新建→项目”,将弹出如下“新建项目”对话框。在名称一栏里面,填写“HelloWM”,点击按钮“确定”(见图1)。
在接下来的“添加新智能设备项目”对话框中,“目标平台”选择Windows Mobile 6 Professional SDK,“.NET Compact Framework 版本”选择.NET Compact Framework Version 3.5,“模板”选中“设备应用程序”(见图2)。
现在我们便已经成功的创建了一个名为HelloWM的WM程序项目(见图3)。
通过左边的“解决方案资源管理器”,可以看到,VS2008自动生成了不少的东西。其中,扩展名为CS的文件是C#代码文件。接下来,我们再看看Program.cs、Form1.cs这两个文件里面的代码到底是怎么样的。
2.“源代码”就是编写的代码
通过上面的设置,已经进入到编辑状态了,现在我们先看看Program.cs的代码,双击“解决方案资源管理器”中的Program.cs,便可以在VS的“代码编辑器”中打开这个文件了。如图4所示就是Program.cs的代码及其各个组成部分的说明。
接下来我们再看看Form1。套用上面的经验,我们再双击“解决方案资源管理器”里面的Form1.cs。这时,你会发现,自己看到的并不是代码,而是一个窗体的设计界面。双击一个窗体文件,或者控件及其他有界面的文件,默认的动作是在“窗体设计器”里面打开该文件的设计界面。
需要在“解决方案资源管理器”里面右击该文件,或者在“窗体设计器”里面右击该窗体,点击弹出菜单中的“查看代码”,才可以打开代码文件(见图5)。
但是,这么一个窗体,就只有“InitializeComponent();”这样短短一行代码吗?情况显然不是这样子的。出于程序的可维护性考虑,VS2008把“窗体设计器”所自动生成的代码,都放在一个单独的CS文件里面隐藏起来了。我们可以点击“解决方案资源管理器”里面Form1.cs左边的小+号,便可以看该窗体的代码,由Form1.cs、Form1.Designer.cs、Form1.resx三个文件组成。其中,Form1.cs用于保存开发人员所编写的代码,Form1.Designer.cs用于保存窗体设计器产生的代码,Form1.resx则保存相关的资源信息。有兴趣的读者,可以一一打开看一看。
3.动动手,和Windows Mobile Say Hello!
前面看了这么多,下面我们就要开始真正的动手开发了。
第一步:打开Form1.cs,添加一个SayHello方法,代码如下:
/// <summary>
/// 显示一个Hello对话框
/// </summary>
private void SayHello()
{
MessageBox.Show("Hello,Windows Mobile!", "Hello",
MessageBoxButtons.OK,
MessageBoxIcon.Asterisk,
MessageBoxDefaultButton.Button1);
}
这段代码,用于显示一个对话框,该对话框会显示"Hello,Windows Mobile!"等文字信息(见图6)。
第二步:添加菜单。SayHello的代码有了,但是应该怎样才能触发程序来运行这段代码呢?要通过程序界面来捕捉到用户的输入,然后再调用SayHello方法。在窗体编辑器中打开Form1。点击底部托盘上的mainMenu1,在Form1窗体的底部便会出现主菜单的编辑界面,依次添加菜单项(见图7)。
第三步:添加按钮。在VS2008左侧的“工具箱”浮动框中,选中Button控件,然后再在窗体上单击,便可以向窗体上添加一个按钮。右击该按钮,弹出菜单中,点击“属性”,便可以在“属性”编辑器中编辑按钮的各个属性了。Text属性表示要在按钮上显示的文本,这里,我们修改为Hello(&H),(&H)表示该按钮的快捷键为H(见图8)。
第四步:添加点击响应。接下来我们需要把用户对按钮与菜单的点击操作,与SayHello方法关联起来。双击Hello按钮,会在Form1.cs中生成按钮点击的响应方法,我们把代码做如下修改:
/// <summary>
/// 按钮按下时执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
SayHello();
}
同样,双击hello菜单项,也会生成菜单的点击响应方法:
/// <summary>
/// 菜单项按下时执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItem3_Click(object sender, EventArgs e)
{
SayHello();
}
这样,当你点击hello按钮,或者点击Active菜单下的hello菜单项的时候,程序便会调用SayHello方法,显示一个问候对话框了(见图9)。
当然,这些控件,不单单可以对点击做出响应,还对更多的其他事件提供了支持。点击属性编辑器中的“闪电”状图标,我们可以看到控件所支持的更多事件。
4.hello, Windows Mobile
在VS2008中点击菜单“调试→启动调试”(或者直接按F5),在弹出的部署对话框中选择“Windows Mobile 6 Professional Emulator”,点击“部署”,可以在设备仿真器中看到运行效果了(见图10)。
Just Do It
现在尝试着把你的程序放在手机上运行一下吧!如果出现了“此应用程序需要比安装在此设备上的Microsoft(R).NET Compact Framework更高的版本”的提示,可以从http://www.seedgo.com/69818.htm下载程序解决。
特评:前有iPhone,后有Android,WM会死?
最近有报道,“山寨手机之父”联发科,明年准备开发Android手机公板,这样山寨机全面进入到了“智能化”。而几乎大部分的知名手机厂商也都开始开发Android手机,这都源于它的免费。反观WM,由于授权费的制约,成本一直相对较高。而且很多人都认为微软的优势还是桌面操作系统,目前的Windows 7火爆必然造成微软的死亡,因为未来的市场将是手持设备和搜索,而微软虽然也认识到这个问题,大力开发Bing和WM,但它在这两个市场已经落后于Google及Apple。
从市场上来说,知名的芯片厂商瑞芯微(市场上多家的MID都是采用它的方案)通过对市场的判断放弃了WM系统,专注于Android,同样,前面提到的联发科和华为海思(华为的手机平台都是海思开发的)的市场状况来看,WM确实正在慢慢被市场淘汰。
不过,相对WM,Android的开发要难得多,毕竟微软已经为WM提供了完善的测试工具,正因为如此瑞芯微的产品上市计划一再延迟。虽然最近Google的手机就要推出,但Android仍然处于没有“真正的官方后台”,“厂商各自为战”的尴尬地位。
至于相对封闭的iPhone,虽然中国联通40天出售10万部iPhone,在韩国22天销售达到9万。但App Store上的盗版,以及iPhone本身的硬件缺陷仍然需要老乔忙活一阵……
总的来说,有微软这棵大树,WM必然不会灭亡,而且这毕竟是已经足够成熟的平台。
(载《电脑爱好者》2010年1期)