最近在研究菜单编程,前几天看到一个菜单自绘的代码,研究了2-3天了,还是一头雾水,真是愚钝啊,因此想请各位大神指点下:   首先从CMenu类派生一个CMenuEx类,在CMenuEx中重写DrawItem和MeasureItem方法(这个我大概懂其原因,自绘出我们想要的菜单样式)void CMenuEx::DrawItem(LPDRAWITEMSTRUCT lpDIS) //LPDRAWITEMSTRUCT结构体中包含了菜单的各种信息及状态
      { CDC  dc;
        CRect rect(lpDIS->rcItem);
dc.Attach(lpDIS->hDC);
lpItem =(LPMENUITEM)lpDIS->itemData;
          ..............................      //将LPDRAWITEMSTRUCT结构体中菜单的信息保存到变量中,备用 if(lpDIS->itemState & ODS_SELECTED)
dc.SetTextColor(rgb);      
else
dc.SetTextColor(rgb);//如果菜单项被(没)选中,设置其显示形状及颜色 CBrush brush(rgb);
dc.FillRect(&rect, &brush);  //菜单项的背景色
dc.SetBkMode(TRANSPARENT);  //设定显示模式
       
         ..........................  //设置其他(没)选中时的各种外观
     }
void CMenuEx::MeasureItem(LPMEASUREITEMSTRUCT  lpMIS)
    {
      lpMIS->itemWidth = xxx
      lpMIS->itemHeight =xxx   //MSDN上将主要是这两个参数设置
     }   然后再CMainFrame中添加DrawItem和MeasureItem方法(这个我大概也懂原因,菜单属于Frame窗口,让Frame窗口调用我们自 绘的菜单显示)   void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
                                                                          //int nIDCtl这个参数不知道是什么意思 
       {m_menu.DrawItem(lpDrawItemStruct);}
   void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
       {m_menu.MeasureItem(lpMeasureItemStruct);}这段就不懂其意义了,哦,这段貌似在最前面:
    void CMyMenu::AlterStyle(int lay,CMyMenu *menu)  /*菜单的精华*/(别人的注释)
      {   for(UINT ui=0; ui<menu->GetMenuItemCount(); ui++)
          {
            .............................
            .............................
            menu->GetMenuString(ui, pItem->strText, MF_BYPOSITION);                
            pItem->uID =menu->GetMenuItemID(ui);
          if(pItem->uID == -1 && pItem->nLay==0)           //在此进行重点判断  顶级的弹出处理(别人的注释)
            {
            menu->ModifyMenu(ui, MF_BYPOSITION|MF_OWNERDRAW, 0, (TCHAR*) pItem);
             }
        else                                             //普通弹出式处理(别人的注释)
           {
            menu->ModifyMenu(ui, MF_BYPOSITION|MF_OWNERDRAW, pItem->uID, (TCHAR*) pItem);
            }
           。。
           。。  在自学中,稍微有点乱,遇到自绘问题总是看着代码研究几天才略懂12,新来的,分数不多,求高手详细指点下,越细越好,感激不尽!