VC++中HTControl的CHTButton按钮控件类用法实例解析
本文以实例形式讲解了VC++中HTControl控件类的CHTButton按钮控件类用法,相信对大家更好的理解VC++有一定的帮助。具体内容如下:
一般了解VC++的朋友都知道,VC++按钮控件CHTButton隶属HTControl控件组,直接由WIN32API实现,你可以在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"
classCMyButton;
classAFX_CLASS_EXPORTCHTButton
{
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|
|说明:|
****************************************************************************/
HWNDCreate(intx,inty,intiWidth,intiHeight,HWNDhParent,intiBtnId,
TCHAR*szLabel=NULL,DWORDdwStyle=NULL);
/****************************************************************************
|函数功能:改变窗口位置大小|
|输入参数:|
|iWidth:窗体宽-1表示宽不变|
|iHeight:窗体高-1表示高不变|
|x:窗体位置x坐标|
|y:窗体位置y坐标|
|bRepaint:改变后是否重绘窗口|
|输出参数:无|
|返回值:无|
|说明:如果改变了窗口大小,在MoveWindow之前需要重新设置各种位图|
****************************************************************************/
voidMoveWindow(intx,inty,intiWidth=-1,intiHeight=-1,BOOLbRepaint=TRUE);
/****************************************************************************
|函数功能:设置提示窗口类指针|
|输入参数:|
|pclTip:提示窗口类指针|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetToolTip(CHTTip*pclTip);
/****************************************************************************
|函数功能:设置提示窗口的文本|
|输入参数:|
|szTipText:提示文本|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetTipText(TCHAR*szTipText);
/****************************************************************************
|函数功能:获取窗口的句柄|
|输入参数:无|
|输出参数:无|
|返回值:窗体句柄|
|说明:|
****************************************************************************/
HWNDGetHandle();
/****************************************************************************
|函数功能:获取父窗口的句柄|
|输入参数:无|
|输出参数:无|
|返回值:父窗体句柄|
|说明:|
****************************************************************************/
HWNDGetParent();
/****************************************************************************
|函数功能:设置字体|
|输入参数:|
|hFont:字体|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetFont(HFONThFont);
/****************************************************************************
|函数功能:设置文字的颜色|
|输入参数:|
|CRText:颜色值|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetBtnTextColor(COLORREFCRText);
/****************************************************************************
|函数功能:设置字体(鼠标停留窗体上时)|
|输入参数:|
|hFont:字体|
|输出参数:无|
|返回值:无|
|说明:如未设置则采用SetFont设置的字体|
****************************************************************************/
voidSetHoverFont(HFONThFont);
/****************************************************************************
|函数功能:设置文字的颜色(鼠标停留窗体上时)|
|输入参数:|
|CRText:颜色值|
|输出参数:无|
|返回值:无|
|说明:如未设置则采用SetBtnTextColor设置的颜色|
****************************************************************************/
voidSetHoverBtnTextColor(COLORREFCRText);
/****************************************************************************
|函数功能:使窗口无效并绘制窗口|
|输入参数:无|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidDisable();
/****************************************************************************
|函数功能:使窗口有效并按常态绘制窗口|
|输入参数:无|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidEnable();
/****************************************************************************
|函数功能:设置按钮显示的文本|
|输入参数:|
|szLabel:按钮的文本|
|point:文字起始坐标,默认居中|
|bTextMove:按下时文字是否移动(向右下角移动一像素)|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetLabel(TCHAR*szLabel,POINT*point=NULL,BOOLbTextMove=TRUE);
/****************************************************************************
|函数功能:获取按钮上的文本|
|输入参数:|
|szLabel:按钮的文本|
|输出参数:无|
|返回值:文本指针|
|说明:|
****************************************************************************/
TCHAR*GetLabel();
/****************************************************************************
|函数功能:获取按钮状态|
|输入参数:无|
|输出参数:无|
|返回值:按钮状态0:常态1:按下2:长按3:无效|
|说明:|
****************************************************************************/
intGetState();
/****************************************************************************
|函数功能:设置长按生效时间|
|输入参数:|
|wLongPressTime:长按生效时间(长按通知码BN_KILLFOCUS+3)|
|0表示不打开长按功能|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetLongPressTime(WORDwLongPressTime);
/****************************************************************************
|函数功能:设置复选和单选按钮的状态|
|输入参数:|
|bCheck:FALSE(BST_UNCHECKED)或者TRUE(BST_CHECKED)|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetCheck(BOOLbCheck);
/****************************************************************************
|函数功能:获取复选和单选按钮的状态|
|输入参数:无|
|输出参数:无|
|返回值:FALSE(BST_UNCHECKED)或者TRUE(BST_CHECKED)|
|说明:|
****************************************************************************/
BOOLGetCheck();
/****************************************************************************
|函数功能:设置按钮常态的位图|
|输入参数:|
|hBitmap:位图|
|iNormalLeftLen:位图左侧不可拉伸部分的长度|
|iNormalRightLen:位图右侧不可拉伸部分的长度|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetNormalBitmap(HBITMAPhBitmap,intiNormalLeftLen=0,intiNormalRightLen=0);
/****************************************************************************
|函数功能:设置按钮按下的位图|
|输入参数:|
|hBitmap:位图|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetLBtnDownBitmap(HBITMAPhBitmap);
/****************************************************************************
|函数功能:设置鼠标在按钮之上时按钮的位图|
|输入参数:|
|hBitmap:位图|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetHoverBitmap(HBITMAPhBitmap);
/****************************************************************************
|函数功能:设置按钮无效时的位图|
|输入参数:|
|hBitmap:位图|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetDisableBitmap(HBITMAPhBitmap);
voidSetAllBitmap(HBITMAPhBitmapNormal,HBITMAPhBitmapLBtnDown,HBITMAPhBitmapHover,
intiNormalLeftLen=0,intiNormalRightLen=0);
/****************************************************************************
|函数功能:设置按钮上的图标的位图|
|输入参数:|
|hBitmap:位图|
|pIconRect:图标占据的矩形|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetIcon(HBITMAPhBitmap,RECT*pIconRect);
/****************************************************************************
|函数功能:设置窗体的不透明度|
|输入参数:|
|iTransparency:不透明度的百分比|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidSetTransparency(intiTransparency);
/****************************************************************************
|函数功能:设置父窗体背景内存画布|
|输入参数:|
|hParentBgMemDC:父窗体背景内存画布|
|输出参数:无|
|返回值:无|
|说明:当父窗体背景在变化并且此窗体本身也有透明度时(包括窗体使用的位图|
|具有透明度或者窗体没有背景位图),需要调用此接口|
****************************************************************************/
voidSetParentBgMemDC(HDChParentBgMemDC,intx=0,inty=0);
/****************************************************************************
|函数功能:设置父窗体使用的背景位图|
|输入参数:|
|hParentBgBitmap:父窗体使用的背景位图|
|x,y位图绘画起始点坐标|
|输出参数:无|
|返回值:无|
|说明:当父窗体背景使用静态位图并且此窗体本身也有透明度时(包括窗体使用|
|的位图具有透明度或者窗体没有背景位图),需要调用此接口|
****************************************************************************/
voidSetParentBgBitmap(HBITMAPhParentBgBitmap,intx=0,inty=0);
/****************************************************************************
|函数功能:设置父窗体背景颜色|
|输入参数:|
|CRParentBg:父窗体背景颜色|
|输出参数:无|
|返回值:无|
|说明:当父窗体背景使用固定颜色并且此窗体本身也有透明度时(包括窗体使用|
|的位图具有透明度或者窗体没有背景位图),需要调用此接口|
****************************************************************************/
voidSetParentBgColor(COLORREFCRParentBg=RGB(236,233,216));
/****************************************************************************
|函数功能:把窗口绘制到目标设备内容|
|输入参数:|
|hdcDest:目标设备内容|
|x,y:绘画起始坐标|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidDrawWindow(HDChdcDest,intx=0,inty=0);
CMyButton*GetCMyButton();
private:
CMyButton*m_pclBtn;
};
#endif//!__CHTBUTTON_H__
此类支持窗体以任意透明度显示,操作很简单,使用下面接口即可实现:
voidSetTransparency(intiTransparency);
CHTButton类同时也实现了PNG透明按钮,感兴趣的读者可以自己测试一下。