青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

開發(fā)OFFICE插件總結(jié)

前段時間做了個關(guān)于PPT的插件開發(fā),簡單總結(jié)一下。

1. VC6.0中使用VBA
    在VC6.0中,可以使用導(dǎo)入類型庫功能,即可連接到所需的OLB文件,并且可以選擇導(dǎo)入的類。然后可以直接聲明對象,如_Application m_app。需要注意的是,導(dǎo)入的類只能是實體類,包含虛函數(shù)的類都無法包含進來。

2. VS2005中使用VBA
    VS2005中,由于沒有導(dǎo)入類型庫功能,可以使用VC6.0中生成的.H文件,并連接到OLB文件。使用方法和VC6.0中基本相同。

3. VS2005中開發(fā)插件
    VS2005中,可以直接利用Project Wizard來開發(fā)OFFICE插件程序。
    生成的程序框架包含Connect.h,Connect.cpp,類CConnect中包含插件的加載事件處理函數(shù)。
    需要導(dǎo)入文件:
1 #import "mso9.dll" rename_namespace("Office") \
2 rename("RGB","OfficeRGB") \
3 rename("DocumentProperties","OfficeDocumentProperties")
4 using namespace Office;
5 #import "VBE6EXT.olb" rename_namespace("VBE6")
6 using namespace VBE6;
7 #import "MSPPT9.OLB" named_guids,rename_namespace("MSPPT") \
8 rename("RGB","PPTRGB")
9 using namespace MSPPT;
    VBA對象的使用和前兩點有些不同,例如:
1 CComPtr<IDispatch> m_pApplication;
2 pApplication->QueryInterface(__uuidof(IDispatch), (LPVOID*)&m_pApplication);
3 MSPPT::_ApplicationPtr pApp;
4 m_pApplication->QueryInterface(__uuidof(MSPPT::_ApplicationPtr),(LPVOID*)&pApp);
    該調(diào)用方法缺點是調(diào)用比較麻煩,但是優(yōu)點是可以使用虛函數(shù)。例如_Application類中的get_HWND方法。
 
4. VS2005中開發(fā)插件-事件的加入
   
PPT中的提供的事件及注冊消息號如下表(詳細請參見MSDN文章How to handle PowerPoint 2000 events or PowerPoint 2002 events by using Visual C++ .NET 2002 or Visual C++ .NET 2003 and Microsoft Foundation Classes):
DISPID Method Name PowerPoint 2002 Only
2001 WindowSelectionChange  
2002 WindowBeforeRightClick  
2003 WindowBeforeDoubleClick  
2004 PresentationClose  
2005 PresentationSave  
2006 PresentationOpen  
2007 NewPresentation  
2008 PresentationNewSlide  
2009 WindowActivate  
2010 WindowDeactivate  
2011 SlideShowBegin  
2012 SlideShowNextBuild  
2013 SlideShowNextSlide  
2014 SlideShowEnd  
2015 PresentationPrint  
2016 SlideSelectionChanged x
2017 ColorSchemeChanged x
2018 PresentationBeforeSave x
2019 SlideShowNextClick x

    首先在OnConnection函數(shù)中連接到事件源(establish a connection with the event source represented by pUnk),如下:
1 pApplication->QueryInterface(__uuidof(IDispatch), (LPVOID*)&m_pApplication);
2 pAddInInst->QueryInterface(__uuidof(IDispatch), (LPVOID*)&m_pAddInInstance);
3 EApplicationEvents::DispEventAdvise(m_pApplication);
    同樣,OnDisconnection中斷開事件的連接:
1 EApplicationEvents::DispEventUnadvise(m_pApplication)
    注冊事件函數(shù),以PRESENTATIONOPEN事件為例,Connect.h中的代碼如下:
 1 _ATL_FUNC_INFO OnPresentationOpenInfo ={CC_STDCALL,VT_EMPTY,1,VT_DISPATCH};
 2 #define PPTADDIN_PRESENTATIONOPEN        2006
 3 class ATL_NO_VTABLE CConnect : 
 4     public CComObjectRootEx<CComSingleThreadModel>,
 5     public CComCoClass<CConnect, &CLSID_Connect>,
 6     public IDispatchImpl<AddInDesignerObjects::_IDTExtensibility2, &AddInDesignerObjects::IID__IDTExtensibility2, &AddInDesignerObjects::LIBID_AddInDesignerObjects, 10>,
 7     public IDispEventSimpleImpl<1,CConnect,&__uuidof(MSPPT::EApplication)>
 8 {
 9 public:
10     typedef IDispEventSimpleImpl<1,CConnect,&__uuidof(MSPPT::EApplication)> EApplicationEvents;
11     CConnect()
12     {
13     }
14 
15 DECLARE_REGISTRY_RESOURCEID(IDR_ADDIN)
16 DECLARE_NOT_AGGREGATABLE(CConnect)
17 
18 BEGIN_COM_MAP(CConnect)
19     COM_INTERFACE_ENTRY(IDispatch)
20     COM_INTERFACE_ENTRY(AddInDesignerObjects::IDTExtensibility2)
21 END_COM_MAP()
22 
23 BEGIN_SINK_MAP(CConnect)
24     SINK_ENTRY_INFO(1, __uuidof(MSPPT::EApplication),/*dispid*/ 2006, OnPresentationOpen, &OnPresentationOpenInfo)
25     
26 END_SINK_MAP()
27 
28     DECLARE_PROTECT_FINAL_CONSTRUCT()
29 
30     HRESULT FinalConstruct()
31     {
32         return S_OK;
33     }
34 
35     void FinalRelease() 
36     {
37     }
38 
39 public:
40     //IDTExtensibility2 implementation:
41     STDMETHOD(OnConnection)(IDispatch * Application, AddInDesignerObjects::ext_ConnectMode ConnectMode, IDispatch *AddInInst, SAFEARRAY **custom);
42     STDMETHOD(OnDisconnection)(AddInDesignerObjects::ext_DisconnectMode RemoveMode, SAFEARRAY **custom );
43     STDMETHOD(OnAddInsUpdate)(SAFEARRAY **custom );
44     STDMETHOD(OnStartupComplete)(SAFEARRAY **custom );
45     STDMETHOD(OnBeginShutdown)(SAFEARRAY **custom );
46 private:
47     CComPtr<IDispatch> m_pApplication;
48     CComPtr<IDispatch> m_pAddInInstance;
49 
50 protected:
51     typedef IDispEventSimpleImpl</*nID =*/ 1,CConnect, &__uuidof(MSPPT::EApplication)> ApplicationEvents;
52     void __stdcall OnPresentationOpen(IDispatch * pres);
53 };

    Connect.cpp中添加OnPresentationOpen的源代碼。
    需要注意的是OnPresentationOpen函數(shù)的調(diào)用方式是__stdcall,否則編譯會出錯。




posted on 2007-06-20 17:58 迷宮の未來 閱讀(6842) 評論(3)  編輯 收藏 引用

評論

# re: 開發(fā)OFFICE插件總結(jié)[未登錄] 2009-02-18 08:58 fancy

不錯,很有參考價值
  回復(fù)  更多評論   

# re: 開發(fā)OFFICE插件總結(jié) 2009-04-09 11:20 David Lee

好文,正好要做個word2003的插件。謝謝山大王了  回復(fù)  更多評論   

# re: 開發(fā)OFFICE插件總結(jié)[未登錄] 2009-09-02 10:56 li

很有價值  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導(dǎo)航

統(tǒng)計

常用鏈接

留言簿(10)

隨筆檔案

文章檔案

最新隨筆

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美大片一区| 亚洲美女av黄| 亚洲高清视频一区| 亚洲午夜高清视频| 亚洲一区二区高清视频| 亚洲日韩欧美视频| 一区二区不卡在线视频 午夜欧美不卡在| 99re6热只有精品免费观看| 在线亚洲一区| 亚洲一二三四久久| 亚洲欧美激情诱惑| 国语自产精品视频在线看一大j8 | 中文有码久久| 久久精品av麻豆的观看方式| 好看的日韩av电影| 亚洲国产mv| 免费不卡在线观看| 亚洲人成久久| 国产精品美女主播| 久久裸体视频| 欧美国产三区| 欧美在线免费一级片| 一区二区成人精品 | 欧美日韩国语| 欧美大片在线看免费观看| 欧美日韩日日骚| 欧美精品在线观看播放| 久久国产精品一区二区三区| 亚洲欧洲在线视频| 欧美黄色视屏| 亚洲一区二区三区精品在线| 亚洲精品小视频在线观看| 午夜国产精品视频免费体验区| 亚洲韩国精品一区| 欧美二区在线播放| 免费在线观看成人av| 亚洲精品在线免费| 久久久久久久综合色一本| 欧美日韩影院| 亚洲国产精品国自产拍av秋霞| 亚洲精品久久久久久一区二区| 韩国福利一区| 亚洲高清电影| 久久久国产精彩视频美女艺术照福利| 国产亚洲精品bt天堂精选| 影音先锋在线一区| 久久久噜噜噜久久中文字免| 免费欧美日韩| 久久精品国产久精国产思思| 猛男gaygay欧美视频| 亚洲黄网站在线观看| 宅男精品视频| 亚洲美女视频在线观看| 午夜久久久久久| 一区二区三区国产在线| 亚洲国产精品久久久久秋霞影院| av成人天堂| 亚洲精品在线免费| 久久精品国产一区二区三区| 亚洲精品三级| 欧美一区二区三区在线视频 | 一区二区三区日韩欧美| 欧美在线不卡| 国产精品99久久久久久人 | 国产日韩欧美在线| 欧美va亚洲va日韩∨a综合色| 国产精品多人| 久久久91精品| 国产精品一区免费视频| 一本色道久久综合一区| 午夜精品剧场| 亚洲第一在线视频| 欧美一区二区成人| 欧美亚男人的天堂| 国产精品美女一区二区| 日韩天天综合| 久久综合九色| 夜夜嗨av一区二区三区| 久久久久久久久伊人| 一区二区三区导航| 久久九九久精品国产免费直播| 欧美精品福利在线| 免费中文字幕日韩欧美| 国产亚洲人成网站在线观看| 亚洲一区二区三区久久| 亚洲精品国精品久久99热| 玖玖精品视频| 免费一级欧美片在线观看| 在线播放不卡| 美国成人毛片| 久久精品盗摄| 好吊日精品视频| 久久蜜桃资源一区二区老牛 | 亚洲激情影院| 欧美a级片网站| 亚洲精品久久7777| 亚洲国产精品一区二区www在线| 免费观看亚洲视频大全| 亚洲欧洲精品一区二区| 亚洲高清一区二区三区| 欧美激情精品久久久久久蜜臀| 9i看片成人免费高清| 欧美日韩1234| 亚洲精品日韩在线| 一本久道久久久| 国产精品国产福利国产秒拍| 亚洲一区在线看| 亚洲性人人天天夜夜摸| 一二三四社区欧美黄| 国产精品欧美日韩一区| 久久久久久有精品国产| 欧美freesex8一10精品| 亚洲国产乱码最新视频| 午夜精品视频在线观看一区二区| 黄色小说综合网站| 老**午夜毛片一区二区三区| 久久人91精品久久久久久不卡| 亚洲国产一区二区三区青草影视| 亚洲精品自在久久| 久久久久九九九| 亚洲一区二区三区免费视频| 亚洲欧洲99久久| 亚洲国产综合在线看不卡| 久久人人看视频| 免费亚洲婷婷| 欧美一区二区三区视频免费| 老鸭窝亚洲一区二区三区| 日韩午夜中文字幕| 亚洲欧美日韩国产中文| 亚洲高清在线观看| 亚洲一区二区免费看| 精品69视频一区二区三区| 久久久免费av| 蜜臀久久99精品久久久画质超高清 | 国产精品欧美日韩一区二区| 欧美成人精品1314www| 亚洲日本一区二区三区| 国产精品久久国产精麻豆99网站| 蜜乳av另类精品一区二区| 欧美无乱码久久久免费午夜一区| 在线亚洲免费视频| 美女91精品| 久久女同互慰一区二区三区| 欧美视频在线观看一区| 欧美成人午夜视频| 国产一区二区在线免费观看| 日韩一区二区精品| 亚洲精品黄色| 久久亚洲精品视频| 久久久精品一区| 欧美91视频| aaa亚洲精品一二三区| 亚洲区在线播放| 久久一二三国产| 久久综合久久综合九色| 国产日产欧产精品推荐色 | 久久精品一区二区三区不卡牛牛| 亚洲男人的天堂在线aⅴ视频| 午夜精品久久久99热福利| 亚洲黄色一区二区三区| 欧美一区二区三区精品电影| 亚洲欧美日韩精品在线| 欧美日韩麻豆| 99热这里只有成人精品国产| 一区二区精品国产| 欧美三级欧美一级| 9l视频自拍蝌蚪9l视频成人| 宅男精品导航| 久久成人18免费观看| 亚洲高清不卡在线| 亚洲精品在线免费| 欧美大片18| 亚洲电影毛片| 久久在线免费| 狠狠色综合网| 免费欧美高清视频| 激情欧美国产欧美| 久久精品女人的天堂av| 久久在线视频在线| 一区二区三区免费在线观看| 欧美日韩一区自拍| 久久久精品一区二区三区| 久久综合久久久| 亚洲砖区区免费| 国产日韩一区二区三区在线| 欧美在线高清| 亚洲第一福利社区| 在线综合亚洲欧美在线视频| 欧美国产亚洲视频| 亚洲午夜一二三区视频| 久久精品欧美日韩| 亚洲国产日韩综合一区| 欧美日韩另类在线| 午夜精品久久一牛影视| 噜噜噜在线观看免费视频日韩| 亚洲伦理久久| 亚洲国产日韩在线一区模特| 欧美色图五月天| 欧美精品电影在线| 午夜久久久久久|