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

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

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

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

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

3. VS2005中開(kāi)發(fā)插件
    VS2005中,可以直接利用Project Wizard來(lái)開(kāi)發(fā)OFFICE插件程序。
    生成的程序框架包含Connect.h,Connect.cpp,類(lèi)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類(lèi)中的get_HWND方法。
 
4. VS2005中開(kāi)發(fā)插件-事件的加入
   
PPT中的提供的事件及注冊(cè)消息號(hào)如下表(詳細(xì)請(qǐng)參見(jiàn)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中斷開(kāi)事件的連接:
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 迷宮の未來(lái) 閱讀(6849) 評(píng)論(3)  編輯 收藏 引用

評(píng)論

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

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

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

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

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

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


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


<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

導(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>
            美女精品视频一区| 国产一区二区三区观看| 亚洲一区二区影院| 亚洲一区二区三区高清不卡| 亚洲神马久久| 亚洲综合视频在线| 久久狠狠久久综合桃花| 久久婷婷久久一区二区三区| 欧美r片在线| 欧美日韩视频一区二区| 国产精品永久入口久久久| 国产一区二区三区的电影 | 欧美激情中文字幕乱码免费| 亚洲国产精品尤物yw在线观看| 欧美大片在线观看一区| 日韩亚洲欧美在线观看| 欧美亚洲日本网站| 免费中文字幕日韩欧美| 欧美亚一区二区| 一区二区三区自拍| 亚洲午夜91| 美女精品国产| 亚洲午夜电影在线观看| 久久综合给合| 国产精品日韩精品欧美精品| 亚洲国产精品123| 欧美一二三视频| 亚洲人成毛片在线播放| 欧美一区二区三区免费大片| 欧美黄色小视频| 一区二区欧美在线观看| 性欧美暴力猛交69hd| 欧美激情1区2区3区| 国产一级揄自揄精品视频| av成人激情| 欧美国产精品中文字幕| 午夜精品久久| 欧美体内she精视频| 亚洲三级免费电影| 美腿丝袜亚洲色图| 欧美一区二区三区婷婷月色| 国产精品久久97| 一区二区成人精品| 亚洲国产精品成人综合| 久久婷婷综合激情| 国产在线乱码一区二区三区| 亚洲欧美综合| 亚洲性感激情| 国产精品久久影院| 亚洲综合精品| 在线一区二区三区做爰视频网站| 狼人社综合社区| 狠久久av成人天堂| 久久久久久自在自线| 亚洲一区二区三区中文字幕| 欧美私人啪啪vps| 亚洲视频网在线直播| 亚洲久久一区| 欧美三区美女| 亚洲欧美国产日韩天堂区| 一区二区三区.www| 国产精品久久久久久模特| 亚洲女人天堂成人av在线| 一区二区三区欧美亚洲| 国产精品99免费看| 午夜久久资源| 久久aⅴ国产紧身牛仔裤| 国产亚洲欧洲一区高清在线观看 | 亚洲成色最大综合在线| 裸体歌舞表演一区二区| 久久婷婷丁香| 亚洲伦理久久| 夜夜嗨av色综合久久久综合网 | 久久久天天操| 亚洲国产欧美在线| 最新国产成人av网站网址麻豆| 欧美激情视频在线播放 | 亚洲黄色成人网| 欧美视频精品在线观看| 欧美一区成人| 久久午夜精品一区二区| 亚洲精品免费电影| 中国女人久久久| 国语自产精品视频在线看8查询8| 在线日韩电影| 国产精品人人做人人爽| 久久成人这里只有精品| 久久高清一区| 9l视频自拍蝌蚪9l视频成人| 亚洲女ⅴideoshd黑人| 伊人一区二区三区久久精品| 亚洲欧洲日本mm| 国产女主播一区| 亚洲国产精品999| 国产精品久久网| 欧美激情视频网站| 国产精品私房写真福利视频| 欧美激情久久久| 国产精品色在线| 亚洲国产欧美一区| 国产丝袜美腿一区二区三区| 亚洲第一主播视频| 国产亚洲欧美日韩日本| 日韩视频一区二区三区| 激情懂色av一区av二区av| 一区二区三区免费看| 亚洲精品123区| 久久精品99无色码中文字幕| 亚洲一区二区视频在线| 久久综合久久久久88| 久久av一区二区三区| 欧美日韩高清不卡| 欧美成人午夜剧场免费观看| 国产精品美女久久久浪潮软件| 亚洲大胆人体视频| 国内精品美女av在线播放| 国产精品99久久久久久www| 亚洲国产91色在线| 欧美怡红院视频一区二区三区| 亚洲性视频网站| 欧美精品日韩一本| 欧美护士18xxxxhd| 影音先锋日韩精品| 久久精品免费观看| 久久久91精品国产| 国产麻豆日韩欧美久久| 一本色道久久综合亚洲精品按摩| 亚洲三级影片| 欧美国产一区二区在线观看| 欧美成人精品| 亚洲高清视频中文字幕| 久久午夜电影网| 欧美成人伊人久久综合网| 国产在线精品二区| 久久精品欧洲| 欧美91精品| 亚洲三级毛片| 欧美日本三区| 在线午夜精品| 欧美一区国产二区| 国产午夜精品视频| 欧美中文字幕精品| 久久综合九色综合久99| 136国产福利精品导航| 久久精品在线播放| 欧美a级片网| 99视频精品全国免费| 欧美三区不卡| 午夜精品福利一区二区三区av| 久久国产精品电影| 亚洲大片免费看| 欧美人与禽猛交乱配| 欧美中文字幕在线| 国产亚洲激情| 久久手机精品视频| 亚洲国产日韩一级| 一区二区三区视频在线| 国产精品日韩二区| 久久久久99精品国产片| 亚洲国产天堂久久综合网| 亚洲一二三区精品| 国产亚洲亚洲| 欧美大成色www永久网站婷| 一区二区电影免费观看| 欧美在线免费一级片| 精品51国产黑色丝袜高跟鞋| 欧美**人妖| 午夜国产精品影院在线观看| 欧美电影免费| 亚洲图色在线| 在线看国产一区| 欧美午夜精品久久久久久浪潮| 亚洲欧美日韩电影| 亚洲国产视频一区二区| 香蕉尹人综合在线观看| 亚洲国产成人久久综合| 国产精品初高中精品久久| 久久精彩免费视频| 99在线精品视频| 欧美成人第一页| 欧美一区午夜精品| 亚洲精品资源| 在线成人小视频| 国产精品视频内| 欧美激情国产日韩精品一区18| 亚洲免费影院| 亚洲免费观看| 欧美激情视频在线播放| 久久国产日本精品| 亚洲午夜久久久久久久久电影院 | 久久亚洲一区二区| 亚洲欧美在线另类| 亚洲老板91色精品久久| 国内揄拍国内精品少妇国语| 国产精品成人免费精品自在线观看| 久久综合给合| 久久婷婷色综合| 久久久久免费视频| 欧美亚洲午夜视频在线观看| 在线亚洲一区二区|