资源描述:
《钩子函数对按钮控件修改》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、//首先创建一个按钮类CDrawButton类。CDrawButton类的代码如下:〃定义按钮状态cnumButtonState{bsNormal,bsHot,bsDown};〃按钮包装类classCDrawButtonpublic:ButtonStatem_State;//按钮当前状态WNDPROCm_OldProc;//记录按钮的窗口函数intm_Flag;//是否释放关联按钮的CDrawButton对象staticintm_Style;〃按钮风格public:CDrawButton()〃构造函数Im_State=bsNorm
2、al;〃设置按钮状态m.OldProc=NULL;//设置窗口函数m.Flag=0;//设置按钮风格)virtual~CDrawButton()〃析构函数{m_State=bsNormal;〃设置按钮状态m.OldProc=NULL;〃设置窗口函数);LRESULTOnPaint(HWNDhWnd)〃绘制窗口吋处理函数{CWnd*pWnd=CWnd::FromHandle(hWnd);CPaintDCdc(pWnd);CStringText;//标题CRectRC;〃区域CFonlFont;〃字体CFont*pOldFont;//
3、原字体CBrushBrush;//ifflj笔CBrush*pOldBrush;//原画笔CPointPT(2,2);dc.SetBkMode(TRANSPARENT);〃设置透明Font.CreateFont(12,0,0,0,FW_HEAVY,0,0,0,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH
4、FF_SWISS,"MSSansSerif);pOldFont=dc.SelectObject(&F()nt);〃将
5、画笔选入设备环境if(m_Statc==bsNornial)//判断按钮状态if(m_Style==2)CBitmapbmp;bmp.LoadBitmap(IDB_BKBUTTON);//加载图片资源Brush.CreatePattemBrush(&bmp);//根据图片资源创建画笔)elseBrush.CrcatcSolidBrush(RGB(200,200,200));//用颜色创建画笔dc.SetTextColor(RGB(80,80,80));〃设置文本颜色)elseif(m_State==bsDown)〃判断按钮是否按卜
6、{Brush.CrcatcSolidBrush(RGB(160,160,160));//MJ颜色创建画笔dc.SetTextColor(RGB(50,50,250));〃设置文本颜色)elseif(m_State==bsHol)〃判断按钮是否热点{Brush.CrcatcSolidBrush(RGB(100,100,180));//MJ颜色创建画笔dc.SetTextColor(RGB(250、250.0));//设置文本颜色)pOldBrush=dc.SeleciObject(&Brush);〃将画刷选入设备环境中pWnd->G
7、etClientRect(&RC);//获得客户区域dc.RoundRcct(&RC,PT);〃绘制圆角矩形HRGNhRgn=CreateRectRgn(RC.left,RC.top,RC.right,RC.bottom);〃创建一个炉形区域pWnd->SetWindowRgn(hRgn,TRUE);〃设置窗口区域DeleteObject(hRgn);pWnd->GetWindowText(Text);〃获得窗口显示文本dc.DrawTcxt(Text,&RC,DT.CENTER
8、DT.VCENTER
9、DT_SINGLELINE)
10、;〃绘制文木dc.SclcctObjcct(pOldFont);dc.SelectObject(pOldBrush);returnTRUE;)LRESULTOnLButtonDown(HWNDhWnd,UINTnFlags,CPointpoint)〃鼠标左键按下时处理函数Im_State=bsDown;//设置按钮状态SetCapture(hWnd);//捕获鼠标SetFocus(hWnd);〃设置焦点InvalidateRect(hWnd,NULL,TRUE);//重绘窗口区域returnTRUE;)LRESULTOnLButt
11、onUp(HWNDhWnd,UINTnFlags,CPointpoint)〃鼠标左键抬起时处理函数{if(m_State!=bsNormai)//判断按钮状态m_Statc=bsNormal;//设置按钮状态RclcascCapturc();〃释放