VC++中HTControl的CHTButton按钮控件类用法实例解析
更新时间:2020年4月25日 17:41 点击:2191
本文以实例形式讲解了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透明按钮,感兴趣的读者可以自己测试一下。
相关文章
VC++ loadlibrary()加载三方dll失败, 返回错误码:126的解决方法
今天在编写VC++ loadlibrary()加载三方dll是总是失败,并且返回错误码:126,这里就为大家分享一下具体的解决方法...2021-03-15- 这篇文章主要介绍了VC++实现选择排序算法简单示例,代码简洁易懂,有助于读者对数据结构与算法的学习,需要的朋友可以参考下...2020-04-25
VC++中HTControl控制类使用之CHTDlgBase对话框基类实例
这篇文章主要介绍了VC++中HTControl控制类使用之CHTDlgBase对话框基类,是比较丰富而实用的功能,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了VC++的if语句应用范围分析,对VC++初学者有很好的参考学习价值,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了Vc++ 控件List Control用法总结的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VC++ 中ListCtrl经验总结的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VC++进度条process Bar的用法,是进行VC++应用程序开发中非常常见的实用技巧,需要的朋友可以参考下...2020-04-25
VC++中HTControl的CHTButton按钮控件类用法实例解析
这篇文章主要介绍了VC++中HTControl的CHTButton按钮控件类用法,对于大家进行VC++项目开发有一定的帮助作用,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了VC++基于Dx实现的截图程序示例代码,比较实用的功能,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VC++实现文件与应用程序关联的方法,涉及VC++针对注册表的相关操作技巧,需要的朋友可以参考下...2020-04-25
- 这篇文章主要为大家介绍了VC++ 6.0 C语言实现俄罗斯方块详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了VC++创建msi文件的方法,对于应用程序的开发有一定的借鉴价值,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VC++角色游戏中的人物初始化模块,对大家学习VC++有一定的帮助,需要的朋友可以参考下...2020-04-25
VC++实现CStdioFile写入及读取文件并自动换行的方法
这篇文章主要介绍了VC++实现CStdioFile写入及读取文件并自动换行的方法,很实用的功能,需要的朋友可以参考下...2020-04-25- 这篇文章主要为大家详细介绍了DEVC++实现推箱子小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 本文给大家汇总介绍了5种VC++中获取系统时间的方法,十分的简单实用,有需要的小伙伴可以参考下。...2020-04-25
- 这篇文章主要介绍了VC++获得当前进程运行目录的方法,可通过系统函数实现该功能,是非常实用的技巧,需要的朋友可以参考下...2020-04-25
VC++文件监控之FindFirstChangeNotification
因为ReadDirectoryChangesW 上次测试发现不能多级目录监控,所以尝试用FindFirstChangeNotification来实施文件监控,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了VC++中进程与多进程管理的方法,以实例形式详细分析了进程与多进程管理中所涉及的进程、子进程、进程的互斥运行与进程的结束等概念与具体实现方法,非常具有参考借鉴价值,需要的朋友可以参考下...2020-04-25
- 本文给大家分享的是使用VC++根据对话框大小调整控件大小的方法和示例代码,有需要的小伙伴可以参考下。...2020-04-25