2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

開發(fā)OFFICE插件總結(jié) - 在夢(mèng)想的天空自由飛翔 - C 博客

 xiaoqdu 2008-11-14

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

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

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

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

3. VS2005中開發(fā)插件
    VS2005中,可以直接利用Project Wizard來(lái)開發(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)參見(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中斷開事件的連接:
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ò)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多