4

我们有一个用 C++ 实现的 Word 插件作为 COM 插件。我们的功能区组是使用 GetCustomUI 回调加载的。当 Word 2010 以折叠布局显示我们的功能区组时,仅显示默认图标。

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
  <ribbon>
    <tabs>
      <tab idMso="TabReviewWord">
        <group id="MyGroup" label="My AddIn" getImage="GetGroupImage" insertAfterMso="GroupProofing" >
        .......



STDMETHODIMP CWordPlugIn::GetGroupImage(IDispatch* pRibbon, IPictureDisp** ppdispImage)
{
   return GetImage(GetGroupIcon(16), ppdispImage);
};

HRESULT CWordPlugIn::GetImage(HICON hIcon, IPictureDisp** ppdispImage)
{
   PICTDESC    pd;
   memset(&pd, 0, sizeof(pd));
   pd.cbSizeofstruct = sizeof(pd);
   pd.picType = PICTYPE_ICON;
   pd.icon.hicon = hIcon;
   if ( pd.icon.hicon == NULL )
   {
      return E_INVALIDARG;
   };

   HRESULT     hRes = OleCreatePictureIndirect(&pd, IID_IPictureDisp, FALSE, (LPVOID *) ppdispImage);
   if ( hRes != S_OK )
   {
      //write log
   };

   return hRes;
};

当我没有为组定义“getImage”回调时,折叠组显示 Microsoft 默认图标。当我定义“getImage”回调时,我的图标没有显示,只是一个空图像。相同的回调非常适用于按钮图标。如何以编程方式定义为折叠组显示的组图标?我尝试了 16 和 32 像素的图标。

4

1 回答 1

1

修复:当我返回一个包含 16 和 32(和 48 像素)图像的图标时,它按预期工作。

无论出于何种原因,我们为大小功能区按钮使用了不同的图标资源(包含 16 或 32 像素图标的单个文件)。相反,应该在一个图标文件中使用包含所有尺寸的图标。奖励:当图标也包含 48 像素图像时,功能区按钮将正确绘制为放大的系统字体。

于 2013-01-10T09:22:33.747 回答