WinCE 开发记录
来源:互联网 发布:电视语音遥控器软件 编辑:程序博客网 时间:2024/05/21 07:06
记录:
这几天由于项目演示需要,要把原来基于PC&setTopBox的方案扩展到手持终端上,所以就接到了个任务,以最短时间把原来的版本移植到手持终端上,由于原来没玩过Window mobile,而且考虑到时间问题还有PDA处理能力,因此就先做了个简单的版本,不过今天完成出来的效果,还是挺炫d。终于把第一个window mobile软件做出来了,今天以此文记录
简单的开发过程,以及遇到的一些问题(好久没写blog了),我的jxta之路也停顿了一段时间!
1 由于之前都是使用mfc开发桌面程序,所以这次在Win CE上也利用了Pocket PC MFC来开发,而且开发过程中,发现基本一致。
2 Pocket PC上的项目只能设置成Unicode,因为之前我都把unicode改成多字节字符,所以这次开发使得出现好多类型转换。
1)在类似于AfxMessageBox() SetWindowText()这些API都要求参数是LPCTSTR类型的,如果强制将string转换,会导致乱码,如果遇到这种情况,我找到一种简单的办法:
USES_CONVERSION;
A2W():Ascii 转换为Wide Char
W2A(): WideChar 转换为Ascii
这种转换很方便,不需要使用很复杂的函数。
3 WinCe改变背景颜色问题:在mfc中,可以在OnCtlColor()中改变对话框颜色,而在Wince中,也可以通过该方法来实现,但是会发现,在改变对话框颜色
if(nCtlColor == CTLCOLOR_DLG )这句话会告诉您CTLCOLOR_DLG 未能标识,通过查看头文件,发现确实没有这个CTLCOLOR_DLG 定义,但很奇怪的是,其他如:
#define CTLCOLOR_MSGBOX 0
#define CTLCOLOR_EDIT 1
#define CTLCOLOR_LISTBOX 2
#define CTLCOLOR_BTN 3
#define CTLCOLOR_SCOLLBAR 5
#define CTLCOLOR_STATIC 6
#define CTLCOLOR_MAX 7
都有定义,唯独少了个“4”,只要将代码改为if(nCtlColor == 4)就可以改变对话框颜色了,微软为什么会这样做呢?
4 在socket api上,有些setsockopt 在WinCE上会不支持,本来觉得下载速度挺慢,想把接收缓冲区设大点,但是在setsockopt(sock,SOL_SOCKET,SO_RCVBUF,xx,xx)时,就会提示10042错误码,这个错误码是说不支持在该层次上或者该options上设置,通过查找,发现以下解释:
In Platform Builder 4.0, the documentation incorrectly states that setsockopt() supports the SO_RCVBUF option.
In fact, support for the SO_RCVBUF option was later added in Windows CE .NET version 4.1. The Platform Builder 4.1 documentation was updated to reflect the fact that you can use SO_RCVBUF for datagram sockets.只能在datagram socket上设置,查看msdn上也说明了only for datagram sockets。
5 这次没有用CSocket这个鬼玩意,舒服好多,只少在多线程上,不会遇到莫名其妙的错误,CSocket上需要attach,detach,烦死人,在csdn 论坛上经常会发现有人问这个问题,还是用api吧,舒服,自己好控制!!
6 这次虽然说软件比较小,但是还让我用observer pattern做了一个不错的选择,因为在tcp下载中,下载完会导致两种不同的update方式(一种是更新树形列表,一种是打开播放媒体),如果用定时器轮询变量,以确定是更新完毕,肯定不好。于是使用了observer pattern,通过接口observer继承出两个xxobserver,大家各自有自身的update方式,这样
在程序中只需多态使用这个update,就可以达到更新效果,而且代码也容易写,好维护,不错不错!模式还确实使我了解到了一些基本的面向对象,至少有一点点的感觉。
7 WinCE在测试udp 组播时,如果当时Window mobile通过usb连接到pc上,这样测试不了udp(当时我搞了好久,一直以为代码错误),据说是端口有关(具体没查),如果要测试组播,就需要把usb拔下来就可以测试。
8 测试tcp可以直接通过pc上的Pocket pc仿真器来模拟就ok了,简单介绍一下我了解的模拟过程:
1)vs2005的Pocket pc仿真器默认放在program file里面的Microsoft Device Emulator文件夹下,在里面有一个“dvcemumanager.exe”这个就是用来管理仿真的工具
2)打开仿真器,然后右击设备点“连接”,设备就会弹出来,然后再右击“插入底座”,此时就会与pc上同步连接,pc上的连接设置需要勾上“允许连接到其中一下任何一个端口”
3)此时的仿真器就和你的手持设备一样,可以通过usb互相copy数据了。
9 一些基本函数使用:
1 获取路径:
USES_CONVERSION;
wchar_t pBuf[256];
GetModuleFileName(NULL,pBuf,sizeof(pBuf)/sizeof(wchar_t));
strAppPath = W2A(pBuf);
2创建文件夹
strMediaDirPath += "//Media";
CreateDirectory(A2W(strMediaDirPath.c_str()),NULL);
ok
that's all!
下面是效果图
- WinCE 开发记录
- WinCE下驱动开发入门记录
- WinCE下驱动开发入门记录(一)
- WinCE下驱动开发入门记录(二)
- WinCE下驱动开发入门记录(三)
- WinCE下驱动开发入门记录 [转载]
- 转—WinCE下驱动开发入门记录
- wince 学习记录。。
- WINCE配置记录
- 继续WINCE记录:
- wince入门记录C#
- WinCE 项目记录
- wince VECTOR bug使用记录
- wince + 6410 背光驱动记录
- WinCE启动次数的记录
- C#WinCE 记录日志文件
- wince开发起步
- wince开发入门
- 兴趣!=学得好
- 测试模型
- document对象的属性
- 关于gridview上的编辑、选择等按钮显示英文的问题解决。
- 细说 #pragma pack(n)
- WinCE 开发记录
- 一个完善的ODBC数据库程序
- Thinking In Linux C/C++字节对齐详解
- Reliable UDP 的资料
- 下个东西真不容易呢
- 模板类如何使用消息映射?
- 开始研究
- 从“知识管理无用论”看国内顾问咨询公司现状——引子篇
- js表单验证控制代码大全