求救--自绘菜单问题



每一位进来的,先说声:谢谢..
自绘菜单,本来完成的差不多了,像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();
}
...全文
相关推荐
MFC重绘标题栏、菜单栏并更改状态栏背景色
在MFC中,我们有时需要自定义窗口的外观,包括标题栏、菜单栏和状态栏,以实现独特的用户界面。本文将深入探讨如何使用MFC来重绘这些元素,并特别关注在尝试改变状态栏背景色时遇到的问题。
自绘/重绘MFC右键菜单CMenu
本篇文章将详细讲解如何在MFC应用中实现自绘或重绘右键菜单CMenu,以创建更具个性化的用户界面。
MFC实现的自绘按钮、自绘下拉菜单和自绘滑动条
本文将深入探讨如何使用MFC实现自绘按钮、自绘下拉菜单以及自绘滑动条。自绘按钮是通过重载MFC中的CButton类的OnPaint()函数来实现的。
漂亮的C#自绘菜单、ToolBar和状态栏
这个工程可能包含了各种自定义样式的菜单项、工具按钮和状态栏元素,展示了自绘的强大灵活性。在实际开发中,自绘控件需要注意性能问题,过度的自绘可能会导致界面绘制速度变慢。
自绘菜单效果测试程序
通过这些方法,开发者能够逐步定位问题的根源,甚至可能需要回到自绘技术的基础知识,比如理解Windows消息机制和菜单项的生命周期,这些都对于找到问题的症结至关重要。


界面
