MFC 重写Button类

本文档介绍了如何在MFC中重写CButton类,创建一个名为CZPButton的自定义按钮。这个按钮支持四种不同状态(正常、鼠标悬停、按下、禁用)的图像,并通过消息映射处理WM_MOUSEMOVE、WM_MOUSELEAVE等消息,以改变按钮的显示效果。同时,CZPButton提供了加载不同状态纹理图的方法以及处理控件颜色和焦点状态的功能。
摘要由CSDN通过智能技术生成

.h

 

class CZPButton : public CButton
{

public:
 CZPButton();
 virtual ~CZPButton();

protected:
 CBitmap m_bmp1;
 CBitmap m_bmp2;
 CBitmap m_bmp3;
 CBitmap m_bmp4;

 //按钮的状态
 BOOL m_bOver;  //鼠标位于按钮之上时该值为true,反之为flase
 BOOL m_bTracking; //在鼠标按下没有释放时该值为true
 BOOL m_bSelected; //按钮被按下是该值为true
 BOOL m_bFocus;  //按钮为当前焦点所在时该值为true

 UINT m_nColor;

public:

 //{ {AFX_VIRTUAL(CXPButton)
protected:
 virtual void PreSubclassWindow();
 //}}AFX_VIRTUAL

public:
 ///绘制按钮纹理
 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
 ///加载按钮各个状态的纹理图
 void CreateBmpFile(LPCSTR str1,LPCSTR str2,LPCSTR str3,LPCSTR str4,UINT nColor);
 void SetEnabled( BOOL bEnabled );


protected:
 //{ {AFX_MSG(CXPButton)
 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
 afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
 afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);

 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
 afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
 afx_msg void OnEnable(BOOL bEnable);
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
 
};

 

/

.cpp

CZPButton::CZPButton()
{
 m_bOver = m_bSelected = m_bTracking = m_bFocus = FALSE;
 m_nColor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值