利用按钮自绘制作图形按钮

利用按钮自绘制作图形按钮

ID:23129616

大小:72.92 KB

页数:11页

时间:2018-11-04

利用按钮自绘制作图形按钮_第1页
利用按钮自绘制作图形按钮_第2页
利用按钮自绘制作图形按钮_第3页
利用按钮自绘制作图形按钮_第4页
利用按钮自绘制作图形按钮_第5页
资源描述:

《利用按钮自绘制作图形按钮》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。