次の方法で共有


CMenu::DrawItem

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

virtual void DrawItem(
   LPDRAWITEMSTRUCT lpDrawItemStruct 
);

パラメーター

  • lpDrawItemStruct
    必要な描画の種類についての情報を含む DRAWITEMSTRUCT の構造体へのポインター。

解説

DRAWITEMSTRUCT の構造体のメンバーが発生 itemAction の描画動作を定義します。オーナー描画の CMenu のオブジェクトの描画を実行するには、このメンバー関数をオーバーライドします。アプリケーションは、以前にこのメンバー関数の終了 lpDrawItemStruct で指定されたディスプレイ コンテキストに選択されている (GDI) の (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 クラス

階層図