一直很想写些关于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