VC++中HTControl的CHTButton按钮控件类用法实例解析
本文以实例形式讲解了VC++中HTControl控件类的CHTButton按钮控件类用法,相信对大家更好的理解VC++有一定的帮助。具体内容如下:
一般了解VC++的朋友都知道,VC++ 按钮控件CHTButton隶属HTControl控件组,直接由WIN32 API实现,你可以在SDK,MFC,wxWidget等环境下使用它。支持生成各种类型的按钮,比如:普通按钮,PNG透明按钮,复选框按钮,单选按钮等。使用时请注意,窗体必须动态创建,代码段如下:
m_HTBtnClose.Create(758, 0, 39, 20, m_hWnd, iChildId++); m_HTBtnClose.SetAllBitmap(m_hBmpBtnCloseNormal, m_hBmpBtnCloseDown,m_hBmpBtnCloseHover); m_HTBtnClose.SetParentBgMemDC(m_hdcMemBuf);
CHTButton.h控件核心代码及注释说明如下:
/*****************************************************************
| Copyright (c) 2012,
******************************************************************/
#if !defined(__CHTBUTTON_H__)
#define __CHTBUTTON_H__
#include "CHTTip.h"
class CMyButton;
class AFX_CLASS_EXPORT CHTButton
{
public:
CHTButton();
~CHTButton();
/****************************************************************************
| 函数功能:创建按钮 |
| 输入参数: |
| x: 窗体位置x坐标(相对于父窗体) |
| y: 窗体位置y坐标(相对于父窗体) |
| iWidth: 窗体宽 |
| iHeight: 窗体高 |
| hParent: 父窗口句柄 |
| hBtnId: 窗体ID |
| szLabel: 窗体标题 |
| dwStyle: 按钮行为标识 |
| BS_CHECKBOX :复选框按钮 |
| BS_RADIOBUTTON :单选按钮 |
| BS_NOTIFY:发送得到(BN_SETFOCUS)失去(BN_KILLFOCUS)焦点的通知 |
| BS_NOTIFY << 2: 发送按下通知(BN_KILLFOCUS + 2) |
| 输出参数:无 |
| 返回值: 成功:窗口句柄 失败: NULL |
| 说明: |
****************************************************************************/
HWND Create(int x, int y, int iWidth, int iHeight, HWND hParent, int iBtnId,
TCHAR* szLabel = NULL, DWORD dwStyle = NULL);
/****************************************************************************
| 函数功能:改变窗口位置大小 |
| 输入参数: |
| iWidth: 窗体宽 -1表示宽不变 |
| iHeight: 窗体高 -1表示高不变 |
| x: 窗体位置x坐标 |
| y: 窗体位置y坐标 |
| bRepaint: 改变后是否重绘窗口 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明:如果改变了窗口大小,在MoveWindow之前需要重新设置各种位图 |
****************************************************************************/
void MoveWindow(int x, int y, int iWidth = -1, int iHeight = -1, BOOL bRepaint = TRUE);
/****************************************************************************
| 函数功能:设置提示窗口类指针 |
| 输入参数: |
| pclTip: 提示窗口类指针 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetToolTip(CHTTip* pclTip);
/****************************************************************************
| 函数功能:设置提示窗口的文本 |
| 输入参数: |
| szTipText: 提示文本 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetTipText(TCHAR* szTipText);
/****************************************************************************
| 函数功能:获取窗口的句柄 |
| 输入参数:无 |
| 输出参数:无 |
| 返回值: 窗体句柄 |
| 说 明: |
****************************************************************************/
HWND GetHandle();
/****************************************************************************
| 函数功能:获取父窗口的句柄 |
| 输入参数:无 |
| 输出参数:无 |
| 返回值: 父窗体句柄 |
| 说 明: |
****************************************************************************/
HWND GetParent();
/****************************************************************************
| 函数功能:设置字体 |
| 输入参数: |
| hFont: 字体 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetFont(HFONT hFont);
/****************************************************************************
| 函数功能:设置文字的颜色 |
| 输入参数: |
| CRText: 颜色值 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetBtnTextColor(COLORREF CRText);
/****************************************************************************
| 函数功能:设置字体(鼠标停留窗体上时) |
| 输入参数: |
| hFont: 字体 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明:如未设置则采用SetFont设置的字体 |
****************************************************************************/
void SetHoverFont(HFONT hFont);
/****************************************************************************
| 函数功能:设置文字的颜色(鼠标停留窗体上时) |
| 输入参数: |
| CRText: 颜色值 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明:如未设置则采用SetBtnTextColor设置的颜色 |
****************************************************************************/
void SetHoverBtnTextColor(COLORREF CRText);
/****************************************************************************
| 函数功能:使窗口无效并绘制窗口 |
| 输入参数:无 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void Disable();
/****************************************************************************
| 函数功能:使窗口有效并按常态绘制窗口 |
| 输入参数:无 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void Enable();
/****************************************************************************
| 函数功能:设置按钮显示的文本 |
| 输入参数: |
| szLabel: 按钮的文本 |
| point: 文字起始坐标,默认居中 |
| bTextMove:按下时文字是否移动(向右下角移动一像素) |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetLabel(TCHAR* szLabel, POINT* point = NULL, BOOL bTextMove = TRUE);
/****************************************************************************
| 函数功能:获取按钮上的文本 |
| 输入参数: |
| szLabel: 按钮的文本 |
| 输出参数:无 |
| 返回值: 文本指针 |
| 说 明: |
****************************************************************************/
TCHAR* GetLabel();
/****************************************************************************
| 函数功能:获取按钮状态 |
| 输入参数:无 |
| 输出参数:无 |
| 返回值: 按钮状态 0:常态 1:按下 2:长按 3:无效 |
| 说 明: |
****************************************************************************/
int GetState();
/****************************************************************************
| 函数功能:设置长按生效时间 |
| 输入参数: |
| wLongPressTime : 长按生效时间(长按通知码BN_KILLFOCUS + 3) |
| 0表示不打开长按功能 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetLongPressTime(WORD wLongPressTime);
/****************************************************************************
| 函数功能:设置复选和单选按钮的状态 |
| 输入参数: |
| bCheck: FALSE(BST_UNCHECKED)或者TRUE(BST_CHECKED) |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetCheck(BOOL bCheck);
/****************************************************************************
| 函数功能:获取复选和单选按钮的状态 |
| 输入参数:无 |
| 输出参数:无 |
| 返回值: FALSE(BST_UNCHECKED)或者TRUE(BST_CHECKED) |
| 说 明: |
****************************************************************************/
BOOL GetCheck();
/****************************************************************************
| 函数功能:设置按钮常态的位图 |
| 输入参数: |
| hBitmap: 位图 |
| iNormalLeftLen: 位图左侧不可拉伸部分的长度 |
| iNormalRightLen: 位图右侧不可拉伸部分的长度 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetNormalBitmap(HBITMAP hBitmap, int iNormalLeftLen = 0, int iNormalRightLen = 0);
/****************************************************************************
| 函数功能:设置按钮按下的位图 |
| 输入参数: |
| hBitmap: 位图 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetLBtnDownBitmap(HBITMAP hBitmap);
/****************************************************************************
| 函数功能:设置鼠标在按钮之上时按钮的位图 |
| 输入参数: |
| hBitmap: 位图 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetHoverBitmap(HBITMAP hBitmap);
/****************************************************************************
| 函数功能:设置按钮无效时的位图 |
| 输入参数: |
| hBitmap: 位图 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetDisableBitmap(HBITMAP hBitmap);
void SetAllBitmap(HBITMAP hBitmapNormal, HBITMAP hBitmapLBtnDown, HBITMAP hBitmapHover,
int iNormalLeftLen = 0, int iNormalRightLen = 0);
/****************************************************************************
| 函数功能:设置按钮上的图标的位图 |
| 输入参数: |
| hBitmap: 位图 |
| pIconRect:图标占据的矩形 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetIcon(HBITMAP hBitmap, RECT* pIconRect);
/****************************************************************************
| 函数功能:设置窗体的不透明度 |
| 输入参数: |
| iTransparency: 不透明度的百分比 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void SetTransparency(int iTransparency);
/****************************************************************************
| 函数功能:设置父窗体背景内存画布 |
| 输入参数: |
| hParentBgMemDC: 父窗体背景内存画布 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明:当父窗体背景在变化并且此窗体本身也有透明度时(包括窗体使用的位图 |
| 具有透明度或者窗体没有背景位图),需要调用此接口 |
****************************************************************************/
void SetParentBgMemDC(HDC hParentBgMemDC, int x = 0, int y = 0);
/****************************************************************************
| 函数功能:设置父窗体使用的背景位图 |
| 输入参数: |
| hParentBgBitmap: 父窗体使用的背景位图 |
| x, y 位图绘画起始点坐标 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明:当父窗体背景使用静态位图并且此窗体本身也有透明度时(包括窗体使用 |
| 的位图具有透明度或者窗体没有背景位图),需要调用此接口 |
****************************************************************************/
void SetParentBgBitmap(HBITMAP hParentBgBitmap, int x = 0, int y = 0);
/****************************************************************************
| 函数功能:设置父窗体背景颜色 |
| 输入参数: |
| CRParentBg: 父窗体背景颜色 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明:当父窗体背景使用固定颜色并且此窗体本身也有透明度时(包括窗体使用 |
| 的位图具有透明度或者窗体没有背景位图),需要调用此接口 |
****************************************************************************/
void SetParentBgColor(COLORREF CRParentBg = RGB(236, 233, 216));
/****************************************************************************
| 函数功能:把窗口绘制到目标设备内容 |
| 输入参数: |
| hdcDest: 目标设备内容 |
| x, y: 绘画起始坐标 |
| 输出参数:无 |
| 返回值: 无 |
| 说 明: |
****************************************************************************/
void DrawWindow(HDC hdcDest, int x = 0, int y = 0);
CMyButton* GetCMyButton();
private:
CMyButton* m_pclBtn;
};
#endif //!__CHTBUTTON_H__
此类支持窗体以任意透明度显示,操作很简单,使用下面接口即可实现:
void SetTransparency(int iTransparency);
CHTButton类同时也实现了PNG透明按钮,感兴趣的读者可以自己测试一下。
赞 (0)
