VC++中HTControl的CHTButton按钮控件类用法实例解析

 更新时间:2014年08月11日 09:45:26   投稿:shichen2014  
这篇文章主要介绍了VC++中HTControl的CHTButton按钮控件类用法,对于大家进行VC++项目开发有一定的帮助作用,需要的朋友可以参考下

本文以实例形式讲解了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透明按钮,感兴趣的读者可以自己测试一下。

相关文章

  • C语言中杨氏矩阵与杨辉三角的实现方法

    C语言中杨氏矩阵与杨辉三角的实现方法

    这篇文章主要给大家介绍了关于C语言中杨氏矩阵与杨辉三角的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C语言算法金手指摩尔投票法手撕绝大多数问题

    C语言算法金手指摩尔投票法手撕绝大多数问题

    这篇文章主要为大家介绍了C语言算法之金手指摩尔投票法手撕绝大多数问题的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • 基础C语言编程时易犯错误有哪些

    基础C语言编程时易犯错误有哪些

    基础C语言编程时易犯错误有哪些?这篇文章主要介绍了C语言编程时常见的错误,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • c++基础语法:构造函数初始化列表

    c++基础语法:构造函数初始化列表

    构造函数需要初始化的数据成员,不论是否显示的出现在构造函数的成员初始化列表中,都会在该处完成初始化,并且初始化的顺序和其在声明时的顺序是一致的,与列表的先后顺序无关
    2013-09-09
  • 简单对比C语言中的fputs()函数和fputc()函数

    简单对比C语言中的fputs()函数和fputc()函数

    这篇文章主要介绍了简单对比C语言中的fputs()函数和fputc()函数,注意其之间的区别,需要的朋友可以参考下
    2015-08-08
  • C++ GetDlgItem用法案例详解

    C++ GetDlgItem用法案例详解

    这篇文章主要介绍了C++ GetDlgItem用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 一文搞懂C++中继承的概念与使用

    一文搞懂C++中继承的概念与使用

    我们都知道面向对象语言的三大特点是:**封装,继承,多态。**之前在类和对象部分,我们提到了C++中的封装,那么今天呢,我们来学习一下C++中的继承
    2022-07-07
  • C++ 头文件系列(set)详解

    C++ 头文件系列(set)详解

    一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现 。
    2017-02-02
  • 基于OpenCV实现的人脸签到系统源代码

    基于OpenCV实现的人脸签到系统源代码

    本文从实际背景和需求出发,采用人脸识别签到考勤改变了传统人工检验的做法,极大提高了组织效率和办事能力,这篇文章主要给大家介绍了关于如何基于OpenCV实现的人脸签到系统的相关资料,需要的朋友可以参考下
    2024-04-04
  • 一文详解如何在VS Code上搭建C/C++开发环境

    一文详解如何在VS Code上搭建C/C++开发环境

    VSCode是由微软开发的一款免费、开源、跨平台的文本编辑器,它具有许多强大的功能,这篇文章主要给大家介绍了关于如何在VS Code上搭建C/C++开发环境的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-03-03

最新评论