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

開發(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ù)的類都無法包含進(jìn)來。

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中的提供的事件及注冊消息號如下表(詳細(xì)請參見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 迷宮の未來 閱讀(6849) 評論(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年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導(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>
            亚洲婷婷综合色高清在线| 一区二区三区精品视频| 久久亚洲综合色一区二区三区| 亚洲国产精品成人综合| 性欧美长视频| 久久精品国产91精品亚洲| 欧美一区二区三区在线看 | 国内一区二区三区在线视频| 国产婷婷精品| 136国产福利精品导航网址应用 | 国产亚洲欧美日韩一区二区| 国产一区二区中文| 狠狠久久综合婷婷不卡| 亚洲精品久久久蜜桃| 亚洲一区免费| 久久国产精品久久久久久| 欧美jizz19性欧美| 日韩视频一区| 欧美在线视频一区| 欧美国产极速在线| 国产精品日韩高清| 亚洲欧洲视频在线| 性欧美大战久久久久久久久| 亚洲风情在线资源站| 香蕉成人啪国产精品视频综合网| 欧美成人一区二免费视频软件| 欧美日韩一区综合| 樱花yy私人影院亚洲| 亚洲专区一二三| 欧美激情中文字幕乱码免费| 亚洲中无吗在线| 美女网站久久| 国产三区精品| 夜夜狂射影院欧美极品| 久久国产精品第一页| 亚洲片国产一区一级在线观看| 欧美亚洲在线视频| 国产精品xvideos88| 亚洲欧洲精品一区| 久久综合久久综合九色| 亚洲午夜一区二区三区| 欧美岛国激情| 激情婷婷亚洲| 欧美一区二区三区视频在线观看| 亚洲国产欧美一区二区三区久久 | 99在线|亚洲一区二区| 久久免费少妇高潮久久精品99| 国产精品v一区二区三区| 亚洲九九九在线观看| 欧美成人久久| 久久婷婷国产综合精品青草| 巨胸喷奶水www久久久免费动漫| 国产精品成人aaaaa网站| 91久久夜色精品国产九色| 毛片一区二区三区| 久久男女视频| 韩日欧美一区二区| 久久电影一区| 亚洲欧美卡通另类91av| 国产精品成人一区二区三区夜夜夜 | 亚洲视频综合| 亚洲欧洲美洲综合色网| 免费亚洲电影| 亚洲国产精品黑人久久久 | 午夜久久久久久久久久一区二区| 欧美日韩一区二| 亚洲一区二区三区久久| 99热精品在线| 国产精品啊v在线| 亚洲少妇一区| 亚洲视频一二| 国产伦精品一区二区三区在线观看 | 免费看成人av| 麻豆91精品91久久久的内涵| 亚洲国产福利在线| 亚洲国产精品免费| 欧美日精品一区视频| 午夜伦欧美伦电影理论片| 亚洲欧美在线aaa| 国产一区二区三区高清播放| 久久视频国产精品免费视频在线| 久久精品一区二区| 亚洲日本中文字幕区| 亚洲蜜桃精久久久久久久| 国产精品国产三级国产普通话三级| 亚洲欧美久久| 久久精品国产96久久久香蕉| 亚洲激情另类| 在线亚洲欧美专区二区| 国产一区二区丝袜高跟鞋图片| 久久影视精品| 欧美美女操人视频| 久久精品国产精品亚洲综合| 老司机成人网| 亚洲一区二区视频在线观看| 欧美一区三区二区在线观看| 亚洲精品资源| 亚洲欧美日本国产有色| 亚洲国产影院| 亚洲欧美不卡| 国产精品久久999| 国产欧美日韩视频一区二区| 美国十次了思思久久精品导航| 欧美精品国产| 久久久精品午夜少妇| 欧美精品成人一区二区在线观看| 亚洲免费婷婷| 狼人天天伊人久久| 欧美一级网站| 欧美激情一区二区久久久| 久久久久久亚洲精品中文字幕| 欧美日韩 国产精品| 久热精品视频在线观看| 国产精品入口夜色视频大尺度 | 能在线观看的日韩av| 欧美日韩另类一区| 亚洲大片精品永久免费| 国产综合欧美在线看| 亚洲天天影视| 亚洲午夜精品福利| 欧美成人免费网站| 免费观看欧美在线视频的网站| 国产精品高潮呻吟久久| 亚洲欧洲视频在线| 亚洲国产精品热久久| 久久久久久久久久看片| 性视频1819p久久| 欧美日韩精品三区| 欧美激情在线| 亚洲电影网站| 久久一区亚洲| 欧美1区2区3区| 在线观看日韩欧美| 久久露脸国产精品| 久久综合久色欧美综合狠狠| 国产欧美va欧美不卡在线| 亚洲美女黄色| 在线一区二区三区做爰视频网站| 亚洲精品国精品久久99热一| 久久九九精品| 久久爱www久久做| 国产欧美日韩另类一区| 亚洲专区在线视频| 久久成人在线| 韩国免费一区| 久久人人九九| 欧美国产综合视频| 9人人澡人人爽人人精品| 欧美日韩亚洲综合在线| 中日韩美女免费视频网站在线观看| 亚洲在线国产日韩欧美| 国产精品日本欧美一区二区三区| 国产精品99久久不卡二区| 在线一区免费观看| 欧美视频在线看| 亚洲综合丁香| 久久这里只有精品视频首页| 亚洲国产精品专区久久| 欧美片在线播放| 亚洲欧美不卡| 欧美高清影院| 亚洲香蕉伊综合在人在线视看| 欧美三级电影精品| 欧美一区二区免费观在线| 久久久五月天| 亚洲国产精品v| 99成人精品| 国产欧美在线播放| 欧美暴力喷水在线| 亚洲一区在线免费观看| 男女av一区三区二区色多| 一区二区三区产品免费精品久久75 | 欧美自拍偷拍午夜视频| 好吊色欧美一区二区三区四区| 久热爱精品视频线路一| 亚洲精品视频在线观看免费| 亚洲一区999| 国内精品视频在线观看| 欧美精品一区二区三区在线看午夜| 亚洲神马久久| 欧美高清视频在线| 欧美影院午夜播放| 一区二区三区高清视频在线观看| 国产亚洲女人久久久久毛片| 欧美精品日韩综合在线| 久久精品国产久精国产一老狼| 亚洲精品一线二线三线无人区| 久久资源av| 欧美尤物巨大精品爽| 在线午夜精品| 在线观看国产日韩| 国产亚洲福利| 国产精品乱码一区二三区小蝌蚪| 老司机免费视频一区二区三区| 亚洲一区二区三区精品动漫| 欧美高清在线| 美女精品一区| 久久夜色精品国产欧美乱| 午夜精品久久久久久99热软件| 亚洲激情自拍|