一直很想寫些關於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