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

開發(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>
            国产欧美日韩在线| 亚洲在线1234| 久久精品日产第一区二区| 欧美调教vk| 久久不射网站| 国产欧美日韩一区二区三区| 亚洲高清自拍| 国产精品无人区| 欧美暴力喷水在线| 9人人澡人人爽人人精品| 亚洲免费高清视频| 欧美精品观看| 美日韩精品免费| 久久免费国产精品1| 91久久午夜| 在线电影一区| 国产精品实拍| 欧美欧美在线| 亚洲一本大道在线| 欧美国产日产韩国视频| 亚洲砖区区免费| 国产亚洲毛片| 国产区二精品视| 欧美黄色小视频| 久久精品人人做人人爽电影蜜月| 欧美成人蜜桃| 午夜精品在线看| 亚洲精品九九| 欧美wwwwww| 久久久久久久久久久久久9999| 久久高清免费观看| 久久激情一区| 蜜臀av在线播放一区二区三区| 亚洲欧美日韩国产中文在线| 性久久久久久久久久久久| 亚洲精品综合| 亚洲精品色图| 黄色另类av| av成人免费在线观看| 亚洲国产日日夜夜| 香蕉久久夜色| 欧美77777| 性欧美大战久久久久久久免费观看 | 久久午夜精品一区二区| 韩国久久久久| 亚洲动漫精品| 亚洲欧美三级在线| 欧美在线亚洲综合一区| 亚洲人www| 久久福利影视| 亚洲国产精品日韩| 亚洲一区二区三区乱码aⅴ| 亚洲午夜一区二区| 欧美日韩免费观看一区 | 亚洲特黄一级片| 亚洲国产精品专区久久| 久久综合九九| 99热精品在线| 欧美高清不卡在线| 激情视频一区二区三区| 亚洲一区亚洲二区| 亚洲欧洲在线播放| 久热精品视频在线观看| 在线观看成人av| 亚洲在线1234| 亚洲激情在线| 你懂的一区二区| 欧美精品在线观看91| 黄色小说综合网站| 日韩视频在线观看| 老司机精品视频一区二区三区| 欧美在线视屏| 久久久99爱| 亚洲精品免费一二三区| 欧美fxxxxxx另类| 欧美日韩国产一区精品一区| 娇妻被交换粗又大又硬视频欧美| 久久久久国产精品www| 亚洲综合色噜噜狠狠| 免费永久网站黄欧美| 亚洲视频图片小说| 亚洲国产1区| 国产乱码精品一区二区三区五月婷| 亚洲欧美日韩系列| 亚洲综合国产| 国产精品九九久久久久久久| 久久久精品动漫| 亚洲人午夜精品| 欧美aⅴ99久久黑人专区| 狠狠色狠色综合曰曰| 亚洲肉体裸体xxxx137| 午夜精品久久久久久久久久久久久| 一区二区三区在线免费播放| 亚洲国内自拍| 99国产一区| 巨胸喷奶水www久久久免费动漫| 一区二区三区波多野结衣在线观看| 91久久中文| 亚洲午夜精品一区二区| 欧美色欧美亚洲另类七区| 欧美国产高清| 国产伦精品一区二区三区照片91| 久久综合色一综合色88| 精品成人在线观看| 欧美成人精品在线| 一本色道88久久加勒比精品 | 国产精品影院在线观看| 久久青青草综合| 国产欧美在线观看| 欧美有码在线视频| 久久久夜精品| 伊人精品久久久久7777| 久久婷婷av| 欧美激情自拍| 久久本道综合色狠狠五月| 一区二区在线观看视频| 欧美色视频日本高清在线观看| 宅男精品视频| 麻豆久久久9性大片| 在线观看精品视频| 国产欧美日韩一区二区三区在线观看 | 欧美性色综合| 亚洲人成网站777色婷婷| 99精品国产在热久久| 欧美午夜久久久| 午夜视黄欧洲亚洲| 亚洲日本中文| 欧美国产精品一区| 久久国产精彩视频| 亚洲激情中文1区| 国产精品综合色区在线观看| 欧美国产精品va在线观看| 亚洲一区精品电影| 亚洲免费视频观看| 亚洲精品在线视频观看| 欧美一区二区三区电影在线观看| 一本久久综合| 亚洲欧美日韩在线观看a三区| 国产字幕视频一区二区| 久久精品女人的天堂av| 亚洲综合日韩在线| 99精品国产高清一区二区| 你懂的视频一区二区| 欧美freesex8一10精品| 亚洲欧美激情在线视频| 午夜欧美不卡精品aaaaa| 亚洲在线观看免费视频| 亚洲欧美国内爽妇网| 久久九九精品99国产精品| 久久免费黄色| 欧美高清你懂得| 亚洲国产影院| 亚洲一区欧美| 亚洲欧美成人一区二区三区| 性高湖久久久久久久久| 欧美日韩国产黄| 国产精品日韩一区| 黄色一区三区| 欧美激情五月| 国产精品video| 国内精品久久久久久久97牛牛| 日韩视频中文字幕| 欧美国产精品劲爆| 欧美亚洲在线| 国产午夜精品久久久久久免费视| 国产精品一区二区男女羞羞无遮挡| 在线欧美日韩| 久久久国产一区二区三区| 久久亚洲图片| 久久久人成影片一区二区三区| 欧美日韩国产页| 一本色道久久加勒比精品| 久久激情一区| 女生裸体视频一区二区三区| 亚洲精品欧美在线| 日韩视频一区二区| 蜜月aⅴ免费一区二区三区| 国产精品每日更新| 蜜臀a∨国产成人精品| 欧美日韩免费高清一区色橹橹| 红桃视频国产一区| 久久久久久有精品国产| 一区二区三区欧美| 欧美久久久久久蜜桃| 欧美在线一级视频| 亚洲免费视频网站| 欧美成人免费一级人片100| 日韩午夜在线观看视频| 一本色道久久综合一区| 国产精品一区毛片| 免费看av成人| 一区二区三区高清| 久久久久久久久岛国免费| 精品av久久707| 免费看精品久久片| 国产精品初高中精品久久| 六月丁香综合| 国产一区二区福利| 午夜国产精品影院在线观看 | 最新高清无码专区|