资源描述:
《利用按钮自绘制作图形按钮》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、利用按钮自绘制作图形按钮-VC2007-06-2909:02:12
2、 分类:vc++,c++,c
3、 标签:按钮 vc++ 编程
4、字号大中小 订阅利用按钮自绘制作图形按钮 我们要举的例子是利用一张包含按钮的三种状态(鼠标移动,鼠标离开,鼠标单击)的位图来绘制按钮,因为三种状态在一张位图上,所以每种状态的图片高度都相等,而宽度是位图总长度的1/3。1.首先创建一个CBitmapButton的子类CHoverButton,并创建四个类成员变量://指示鼠标是否在按钮上面BOOLm_bHover;//按钮是否跟踪到
5、鼠标BOOLm_bTracking;//保存图片的变量CBitmapmybitmap;//按钮尺寸CSizem_ButtonSize;2.在类的构造函数中,初始化和鼠标相关的变量CHoverButton::CHoverButton(){m_bHover=FALSE;m_bTracking=FALSE;}3.创建一个载入位图的成员函数,参数为位图的资源标识符。在按钮自绘之前,必须有相应的位图已经载入。BOOLLoadBitmap(UINTbitmapid);其实现为:BOOLCHoverButton::LoadBitma
6、p(UINTbitmapid){//载入图片mybitmap.Attach(::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(bitmapid),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS));BITMAPbitmapbits;//获取位图信息并存入bitmapbits结构中mybitmap.GetBitmap(&bitmapbits);//取位图相应的高度和1/3宽度。m_ButtonSize.cy=bitmapbits.bmHeig
7、ht;m_ButtonSize.cx=bitmapbits.bmWidth/3;SetWindowPos(NULL,0,0,m_ButtonSize.cx,m_ButtonSize.cy,SWP_NOMOVE
8、SWP_NOOWNERZORDER);returnTRUE;}4.重载按钮的虚拟函数DrawItem()成员函数当一个自绘按钮的外观发生变化时由框架调用.其函数原型为:virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct);DRAWITEMSTRUCT结构包含被
9、绘制项目的信息。下面是该函数的实现voidCHoverButton:DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct){//获取保存在DRAWITEMSTRUCT结构中且在绘制按钮时必须使用的设备上下文CDC*mydc=CDC::FromHandle(lpDrawItemStruct->hDC);//创建兼容的设备上下文CDC*pMemDC=newCDC;pMemDC->CreateCompatibleDC(mydc);//保存旧对象CBitmap*pOldBitmap;pOldBit
10、map=pMemDC->SelectObject(&mybitmap);CPointpoint(0,0);//判断按钮是否处于选择状态,如果是则绘制选择状态的按钮位图,在我们提供的位图中,选中状态的按钮图片是第二个if(lpDrawItemStruct->itemState&ODS_SELECTED){mydc->BitBlt(0,0,m_ButtonSize.cx,m_ButtonSize.cy,pMemDC,m_ButtonSize.cx,0,SRCCOPY);}else{//判断鼠标是否离开还是在按钮上面,以便绘
11、制相应的位图if(m_bHover){mydc->BitBlt(0,0,m_ButtonSize.cx,m_ButtonSize.cy,pMemDC,m_ButtonSize.cx*2,0,SRCCOPY);}else{mydc->BitBlt(0,0,m_ButtonSize.cx,m_ButtonSize.cy,pMemDC,0,0,SRCCOPY);}}//cleanuppMemDC->SelectObject(pOldBitmap);deletepMemDC;}tme.cbSize=sizeof(tme);tm
12、e.hwndTrack=m_hWnd;tme.dwFlags=TME_LEAVE
13、TME_HOVER;tme.dwHoverTime=1;m_bTracking=_TrackMouseEvent(&tme);}CBitmapButton::OnMouseMove(nFlags,point);}LRESULTCHoverButton