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

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

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

1. VC6.0中使用VBA
    在VC6.0中,可以使用導(dǎo)入類型庫功能,即可連接到所需的OLB文件,并且可以選擇導(dǎo)入的類。然后可以直接聲明對(duì)象,如_Application m_app。需要注意的是,導(dǎo)入的類只能是實(shí)體類,包含虛函數(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對(duì)象的使用和前兩點(diǎn)有些不同,例如:
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ǎn)是調(diào)用比較麻煩,但是優(yōu)點(diǎn)是可以使用虛函數(shù)。例如_Application類中的get_HWND方法。
 
4. VS2005中開發(fā)插件-事件的加入
   
PPT中的提供的事件及注冊(cè)消息號(hào)如下表(詳細(xì)請(qǐng)參見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)
    注冊(cè)事件函數(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,否則編譯會(huì)出錯(cuò)。




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

評(píng)論

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

不錯(cuò),很有參考價(jià)值
  回復(fù)  更多評(píng)論   

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

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

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

很有價(jià)值  回復(fù)  更多評(píng)論   


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


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(10)

隨筆檔案

文章檔案

最新隨筆

搜索

積分與排名

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产日韩欧美中文在线播放| 久久成人在线| 亚洲一区二区在线| 亚洲精品少妇网址| 一区二区三区日韩欧美精品| 夜夜嗨一区二区| 亚洲精品中文字幕女同| 一区二区三区日韩在线观看| 亚洲影视在线播放| 久久国产日本精品| 久久免费少妇高潮久久精品99| 久久精品动漫| 欧美ed2k| 亚洲一级在线| 久久国产综合精品| 欧美福利一区| 国产精品五区| 最新国产の精品合集bt伙计| 亚洲精品久久久久久下一站 | 麻豆av一区二区三区| 裸体女人亚洲精品一区| 欧美国产一区二区| 一本一本a久久| 欧美在线综合视频| 欧美日韩国产成人| 国产亚洲欧美日韩一区二区| 亚洲国内高清视频| 欧美亚洲专区| 亚洲国产小视频在线观看| 亚洲美女区一区| 久久精品噜噜噜成人av农村| 欧美日韩亚洲视频一区| 国内精品免费午夜毛片| 一本一本久久a久久精品综合麻豆| 久久国产精品毛片| aa亚洲婷婷| 欧美成人免费视频| 伊人久久大香线蕉综合热线| 亚洲一区二区三区乱码aⅴ| 免费成人av在线看| 亚洲欧美资源在线| 欧美色综合天天久久综合精品| 怡红院精品视频在线观看极品| 亚洲视频在线播放| 亚洲国产91| 久久青青草综合| 国产视频一区在线观看| 国产精品99久久久久久久vr| 欧美.com| 久久久噜噜噜久久人人看| 国产精品亚洲人在线观看| 一区二区三区久久精品| 亚洲二区视频| 免费亚洲电影在线观看| 黄色成人在线| 久久综合久久综合久久综合| 欧美一区二区三区四区在线观看| 国产精品大全| 亚洲制服av| 亚洲性线免费观看视频成熟| 欧美日韩亚洲国产一区| 亚洲午夜视频在线| 一区二区久久久久| 国产精品毛片大码女人| 午夜精品国产更新| 亚洲欧美日韩精品综合在线观看| 国产精品剧情在线亚洲| 亚洲欧美一区二区三区极速播放| 亚洲最新在线视频| 欧美日韩精品一本二本三本| 一区二区三区欧美在线| 一区二区三区视频在线观看| 国产精品s色| 欧美一区二区三区的| 久久国产精品72免费观看| 1769国产精品| 亚洲国产欧美日韩| 欧美涩涩视频| 久久国产一区| 免费视频一区| 亚洲女同在线| 亚洲精品久久嫩草网站秘色 | 欧美日韩网址| 亚洲免费福利视频| 日韩视频亚洲视频| 国产精品乱码| 久久综合九色九九| 欧美剧在线观看| 亚洲欧美一区二区三区极速播放 | 美女视频黄免费的久久| 99国产精品视频免费观看一公开| 在线亚洲+欧美+日本专区| 国产精品亚洲一区| 能在线观看的日韩av| 欧美人妖在线观看| 久久免费视频一区| 欧美久久久久久| 久久精品人人爽| 欧美久久一区| 久久综合给合久久狠狠狠97色69| 欧美大秀在线观看| 久久久久国产精品午夜一区| 欧美~级网站不卡| 欧美一区二区播放| 欧美喷潮久久久xxxxx| 久久精品最新地址| 欧美日韩在线不卡一区| 免费成人黄色av| 国产精品一二| 亚洲精品久久久一区二区三区| 国产在线播放一区二区三区| 亚洲欧洲日韩综合二区| 红桃av永久久久| 亚洲男人的天堂在线| 亚洲精品久久| 久久综合九色欧美综合狠狠| 亚洲欧美日本视频在线观看| 欧美国产大片| 欧美国产激情二区三区| 国产亚洲精品aa| 午夜激情一区| 午夜激情亚洲| 欧美性猛交一区二区三区精品| 欧美激情视频网站| 伊人激情综合| 久久国产精品网站| 久久国产精品色婷婷| 国产精品久久久久久久久| 亚洲国产日韩欧美在线图片| 在线日韩视频| 久久一区二区精品| 欧美69wwwcom| 亚洲欧洲美洲综合色网| 久热精品在线视频| 欧美不卡高清| 亚洲国产日韩欧美一区二区三区| 久久久久国产精品午夜一区| 久久精品视频99| 国产亚洲一本大道中文在线| 国产精品美腿一区在线看 | 亚洲第一天堂无码专区| 性色av一区二区三区在线观看| 亚洲午夜影视影院在线观看| 欧美激情第9页| 亚洲精品欧美在线| 亚洲视频成人| 欧美亚洲第一页| 亚洲天堂网在线观看| 亚洲欧美国产日韩中文字幕| 欧美图区在线视频| 亚洲一区二区精品在线观看| 亚洲欧美三级在线| 国产一区二区毛片| 久久久久久97三级| 欧美高清在线一区| 亚洲午夜激情网站| 国产精品一级久久久| 久久精品91久久香蕉加勒比 | 欧美中文在线字幕| 黑人操亚洲美女惩罚| 久久综合中文色婷婷| 亚洲国产精品福利| 亚洲欧美一区在线| 国产一区欧美| 欧美成人影音| 亚洲夜晚福利在线观看| 美脚丝袜一区二区三区在线观看| 怡红院av一区二区三区| 欧美日韩aaaaa| 亚洲淫性视频| 欧美成人激情视频| 亚洲欧美美女| 亚洲国产精品一区二区第四页av| 欧美国产亚洲视频| 亚洲欧美综合精品久久成人| 亚洲电影在线| 久久久精品一品道一区| 亚洲久久一区| 国模套图日韩精品一区二区| 欧美成人午夜77777| 亚洲欧美国产高清va在线播| 欧美韩日一区| 久久九九热免费视频| 在线视频欧美日韩精品| 激情视频一区二区| 欧美午夜视频网站| 欧美激情第二页| 久久精品国产亚洲aⅴ| 在线视频一区二区| 亚洲日本在线观看| 久久午夜av| 午夜性色一区二区三区免费视频| 亚洲第一天堂无码专区| 国产日韩欧美一区在线| 欧美三级特黄| 欧美精品大片| 久久免费午夜影院| 性xx色xx综合久久久xx| 国产精品99久久久久久人| 亚洲人成网站在线播|