求救--自绘菜单问题

叶恭介叶恭介 叶恭介叶恭介 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


每一位进来的,先说声:谢谢..

自绘菜单,本来完成的差不多了,像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();

}
...全文

相关推荐

评论 14
收藏 已收藏
分享
返回顶部
叶恭介叶恭介
界面 15,976 成员 115,866 内容