VC++实现切换按钮
有时候要实现两个选项的切换,常规做法1是放两个Radio按钮控件,并设置这两个按钮为一组。2是放一个Check按钮控件。但感觉都不是那么理想和直观。有没有更好的实现方式呢?下面将给你介绍一种我自绘的控件,我把它命名为“切换控件”(SwitchButton)。实现的效果如下图实现,给你一个多的选择,以供参考。
下面是实现源码:
/// 说明文件/
//文件:SwitchBtn.h //
//功能:切换按钮类,实现两个选项一个按钮实现,自绘实现。 //
//作者:cbNotes(http://blog.csdn.net/cbnotes) //
//版本:1.0.0 //
//时间:2013-01-23 //
//备注:该控件类免费开源,欢迎大家使用和改进。但请保持该说明文件的完整和原创性 //
/
#pragma once
// CSwitchBtn
class CSwitchBtn : public CWnd
{
DECLARE_DYNAMIC(CSwitchBtn)
public:
CSwitchBtn();
virtual ~CSwitchBtn();
private:
int m_nID; //控件ID
CWnd *m_pParentWnd; //父窗口指针
BOOL m_bAnimation; //是否动画标记
BOOL m_bLeft; //是否选择左边标记
CString m_szLeftText,m_szRightText;
COLORREF m_clrNorText,m_clrHotText;//文字颜色
COLORREF m_clrNorBG,m_clrHotBG; //背景颜色
COLORREF m_clrNorBorder,m_clrHotBorder;//边框颜色
int m_ngap;//间隔
protected:
DECLARE_MESSAGE_MAP()
public:
//自绘按钮
afx_msg void OnPaint();
//按钮按钮释放消息处理,主要是发送消息
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//设置按钮上的文字
void SetText(CString szLeft,CString szRight);
// 选择哪个选项
void SetSelect(bool bLeft);
// 设置背景色
void SetBKColor(COLORREF clrBackGround);
// 设置滑块的颜色
void SetSliderColor(COLORREF clrSider);
// 设置文本的颜色
void SetTextColor(COLORREF clrText);
//设置选择文本的颜色
void SetHotTextColor(COLORREF clrHotText);
//设置外边框的颜色
void SetBorderColor(COLORREF clrBorder);
//设置滑块边框的颜色
void SetSliderBorderColor(COLORREF clrSliderBorder);
// 动态创建按钮
bool CreateButton(CRect rt,CWnd *pParentWnd,int nID);
// 初始化按钮
void InitButton(CString szLeft,CString szRight,bool bLeft = true);
};