CE MAPI实例讲解 --- Custom Form介绍(九)

  一直很想写些关于 Custom Form Transport 方面的东西,但是一方面这几个部分东西比较多,一篇两篇也讲不完,另外一方面感觉用的人不多,写了也是白写,所以一直没动手。最近有不少网友通过 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 编辑器就成功了。先简单介绍到这里,以后有空继续,欢迎拍砖!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值