wps使用xml文件显示ui

本文介绍了如何在WPS中通过XML文件来显示和定制UI,包括实现GetCustomUi接口、使用xml布局流程、编写xml文件以及如何使用自定义图片。通过GetCustomUI接口定义和实现,可以将自定义的UI元素如按钮和图标添加到功能区,而自定义图片需满足特定尺寸要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能区xml显示图标

xml文件的属性和方法

属性或方法返回值描述
xmlnsString必须使用 “http://schemas.microsoft.com/office/2006/01/customui”
onLoadcallback再功能区加载的时候,将功能区参数传递给回调函数
loadImagecallback实现loadImage函数可以使用用户自定义的图片

xml示例

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group id="MyGroup"
               label="My Group">
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
元素描述
customUi表示自定义的功能区
ribbon表示功能区
tabs表示功能区选项卡组
tab表示单个功能区选项卡
group表述功能区选项卡上的控件组

特性父元素描述
onLoadcustomUi标识应用程序加载功能区时调用的方法
idMsotab表示显示在功能区中的内置选项卡
idgroup表示组的id
labelgroup指定在组上显示的名字(wps现在不显示下方的id名字)

功能区类引用

方法描述
GetCustomUi返回功能区xml文件的内容。wps调用这个方法用与获取用户界面的XML字符串。
OnLoad将IRibbonControl参数分配给Ribbon字段,此字段可以用来更新自定义功能区

使用xml布局的流程

编写xml文件

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="DocumentAssistant" label="公文助手">
                <group id="SampleGroup1" label="def1">
                    <button id="DBCToSBCBtn" label="半角转全角" onAction="DBCToSBC" imageMso="HappyFace"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

在这里插入图片描述

对xml文件的解释

tab一行中,label代表选项卡在整个选项卡组中的名字,使用id标签对选项卡进行标识。如果使用idMso则代表是默认选项卡,像文章开始的xml那样表示的是加载项选项卡。每个group代表的是一组控件,一组控件的分割在wps现实中使用|标识。在每一个group中可以添加按钮,按钮的id由用户设定,label代表按钮在选项卡中显示的文字,onAction代表触发的方法,imageMso代表使用系统自带的图标,上文中的xml文件中的HappyFace就是系统图标。

第一步:实现GetCustomUi接口
GetCustomUi接口定义
virtual /* [helpcontext][id] */ HRESULT GetCustomUI(
        /* [in] */ BSTR RibbonID,
        /* [retval][out] */ BSTR *RibbonXml);
实现GetCustomUI接口
HRESULT CWpsComPlugins::GetCustomUI(
    /* [in] */ BSTR RibbonID,
    /* [retval][out] */ BSTR *RibbonXml)
{
    if (!RibbonXml)
        return E_INVALIDARG;

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
    QString xmlPath = QString::fromLocal8Bit("/root/下载/qt-project/InProcessComPlugin/ribbon.xml");
    QFile file(xmlPath);
    file.open(QIODevice::ReadOnly|QIODevice::Text);
    QString str("");
    while (!file.atEnd()) {
        str += file.readLine();
    }
    file.close();

    const WCHAR* const cszXml = str.utf16();
    *RibbonXml = ::SysAllocString(cszXml);
    return S_OK;
}

编译运行项目,将生成的动态链接库放入到wps中的wpsplugins文件夹中,会显示如下图所示
在这里插入图片描述

第二部:使用用户自定义的图片
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" 
  loadImage="GetImage">
<!-- Later in the markup -->
   <button id="myButton" image="mypic.jpg" />

在customUI一行中填写loadImage标签,并实现GetImage函数,之后再button中添加image标签,写入图片地址即可使用自定义图片。

注意:自定义图片大小要1616,large图标为3232

GetImage回调方法必须返回stdole.IPictureDisp类型


RECT& rc = *(RECT*)di.prcBounds;
CComPtr<IPictureDisp> m_picdisp = NULL;//IPictureDisp对象指针
_bstr_t m_bstrImgUrl = "C:\\桌面\\1.bmp";//bmp图片格式的路径
HRESULT hr = NOERROR;
PICTDESC pictDesc;
pictDesc.picType = PICTYPE_BITMAP;
pictDesc.bmp.hbitmap = (HBITMAP)::LoadImage(NULL, m_bstrImgUrl, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);//加载bmp格式的图片
pictDesc.bmp.hpal = nullptr;
pictDesc.cbSizeofstruct = sizeof(PICTDESC);
return m_picdisp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值