COM アドインとして C++ で実装された 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 ピクセルのアイコンの両方を試しました。