void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(!nIDCtl)////如果是0,则是菜单
{
CDC * dcMenu;
dcMenu->Attach(lpDrawItemStruct->hDC);
dcMenu->SetTextColor(RGB(233,0,23));///设置文字颜色
CBrush menubrush(RGB(23,33,99));
CRect  menurect(lpDrawItemStruct->rcItem);
dcMenu->FillRect(&menurect,&menubrush);/////设置背景颜色
dcMenu->SetBkMode(TRANSPARENT);
}
CFrameWnd::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
但最后为什么颜色还是不会变???

解决方案 »

  1.   

    //首先确认您已经给菜单设置了OwnerDraw属性  
      

  2.   

    你可以设置断点到你的代码 CDC* dcMenu处
    相信它并没有被执行过
      

  3.   

    那我应该怎么样设置它的owerDraw属性呢?
      

  4.   

    allenhiman(YadWe)兄说的没错,是没有被执行到。但怎么判断nIDCtl是响应菜单的呢?
      

  5.   

    楼主对OnDrawItem调用的时机可能还不太清楚
    只有当被设为OwnerDraw的控件在被画的时候才会发送WM_DRAWITEM的消息,但是如果控件包括菜单属性被设置为OwnerDraw的话,那么它的所有部分都得由您手工绘制
      

  6.   

    只有当被设为OwnerDraw的控件在被画的时候才会发送WM_DRAWITEM的消息,但是如果控件包括菜单属性被设置为OwnerDraw的话,那么它的所有部分都得由您手工绘制这是真的吗?