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