龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++中自绘菜单的实现(8)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
if(idx==lpItem-uID) { lpItem-uIndex=inx; break; } } } //如果该项下还有子菜单,则递归调用该函数来修改其子菜单的风格 pSubMenu =pMenu-GetSubMenu(i); if(pSubMenu) ChangeStyle(

       if(idx==lpItem->uID)
       {
        lpItem->uIndex=inx;
        break;
       }
      }
     }
     //如果该项下还有子菜单,则递归调用该函数来修改其子菜单的风格
     pSubMenu =pMenu->GetSubMenu(i);
     if(pSubMenu)
      ChangeStyle(pSubMenu,pToolBar);
    }
    else
    {
     if(bIsMainMenu)
      nPosition +=m_nSeparator;
    }
    //修改菜单风格为自绘
    pMenu->ModifyMenu(i,MF_BYPOSITION|MF_OWNERDRAW,lpItem->uID,(LPCTSTR)lpItem);
    m_ListMenu.AddTail(lpItem);
   }
  }
/////////////////////////////////////////////由工具栏的位图来产生菜单所用的位图列表m_ImageList;
int CMenuEx::GetImageFromToolBar(UINT uToolBar, CToolBar *pToolBar,COLORREF crMask)
{
 if(!pToolBar)
  return 0;
 CBitmap bmp;
 int nWidth,nHeight;
 BITMAP bmpInfo;
 bmp.LoadBitmap(uToolBar);//将工具条作为位图资源装载;
 bmp.GetBitmap(&bmpInfo);
 //得到位图的高度
 nHeight =bmpInfo.bmHeight;
 int nCount=0;
 int ret =pToolBar->GetToolBarCtrl().GetButtonCount();
 //得到工具栏中位图的个数nCount
 for(int i=0;i  if(pToolBar->GetItemID(i)!=ID_SEPARATOR)
  nCount ++;
 //计算出位图的宽度
 nWidth =bmpInfo.bmWidth/nCount;
 bmp.DeleteObject();
 TRACE("Menu Bitmap--width:%d height:%d ",nWidth,nHeight);
  //创建位图列表
 m_ImageList.Create(uToolBar,nWidth,nHeight,crMask);
 m_szImage.cx =nWidth;
 m_szImage.cy =nHeight;
 return nCount;
}
//////////////////////////////////////////////////////////////////初始化菜单对象;
void CMenuEx::InitMenu(CMenu *pMenu, UINT uToolBar, CToolBar *pToolBar)
{
 //已设定了风格
 if(m_bInitial)
  return ;
 GetImageFromToolBar(uToolBar,pToolBar);
 CMenu *pSubMenu,*pSubsub;
 MENUITEM *lpItem;
 UINT i;
 int j,m;
 int nPosition; //该变量用来存放纵向位图的位置
 for(i=0;iGetMenuItemCount();i++)

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接