使用RibbonX在ppt中插入按钮

一、在Ribbon功能区上自定义界面

1.1Ribbon简介

在Office 2007中,Microsoft使用了称作Ribbon的全新界面,Ribbon对应的部分如下图的1区域,它包括以下部分:Office Button(按钮,区域2), Quick Access(快速访问工具栏,区域3), Tabs(选项卡,区域4), Contextual Tabsets(上下文标签集,区域5), Groups Tabs(组选项卡,区域6)

 

1.2初识RibbonX

RibbonX是一种供开发者或最终用户定制功能区的方法,即功能区的可编程机制。功能区(Ribbon)是Office 2007应用程序界面的一部分,而RibbonX是指通过使用XML为自定义的应用程序来创建功能区元素(组件)的编程接口。

1.3实现接口IRibbonExtensibility

        IRibbonExtensibility定义在Office类型库中,该类型库的id为{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52},在头文件开头处导入类型库

C++

#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" version("2.5") auto_rename auto_search raw_interfaces_only rename_namespace("Office")

 

该接口只有一个函数,重写GetCustomUI,该函数主要用来加载自定义界面XML文件,通过出参RibbonXml获取xml中的内容。

涉及太多COM内容,用法可以参考资料:https://blog.csdn.net/u011304970/article/details/72863693

1.4XML中各元素的用法

  1. 在开始前插入新的Test选项卡,并在Groups Tabs中添加按钮

XML

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

    <ribbon>

        <tabs>

            <tab id="myTab" insertBeforeMso ="TabHome" label="我的选项卡">

                <group id="Group1" label="第一组">

                    <button id="NewCustomButton"

                        imageMso="WebPagePreview"

                        size="large"

                        label="测试按钮"

                        onAction="ButtonClicked"/>

                </group>

                <group id="Group2" label="第二组">

                    <button id="Button1"

                            label="按钮1"

                            imageMso="Bold"/>

                    <button id="Button2"

                            label="按钮2"

                            imageMso="Italic"/>

                    <button id="Button3"

                            label="按钮3"

                            imageMso="Underline"/>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

xmlns为命名空间,其中包含所有元素名字的定义

tab元素中的属性insertBeforeMso 作用是在指定的idMso前插入选项卡,tab所有的属性可以在以下网站找到:

[MS-CUSTOMUI]: tab (Tab) | Microsoft Learn

TabHome为开始选项卡的idMso,所有idMso可以在以下网站找到:

[MS-CUSTOMUI]: PowerPoint 2007 | Microsoft Learn

imageMso是office自带的图片资源

onAction中的字符串是点击按钮时调用的函数,需要在工程代码中定义

 

  1. 在Office Button中插入菜单项和二级菜单(office2009后没法使用)

HTML

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="LoadImage">

    <ribbon>

        <officeMenu>

            <button id="rxOMBtn1" label="My Office Button1"/>

            <button id="rxOMBtn2" label="My Office Button2"/>

            <menu id="MyOfficeMenu" label="My Office Menu">

                <button id="rxSend1" label="My Menu1"/>

            </menu>

        </officeMenu>

     </ribbon>

</customUI>

 

其他元素用法可以参考:https://blog.csdn.net/nodeman/article/details/79419386

  1. 可以使用CustomUIEditor.exe验证XML的内容格式是否正确
  2. 先创建一个ppt,然后用CustomUIEditor.exe打开
  3. 输入xml内容,完毕后点击左上角第四个按钮进行验证

  1. 保存后直接打开该PPT就能看到自定义的界面效果
  2. 有些元素是在office2009之后才有用,比如contextMenus,可以通过Insert进行选中

 

1.5xml中使用回调

每个元素都有属于自身的回调方法,button元素可以使用onAction进行回调,以下尝试对一个按钮

使用GetEnabled回调

xml内容如下:

HTML

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

    <ribbon>

        <tabs>

            <tab id="myTab" insertBeforeMso ="TabHome" label="我的选项卡">

                <group id="Group1" label="第一组">

                    <button id="NewCustomButton"

                        imageMso="WebPagePreview"

                        size="large"

                        label="测试按钮"

                        getEnabled="GetEnabled"/>

                </group>

              

            </tab>

        </tabs>

    </ribbon>

</customUI>

在接口文件.idl中添加,其中回调函数的定义在以下网页中:

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/aa722523(v=office.12)

 

C++

interface IConnect : IDispatch

{

    ......

    HRESULT GetEnabled([in]IDispatch* ribbtonControl, [out, retval] VARIANT_BOOL *pvarfEnabled);

};

在插件类头文件.h中加入

C++

//IConnect 实现

......

 virtual HRESULT __stdcall GetEnabled(IDispatch ribbtonControll, VARIANT_BOOL *pvarfEnabled);

源文件中添加定义

C++

HRESULT __stdcall CKisOfficeAddin::GetEnabled(IDispatch* ribbtonControll, VARIANT_BOOL *pvarfEnabled)

{

    *pvarfEnabled = VARIANT_FALSE;

   

    return S_OK;

}

效果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值