he717 2009年09月07日
Windows Mobile (WinCE) 开发的一些经验
本人做了一阵子Mobile开发,总结了一些经验,现跟大家分享。

1、.NET Compact Framework(简称.NET CF)与.NET Framework(简称.NET)的区别:
.NET CF是裁剪过后的.NET,也就是很多的内容都简化了。可想而知吧,WinCE的空间本来就比较小,所以如果跑个.NET肯定是有很多的不便之处,而且WinCE的系统又是从Win95进化而来的,毕竟跟现在的NT系统不同,所以.NET CF只是继承了.NET的大部分功能吧。

2、WinCE与WinNT(XP、Vista。。。)的区别
WinCE是微软移动系统的解决方案。也就是我们用的手机、PDA等都是跑的WinCE。而我们平时看到的PocketPC还有SmartPhone都是基于WinCE系统改造的专用,其底层还是基于WinCE的。而真正的WinCE系统的界面跟PocketPC、SmartPhone系统的界面是不同的,跟真正的Windows系统的界面类似。也有开始菜单、控制面板啥的。如果要在WinCE上运行.NET CF开发的程序,需要先安装.NET CF包,这个在VS2005的SmartDevice/SDK下面可以找到。是个.cab的文件,应该是WINCE5啥的.cab,具体我不记得了,大家可以找找。把这个文件复制到WinCE下,双击就可以安装。

3、ActiveSync
这个软件是连接PC与WinCE移动设备的专用软件。开发WinCE软件也是经常要用的。其主要作用是可以在两个系统之间传递文件。不过,ActiveSync的传输速率比较慢,如果要传送大文件,还是直接用读卡器+SD卡比较好。ActiveSync一般使用usb口连接设备,同时还要安装设备的驱动程序。如果是手机,手机厂家应该提供驱动,如果是WinCE开发板,则厂家应该提供驱动。在将设备插入USB口以后,系统会提示安装驱动,装好即可。然后再装ActiveSync。ActiveSync激活后,可以在我的电脑里打开“移动设备”,然后就可以复制文件了。

4、模拟器
在VS2005安装好以后,会有一个PocketPC的模拟器,也就是PDA的。而对于手机的还有WinCE设备的没有。这就需要大家去网上找。WinCE的ROM一般在GPS导航仪的网站论坛比较多。可以下载用。在Program Files下有个Microsoft Enumlator的文件夹,里面有个模拟器程序,双击可以教你怎么用。配上ROM就可以用了。在启动ROM以后,可以在菜单里设置共享目录。设置好以后,会映射到模拟器里的Storage Card 或存储卡里。为了方便,可以把共享目录设置到你程序的obj\debug里,这样你每次编译以后,就可以在模拟器里直接双击测试了。

5、开发注意事项
刚才说过了,并不是所有的.NET下的功能在.NET CF下都有。所以在开发的时候要注意。
比如,
.NET下有GraphicsPath,而.NET CF下的就没有。
.NET下有。。。具体的不记得 :P
可以自己看看。打个点儿,就都出来了 ^_^

6、内存
在PC上开发,很少考虑内存,一般都是new以后就不管了,至于说GC啥时候回收内存,无所谓,反正系统还有好几百M内存,够用的。而在WinCE下就要考虑这个问题。因为移动设备的内存一般都比较少,从十几兆到几十兆,有的好手机也就一百多兆,所以用了就要即时释放。因此,这个就要经常用到:
using (Bitmap bmp = new Bitmap(240, 320))
{
//... 这里用完了系统会自动回收的,因为使用了using
}
还有,如果在无法用using的情况下,一定要dispose()。但要注意,using完了就别dispose()了。
GlobalMemoryStatus()这个API可以看看。网上有的是类似的教程教你怎么用。

7、API
在XP系统下,API函数一般存于kernel32.dll和user32.dll中。而在WinCE下,基本上都在coredll.dll里。所以,一般要写[DllImport("coredll.dll")]

8、输入法
如果你的程序要输入汉字,这个就麻烦点了。有三种选择吧大概。
第一,可以用WinCE自带的输入法,不过可能“囧”点。
第二,可以选择市面上的流行输入法,汉王、蒙忆啥的,不过大多是收费的,免费开源的很少很少很少很少。。。。
第三,自己做(其实不难,这个有时间再介绍)
如果是做商业软件,我觉得用商业输入法可靠一些,毕竟是人家的产品。而如果是非商业软件,自己做输入法其实也不太难。

9、特技(嘿嘿嘿)
所谓特技,无非是一种组合。就是输入(触摸屏)和显示的一个有机的结合。也就是我们看到iPhone、HTC Touch HD等高端手机所提供的通过手指的触摸动作而作出对应反映的功能。比如,iPhone的滑动解锁、联系人滑动滚动等等。其实这些功能是靠两种方法实现的。
第一,是截取系统鼠标也就是触摸屏的事件,然后再处理。这里要用到鼠标钩子。
第二,是就在本窗口内处理OnMouseDown、OnMouseMove、OnMouseUp事件来进行处理。
其实对于简单的程序,就可以用第二种方法。就拿处理一个滑动联系人的例子来说吧:
首先,在OnMouseDown里记录鼠标位置和按键的时间(System.Environment.TickCount),在OnMouseUp下判断鼠标抬起的位置和与按下时间的时间差。如果时间差小于一定值,比如300毫秒,而移动的距离又大于一定的值,比如80像素,就表示手指进行了一次滑动的动作,就可以进行相应的操作了。以此类推,大家都是聪明人,应该不难。

10、图形
图形要用到Graphics,还有就是OnPaint和OnPaintBackgroun。用Bitmap贴图到Grpahics上,然后把OnPaintBackground函数里的内容去掉,啥也不做。这样就不会闪屏了。至于说帧率,这就看你做图的效率了,这个最好看看游戏开发啥的,有关重画和刷新方面的技巧。比如脏区啥的。

11、没11了,因为我没的说了。知道的基本上都说了。这里大仙大侠大哥大姐大爷大妈大叔大婶大伯大妈大妹子大兄弟大家都别鄙视我哈,我也是对“刀恩义替”有一丝丝的认知而已,在这里显山露水这是太不好意思了,要是有啥说的不对的,各位有啥看不惯的,赶紧骂我几句过过瘾也就罢了。。。。

88
...全文
1631 点赞 收藏 3
写回复
3 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告