開發思路:
寫這個東東,其實就是寫一個COM加載項。可以使用MFC、也可以使用ATL,也可以使用VB,我最終選用了ATL。主要是VC我用得比較多,而ATL通過模板庫會給開發帶來極大的便利,參考資料也比較多,因此選用了ATL。事實證明我的選擇是正確的。不過使用VB相對要方便一些,VB可以很方便地對COM進行編程,編程中也可以直接使用Word的宏代碼,根本不用做代碼轉換。
開始編程,使用VC向導,可以很快的生成COM的框架,然后向工程里插入一個simple object(在菜單插入->插入ATL對象里面)。通過這個對象來改變WORD的菜單、TOOLBAR,這方面的文章很多,我的開發就是介紹了徐景周的一篇文章,到網上找一下,很多轉載(我發現網上原創的東西實在不多呀)。這樣一個簡單的COM加載項的框架就建好了。
手寫簽名部分的實現,這部分都是一些相對編程者容易的問題。簡單說一下,首選插入一個對話框(在菜單插入->插入ATL對象里面),加入幾個按鈕,寫一個單向鏈表用來存簽名的筆畫,用兼容DC、兼容位圖、OleCreatePictureIndirect,把圖片創建成一個IPictureDisp對象,以供下面的使用。
再插入一個Full Control對象,方法同上。把上面一步生成的IPictureDisp寫進Full Control對象,再調用WORD的AddOleCtrol方法將這個東東插入就可以了。
這就是一個簡單的流程。說的很粗略,因為不知道感興趣的人多不多。
在開發的過程中我遇到了以下這樣一些問題,后來慢慢解決了,如果大家有興趣可以來交流一下。
1.如何在插入對象中取到WORD的ActiveDocument的指針(這個不能通過保存的方法來)。
取Container的指針,再查IDispatch的接口。
????? 2.如果在程序里控制控件的刪除,如在控件內點擊,通過上下文菜單文菜單刪除控件。
可以給控件設置一下標志,然后通過Word的方法遍歷對象組,檢查對應的標志,然后刪除。
????? 3.如何保存。
可以重載框架的Save和Load方法,把對象的相關屬性保存。這兩個方法會由WORD自動調用。
????? 4.如何使用TOOLTIP。
這個在MSDN里有詳細的幫助,可以參照解決。
????? 5.如何移動控件。
處理控件的OnLButtonDown/OnMouseMove/OnLButtonUp消息,然后通過Word的方法移動控件。
???? 簡單寫了一下思路,歡迎交流。