Powerpoint 插件制作日记-1
因?yàn)橐粋€(gè)外包項(xiàng)目的需要,嘗試了在powerpoint上開發(fā)插件,算是一種學(xué)習(xí)精神,準(zhǔn)備讓插件支持powerpoint 2003,2007,2010 三個(gè)版本
其實(shí)如果僅僅只做插件的話還是挺容易,但考慮到2007和2010使用的Ribbon UI以及2003的普通菜單式UI,所以決定做一個(gè)同時(shí)適應(yīng)兩種UI的插件。
最終實(shí)現(xiàn)的效果如下:
Powerpoint 2003 (在工具菜單里面加入 菜單項(xiàng),點(diǎn)擊菜單項(xiàng)后 顯示工具欄)
Powerpoint 2010(在Ribbon tab上添加新的tab, PPA, 然后在此tab里面添加新的按鈕)
實(shí)現(xiàn)過程如下:
打開vs2010新建項(xiàng)目->其他項(xiàng)目類型->擴(kuò)展性->共享的外界程序 然后點(diǎn)擊確定
vs 將打開 共享外接程序向?qū)Ы缑?#xff0c;在向?qū)е幸来蜗乱徊?#xff0c;然后根據(jù)提示選擇以及填寫相關(guān)信息,在這里,我們選擇為Misrosoft Powerpoint(主機(jī))創(chuàng)建項(xiàng)目。
完成后雙擊打開默認(rèn)生成的Connect.cs文件
此類默認(rèn)繼了?Object, Extensibility.IDTExtensibility2兩個(gè)對(duì)象,現(xiàn)在我們?yōu)槠涮砑覫RibbonExtensibility接口,并且實(shí)現(xiàn)接口
接下來在此類的OnConnection方法中處理普通界面的顯示(這里主要針對(duì)2003版)
var menubar = applicationObject.CommandBars["Menu Bar"];var toolsItem = menubar.Controls["工具(&T)"] as CommandBarPopup;if (toolsItem != null){myButton1 = toolsItem.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton;myButton1.Caption = "打開窗口";myButton1.Visible = true;myButton1.Click += new _CommandBarButtonEvents_ClickEventHandler(myButton_Click);myButton2 = toolsItem.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton;myButton2.Caption = "關(guān)閉窗口";myButton2.Visible = false;myButton2.Click += new _CommandBarButtonEvents_ClickEventHandler(myButton_Click);}以上代碼的主要作用是在工具菜單中添加兩個(gè)子項(xiàng):關(guān)閉窗口,打開窗口,并且兩個(gè)按鈕的事件都綁定到myButton_Click上
void myButton_Click(CommandBarButton Ctrl, ref bool CancelDefault) {try{if (toolbar == null){try{toolbar = applicationObject.CommandBars["My_Toolbar"];}catch { }if (toolbar == null){toolbar = applicationObject.CommandBars.Add("My_Toolbar", 1, missing, true);var save = (CommandBarButton)toolbar.Controls.Add(1, missing, missing, missing, missing);save.Caption = "Save";save.Style = Microsoft.Office.Core.MsoButtonStyle.msoButtonIcon;save.Click += new _CommandBarButtonEvents_ClickEventHandler(save_Click);save.Picture = PictureHost.GettIPictureDispFromPicture(RES.android);//PictureHost是繼承自AxHost的一個(gè)類,主要作用是將Image對(duì)象轉(zhuǎn)換為IPictureDisp對(duì)象 }}if (toolbar.Visible){//toolbar.Delete();toolbar.Visible = false;myButton1.Visible = true;myButton2.Visible = false;}else{toolbar.Visible = true;myButton1.Visible = false;myButton2.Visible = true;}}catch (Exception e){MessageBox.Show(e.Message + "\n" + e.StackTrace);} }以上方法主要處理在點(diǎn)擊按鈕的時(shí)候?qū)ぞ邫诘牟僮?#xff08;此處其實(shí)應(yīng)該可以僅采用一個(gè)按鈕,但是不知為何我在測(cè)試的過程中發(fā)現(xiàn),采用一個(gè)按鈕以上代碼不能多次執(zhí)行,也就是說只能在第一次點(diǎn)擊的時(shí)候有效,之后點(diǎn)擊則無效,望高手解答)
通過以上的操作,我們的插件已經(jīng)能實(shí)現(xiàn)在powerpoint 03上顯示菜單和工具欄了,接下來我們來完善對(duì)07,2010的支持
在實(shí)現(xiàn)IRibbonExtensibility接口的GetCustomUI方法中添加代碼,此方法是返回定義Ribbon UI的xml字符串,在這里,我將xml放到了資源文件中,因此,方法內(nèi)容很簡單
public string GetCustomUI(string RibbonID) {return RES.Ribbon2; }Ribbon2的xml格式如下:
<?xml version="1.0" encoding="UTF-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"><ribbon><tabs><tab label="PPA" id="PPA"><group id="PPAGroup" label="PPA Group"><button label="btnA" showImage="true" id="btnA" onAction="button1_Click" /><button label="btnB" showImage="true" id="btnB" onAction="button2_Click" /></group></tab></tabs></ribbon> </customUI>其作用是添加新的名叫PPA的tab,并且在此tab中定義一個(gè)叫PPAGroup的group,此group中添加兩個(gè)按鈕btnA和btnB,分別關(guān)聯(lián)事件button1_Click,button2_Click
button1_Click?button2_Click的定義可以直接放到繼承自IRibbonExtensibility接口的類中,方法定義如下:
public void button1_Click(IRibbonControl control) {System.Windows.Forms.MessageBox.Show("hello"); }這樣,在powerpoint執(zhí)行的時(shí)候就會(huì)自動(dòng)解析xml,并且在觸發(fā)點(diǎn)擊事件的時(shí)候執(zhí)行綁定的方法
?
后續(xù):對(duì)于Ribbon UI xml的生成其實(shí)可以借助vs項(xiàng)目模板中的Office系列,這個(gè)項(xiàng)目模板是基于VSTO的,其實(shí)本來基于VSTO很容易開發(fā)office07,10的插件(截圖中的MyXmltab就是采用vsto的方法開發(fā),此法需要在ThisAddIn.cs文件中添加一個(gè)如下的重寫來實(shí)現(xiàn)Robbin UI的加載
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() {return new Ribbon2(); })但無奈其不支持03,所以我們只能創(chuàng)建普通的外接程序了。
閑話:在做這些之前其實(shí)沒有任何頭緒,期間也google了很多資料,包括msdn的資料也查閱了,但直到完成后發(fā)現(xiàn)其實(shí)挺簡單的,感嘆微軟的工具真的很強(qiáng)大啊!
相關(guān)代碼下載
推薦一個(gè)博客,上面有很多vsto開發(fā)的文章:http://blog.csdn.net/v_jzho
總結(jié)
以上是生活随笔為你收集整理的Powerpoint 插件制作日记-1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps2021直装版|ps2021中文直装
- 下一篇: 影驰gtx960显卡怎么样_影驰gtx9