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

開發(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>
            久久久国产一区二区三区| 亚洲日本欧美| 久久成人国产精品| 国产精品一区免费视频| 亚洲综合大片69999| 亚洲素人在线| 国语精品中文字幕| 欧美99在线视频观看| 麻豆国产精品777777在线| 亚洲国产精品久久久久久女王| 久热综合在线亚洲精品| 蘑菇福利视频一区播放| 日韩视频永久免费| 一本一道久久综合狠狠老精东影业 | 久久精品天堂| 久久久亚洲一区| 亚洲乱码一区二区| 亚洲色图制服丝袜| 激情久久综合| 亚洲精品在线观看免费| 国产欧美69| 欧美高清视频一区二区| 欧美三级视频| 欧美sm视频| 国产精品美女久久福利网站| 久久一区二区三区超碰国产精品| 欧美国产一区在线| 久久久精品久久久久| 欧美精品一区在线播放| 久久国产主播精品| 欧美剧在线观看| 久久天堂成人| 国产精品免费观看在线| 欧美激情精品久久久久久免费印度| 欧美吻胸吃奶大尺度电影| 免费人成网站在线观看欧美高清| 欧美午夜精品久久久久久久 | 国产精品99久久99久久久二8 | 欧美成人一区二区三区片免费| 亚洲特色特黄| 狼人社综合社区| 性高湖久久久久久久久| 欧美激情精品| 亚洲国产精品一区二区三区| 国产日韩欧美一区二区三区在线观看 | 麻豆精品视频| 久久久久国产精品午夜一区| 国产精品久久久久免费a∨| 亚洲国产激情| 亚洲人体1000| 欧美.日韩.国产.一区.二区| 久久视频这里只有精品| 国产三区精品| 午夜在线视频观看日韩17c| 亚洲午夜精品久久| 免费短视频成人日韩| 欧美中日韩免费视频| 欧美日本国产一区| 欧美电影电视剧在线观看| 久久久噜久噜久久综合| 亚洲桃花岛网站| 欧美激情视频一区二区三区免费| 久久综合一区二区三区| 国产精品久久久久久久久婷婷| 亚洲成人在线视频网站| 激情六月婷婷久久| 欧美亚洲综合网| 亚洲欧美日韩在线| 久久一二三四| 亚洲第一页中文字幕| 激情小说另类小说亚洲欧美| 亚洲一区二区三| 亚洲欧美久久| 国产精品区二区三区日本| 艳女tv在线观看国产一区| 亚洲精品久久久久| 欧美激情一区在线| 亚洲第一黄色| 日韩亚洲欧美高清| 欧美激情va永久在线播放| 亚洲福利电影| 亚洲伦理中文字幕| 欧美国产精品专区| 亚洲黄色av| 99视频一区二区| 欧美日韩高清在线一区| 免费视频一区| 国产精品99久久久久久久久久久久 | 亚洲美女视频| 欧美日本一道本| 日韩视频在线永久播放| 在线视频欧美精品| 国产精品视频1区| 久久综合九色综合久99| 麻豆精品一区二区综合av| 一区二区三区在线观看国产| 老司机精品福利视频| 亚洲精品日韩在线观看| 亚洲综合精品| 国产一区二区三区久久精品| 久久久国产精品一区二区中文| 欧美成人午夜激情视频| 99热免费精品| 国产伦精品一区二区三区视频黑人 | 亚洲欧美一区二区三区久久 | 久久国产精品一区二区| 欧美成人免费视频| 亚洲图片欧洲图片av| 国产欧美一区二区精品性色| 久久亚洲欧美| 亚洲性视频h| 亚洲成色999久久网站| 中文一区字幕| 在线观看欧美激情| 欧美日韩伦理在线| 欧美在线亚洲在线| 亚洲精品久久久久久久久久久| 欧美一级二级三级蜜桃| 在线日韩日本国产亚洲| 久久一区二区三区超碰国产精品| 亚洲男女自偷自拍| 最新亚洲视频| 久久久久久久一区| 亚洲桃花岛网站| 亚洲国产一区视频| 国产欧美日韩在线观看| 欧美~级网站不卡| 久久成人精品一区二区三区| 亚洲成人在线网站| 欧美国产日韩a欧美在线观看| 亚洲欧美精品在线观看| 亚洲片在线观看| 国模精品一区二区三区色天香| 欧美色欧美亚洲高清在线视频| 久久精品女人| 亚洲主播在线| av成人手机在线| 嫩模写真一区二区三区三州| 老司机免费视频一区二区三区| 欧美一区二区三区视频免费播放| 亚洲人成高清| 亚洲国产另类 国产精品国产免费| 国产精品亚洲美女av网站| 欧美片网站免费| 欧美不卡在线视频| 久久久久青草大香线综合精品| 亚洲精品在线视频| 亚洲精品视频免费在线观看| 欧美国产日韩免费| 免费亚洲一区二区| 久久综合伊人77777麻豆| 久久久噜噜噜久久中文字免| 欧美一区二区视频免费观看| 亚洲先锋成人| 亚洲视频综合在线| 国产精品影音先锋| 黄色精品一二区| 在线成人免费观看| 精品999成人| …久久精品99久久香蕉国产 | 久久亚洲视频| 免费在线国产精品| 欧美激情aaaa| 在线一区视频| 午夜一区不卡| 久久xxxx| 久久久午夜视频| 麻豆精品网站| 亚洲国产精品久久久久久女王| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美gay视频激情| 你懂的国产精品永久在线| 免费在线一区二区| 亚洲高清视频在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲国产日韩欧美在线图片| 亚洲人成在线观看| 中日韩美女免费视频网址在线观看| 亚洲视屏一区| 久久免费观看视频| 欧美精品 日韩| 国产精品久久网站| 激情综合网址| 一本久久a久久免费精品不卡| 在线亚洲伦理| 久久国产成人| 久久久久久久一区二区| 99这里只有精品| 久久精品天堂| 欧美日韩激情小视频| 国产婷婷色综合av蜜臀av| 1769国产精品| 亚洲欧美精品一区| 欧美一区二区在线| 欧美激情网友自拍| 亚洲天堂免费观看| 麻豆成人综合网| 国产精品亚洲综合一区在线观看 | 欧美黄色免费| 一区二区三区成人|