我们在C ++中使用COM加载项实现了一个Word加载项。我们的功能区组使用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像素图标。
答案 0 :(得分:1)
修正:当我返回一个包含16和32(和48像素)图像的图标时,它会按预期工作。
无论出于何种原因,我们为小型和大型功能区按钮使用了不同的图标资源(包含16或32个像素图标的单个文件)。相反,应该在一个图标文件中使用包含所有尺寸的图标。额外奖励:当图标包含48像素图像时,功能区按钮也会正确绘制以用于放大的系统字体。