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

王朝other·作者佚名  2006-09-20
窄屏简体版  字體: |||超大  

一直很想写些关于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 编辑器就成功了。先简单介绍到这里,以后有空继续,欢迎拍砖!

无聊客(blog.csdn.net\yzx0023)

2006-9-18

yzx0023@gmail.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航