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透明按钮,感兴趣的读者可以自己测试一下。