Chinaunix首页 | 论坛 | 博客
  • 博客访问: 231637
  • 博文数量: 68
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 612
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-04 22:38
文章分类

全部博文(68)

文章存档

2010年(2)

2009年(12)

2008年(54)

我的朋友

分类:

2008-12-13 11:28:40

一直很想写些关于Custom FormTransport方面的东西,但是一方面这几个部分东西比较多,一篇两篇也讲不完,另外一方面感觉用的人不多,写了也是白写,所以一直没动手。最近有不少网友通过MAIL或者在CSDN论坛上都提到了Custom Form的用法(主要是想实现自己的类如MMS之类的客户端),在这里我简单介绍一下Custom Form的使用方法,希望对有需要的朋友能有所帮助。

       实际上在微软的2005 SDK SAMPLE已经有了一个比较详细的例子,叫做Customform,大家可以在SDK安装目录\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32下面找到这个例子,所以详细代码我就略过了,我们从系统对一个Custom Form的调用逻辑讲起。

1.       用户点击New或者某条已经存在的Message再编辑,tmail查阅对应的Message Type,比如是IPM.SMSText(SMS)还是IPM.Note(Outlook Email)或者还是其它,然后查询注册表Message Type注册的位置(HKEY_CURRENT_USER\Software\Microsoft\Inbox\MsgTypes\IPM)找到正确的Form Dll.

2.       每个Form DLL必须实现FormFactoryEx输出函数,tmail调用FormFactoryEx获取IFormProviderEx对象。

3.       根据不同的需求,调用IFormProviderEx不同的函数,比如如果是新建或者再编辑一条Message,将会调用IFormProviderEx:: CreateComposeForm,如果是播放,则调用IFormProviderEx:: CreateReadForm,如果是获取Message Icon,则调用IFormProviderEx:: GetMsgStatusIconIndex(可以参考《Pocket PC & Smartphone 短信图标轻松换》一文)

 

       要实现自己的编辑客户端,如果才能让用户方便的创建你定义的Message呢?微软的Sample里面没有涉及到这一点,它所走的流程是:

1.         通过IMailRuleClient截获EMS消息,把它的Message Type改成IPM.SMStext.SDKEMS

2.         编辑或者播放时,因为类型是IPM.SMStext.SDKEMS,所以会调用自己一注册的EMS Custom Form

 

它略过了创建IPM.SMStext.SDKEMS类型Message的细节,那么要如何创建这种类型的消息呢?一种比较方便的方法就是在SMS基础上添加EMS的支持,如下图:

 

这样,一旦用户点了EMS,那么创建的就是自定义的EMS消息,想要实现它其实很简单,在Customform例子的基础上,我们新建Message Type,比如叫IPM.EMS,替换掉Customform里面所有的IPM.SMStext.SDKEMS,接下来我们只需要对注册表做少许的修改:

以下是IPM.EMS类型的注册:

[HKEY_CURRENT_USER\Software\Microsoft\Inbox\MsgTypes\IPM\EMS]

"GlyphInfo"=hex:\

      20,00,00,00,64,00,00,00,64,00,00,00,00,00,00,00,01,00,00,00,03,00,00,00,02,\

      00,00,00,00,00,00,00

"DLL"="EMSViewerForm.dll"

"Name"="EMS"

 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Inbox\Svc\SMS\MsgClasses]下面添加键值:

"IPM.EMS"=dword:00000001

 

OK,我们单独的EMS 编辑器就成功了。先简单介绍到这里,以后有空继续,欢迎拍砖!

阅读(741) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~