4

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 ピクセルのアイコンの両方を試しました。

4

1 に答える 1

1

修正済み: 16 と 32 (および 48 ピクセル) の両方の画像を含むアイコンを返すと、期待どおりに動作します。

何らかの理由で、小さいリボン ボタンと大きいリボン ボタンに異なるアイコン リソース (16 または 32 ピクセルのアイコンを含む個々のファイル) を使用しました。代わりに、1 つのアイコン ファイルにすべてのサイズを含むアイコンを使用する必要があります。おまけ: アイコンに 48 ピクセルの画像も含まれている場合、リボン ボタンはアップスケールされたシステム フォントに対して正しく描画されます。

于 2013-01-10T09:22:33.747 に答える