每一位进来的,先说声:谢谢..
自绘菜单,本来完成的差不多了,像DrawItem,MeasureItem写好了,能显示了菜单.
可是问题来了,当我右键打开菜单时,它只绘制了第一个,要鼠标经过其它菜单才会显示。我希望最终的效果是图1。我自己想了一下,是因为一开始时只DrawItem第一个,其它的没有绘制..不知道怎么搞,跪求指导.
下面呈现DrawItem函数:
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);//CDC类里的ATTACH函数用于把HDC转换成CDC
UINT state=lpDrawItemStruct->itemState;
CRect MenuRect = lpDrawItemStruct->rcItem;
CRect ColorRect = MenuRect;
ColorRect.right = ColorRect.right - 30;
COLORREF MenuColor;
CString str;
switch( lpDrawItemStruct->itemID)
{
case ID_MENU_RED:
MenuColor = RGB( 255, 0, 0 );
str = _T("红色");
break;
case ID_MENU_ORANGE:
MenuColor = RGB( 240, 133, 25 );
str = _T("橙色");
break;
case ID_MENU_YELLOW:
MenuColor = RGB( 255,255, 0 );
str = _T("黄色");
break;
case ID_MENU_GREEN:
MenuColor = RGB( 0, 255, 0 );
str = _T("绿色");
break;
case ID_MENU_BLUE:
MenuColor = RGB( 0, 0, 255 );
str = _T("蓝色");
break;
case ID_MENU_BLACK:
MenuColor = RGB( 0, 0, 0 );
str = _T("黑色");
break;
case ID_MENU_PURPLE:
MenuColor = RGB( 160, 32, 240 );
str = _T("紫色");
break;
case ID_MENU_WHITE:
MenuColor = RGB( 255, 255, 255 );
str = _T("白色");
break;
default:
MenuColor = RGB( 255, 255, 255 );
str = _T("");
break;
}
CBrush ColorBrush( MenuColor );
CBrush *pOldBrush = dc.SelectObject( &ColorBrush );
dc.RoundRect( ColorRect, CPoint( 5, 5 ) );
dc.SetTextColor(RGB(0,0,0));
dc.SetBkMode(TRANSPARENT);//设置文字背景透明
dc.DrawText(str,&MenuRect,DT_RIGHT|DT_VCENTER|DT_SINGLELINE);//输出按钮文本
dc.DeleteDC();
}