次の方法で共有


CMenu::DrawItem

オーナー描画メニューの外観が変更されたとき、フレームワークによって呼び出されます。

virtual void DrawItem(
   LPDRAWITEMSTRUCT lpDrawItemStruct 
);

パラメーター

  • lpDrawItemStruct
    要求する描画種別に関する情報を持つ DRAWITEMSTRUCT 構造体へのポインター。

解説

DRAWITEMSTRUCT 構造体の itemAction メンバーは、実行する描画動作を定義します。 オーナー描画の CMenu オブジェクトの描画を実装するには、このメンバー関数をオーバーライドします。 アプリケーションでは、このメンバー関数を終了する前に、lpDrawItemStruct で指定したディスプレイ コンテキストに対して選択されているすべてのグラフィック デバイス インターフェイス (GDI) オブジェクトを元の状態に戻しておく必要があります。

DRAWITEMSTRUCT 構造体の詳細については、「CWnd::OnDrawItem」を参照してください。

使用例

MFC の CTRLTEST サンプルのコードを次に示します。

// Override DrawItem() to implement drawing for an owner-draw CMenu object.
// CColorMenu is a CMenu-derived class.
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
   CDC* pDC = CDC::FromHandle(lpDIS->hDC);
   COLORREF cr = (COLORREF)lpDIS->itemData; // RGB in item data

   if (lpDIS->itemAction & ODA_DRAWENTIRE)
   {
      // Paint the color item in the color requested
      CBrush br(cr);
      pDC->FillRect(&lpDIS->rcItem, &br);
   }

   if ((lpDIS->itemState & ODS_SELECTED) &&
      (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
   {
      // item has been selected - hilite frame
      COLORREF crHilite = RGB(255-GetRValue(cr),
                  255-GetGValue(cr), 255-GetBValue(cr));
      CBrush br(crHilite);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }

   if (!(lpDIS->itemState & ODS_SELECTED) &&
      (lpDIS->itemAction & ODA_SELECT))
   {
      // Item has been de-selected -- remove frame
      CBrush br(cr);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }
}

必要条件

**ヘッダー:**afxwin.h

参照

参照

CMenu クラス

階層図

その他の技術情報

CMenu のメンバー