继承CWnd自绘按钮

时隔1年半后,因工作需要重新写起了客户端。这么久没接触了,确实很生疏,一考虑到要自绘个tab控件需要有个关闭按钮,刚开始我的逻辑就是用公司现成的按钮类但发现现成的按钮类,用起来很费劲,因为分装好的按钮类提供了比较完整的各种功能和接口,要是想在原来的基础上修改,就需要搞清楚各个成员及接口的用法,这加大了很大的难度,比起从零开始写,或许还更耗时,相信很多人都会有类似的感受,于是我网上搜索和参考了别人的文章封装了本按钮。本按钮提供的功能非常简单,但是易用且可扩展性强,完全可以根据自己的需求做修改.
//使用例子
RECT rc = {0, 0, 20, 20};
	m_btnClose.LoadBtnImg(_T("PNG"),IDB_PNG_TAB_CLOSE_NOR, IDB_PNG_TAB_CLOSE_HOT,IDB_PNG_TAB_CLOSE_HOT);
	m_btnClose.Create(this, rc, L"",ID_BTN_MYTAB_CLOSE);		
	m_btnClose.SetToolTipText(_T("关闭")); 		


 
//头文件

#pragma once

// CLhsButton

#define MYWM_BTN_CLICK WM_USER+3001		//关闭按钮单击响应

//tab按钮的状态
enum ButtonState
{
	BTN_STATE_NOR			= 0,
	BTN_STATE_DOWN			= 1,
};

class CLhsButton : public CWnd
{
	DECLARE_DYNAMIC(CLhsButton)

public:
	CLhsButton();
	virtual ~CLhsButton();

	 bool Create(CWnd* pParent,CRect rc,CString text,DWORD id = 0,DWORD style = WS_VISIBLE|WS_CHILD);  

	DECLARE_MESSAGE_MAP()

public:
	
protected:
	CString szClassName;  
	bool m_isMouseHover;		//鼠标是否悬浮
	bool m_isMouseClicked;		//鼠标是否单击
	CString m_strShowText;		//要显示的文字

	Image*						m_pImgNor;			//正常时的图片
	Image*						m_pImgHot;			//鼠标悬浮时的图片
	Image*						m_pImgDown;			//单击按下时的图片
	
	void PostClickEvent();
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);  
	afx_msg void OnMouseHover(UINT nFlags, CPoint point);  
	afx_msg void OnMouseLeave();  
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);  
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);  
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);  
	afx_msg void OnPaint();  
	afx_msg void OnSize(UINT nType, int cx, int cy);	
	virtual BOOL PreTranslateMessage(MSG* pMsg);
public:
	void SetTabState(ButtonState state){m_btnState = state; Invalidate();}	//设置tab状态
	ButtonState GetTabState(){return m_btnState;}
	void SetToolTipText(CString spText, BOOL bActivate = TRUE);
	void LoadBtnImg(LPCTSTR tTy
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值