VC++中HTControl的CHTButton按鈕控件類用法實(shí)例解析
本文以實(shí)例形式講解了VC++中HTControl控件類的CHTButton按鈕控件類用法,相信對大家更好的理解VC++有一定的幫助。具體內(nèi)容如下:
一般了解VC++的朋友都知道,VC++ 按鈕控件CHTButton隸屬HTControl控件組,直接由WIN32 API實(shí)現(xiàn),你可以在SDK,MFC,wxWidget等環(huán)境下使用它。支持生成各種類型的按鈕,比如:普通按鈕,PNG透明按鈕,復(fù)選框按鈕,單選按鈕等。使用時(shí)請注意,窗體必須動態(tài)創(chuàng)建,代碼段如下:
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();
/****************************************************************************
| 函數(shù)功能:創(chuàng)建按鈕 |
| 輸入?yún)?shù): |
| x: 窗體位置x坐標(biāo)(相對于父窗體) |
| y: 窗體位置y坐標(biāo)(相對于父窗體) |
| iWidth: 窗體寬 |
| iHeight: 窗體高 |
| hParent: 父窗口句柄 |
| hBtnId: 窗體ID |
| szLabel: 窗體標(biāo)題 |
| dwStyle: 按鈕行為標(biāo)識 |
| BS_CHECKBOX :復(fù)選框按鈕 |
| BS_RADIOBUTTON :單選按鈕 |
| BS_NOTIFY:發(fā)送得到(BN_SETFOCUS)失去(BN_KILLFOCUS)焦點(diǎn)的通知 |
| BS_NOTIFY << 2: 發(fā)送按下通知(BN_KILLFOCUS + 2) |
| 輸出參數(shù):無 |
| 返回值: 成功:窗口句柄 失敗: NULL |
| 說明: |
****************************************************************************/
HWND Create(int x, int y, int iWidth, int iHeight, HWND hParent, int iBtnId,
TCHAR* szLabel = NULL, DWORD dwStyle = NULL);
/****************************************************************************
| 函數(shù)功能:改變窗口位置大小 |
| 輸入?yún)?shù): |
| iWidth: 窗體寬 -1表示寬不變 |
| iHeight: 窗體高 -1表示高不變 |
| x: 窗體位置x坐標(biāo) |
| y: 窗體位置y坐標(biāo) |
| bRepaint: 改變后是否重繪窗口 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明:如果改變了窗口大小,在MoveWindow之前需要重新設(shè)置各種位圖 |
****************************************************************************/
void MoveWindow(int x, int y, int iWidth = -1, int iHeight = -1, BOOL bRepaint = TRUE);
/****************************************************************************
| 函數(shù)功能:設(shè)置提示窗口類指針 |
| 輸入?yún)?shù): |
| pclTip: 提示窗口類指針 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetToolTip(CHTTip* pclTip);
/****************************************************************************
| 函數(shù)功能:設(shè)置提示窗口的文本 |
| 輸入?yún)?shù): |
| szTipText: 提示文本 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetTipText(TCHAR* szTipText);
/****************************************************************************
| 函數(shù)功能:獲取窗口的句柄 |
| 輸入?yún)?shù):無 |
| 輸出參數(shù):無 |
| 返回值: 窗體句柄 |
| 說 明: |
****************************************************************************/
HWND GetHandle();
/****************************************************************************
| 函數(shù)功能:獲取父窗口的句柄 |
| 輸入?yún)?shù):無 |
| 輸出參數(shù):無 |
| 返回值: 父窗體句柄 |
| 說 明: |
****************************************************************************/
HWND GetParent();
/****************************************************************************
| 函數(shù)功能:設(shè)置字體 |
| 輸入?yún)?shù): |
| hFont: 字體 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetFont(HFONT hFont);
/****************************************************************************
| 函數(shù)功能:設(shè)置文字的顏色 |
| 輸入?yún)?shù): |
| CRText: 顏色值 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetBtnTextColor(COLORREF CRText);
/****************************************************************************
| 函數(shù)功能:設(shè)置字體(鼠標(biāo)停留窗體上時(shí)) |
| 輸入?yún)?shù): |
| hFont: 字體 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明:如未設(shè)置則采用SetFont設(shè)置的字體 |
****************************************************************************/
void SetHoverFont(HFONT hFont);
/****************************************************************************
| 函數(shù)功能:設(shè)置文字的顏色(鼠標(biāo)停留窗體上時(shí)) |
| 輸入?yún)?shù): |
| CRText: 顏色值 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明:如未設(shè)置則采用SetBtnTextColor設(shè)置的顏色 |
****************************************************************************/
void SetHoverBtnTextColor(COLORREF CRText);
/****************************************************************************
| 函數(shù)功能:使窗口無效并繪制窗口 |
| 輸入?yún)?shù):無 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void Disable();
/****************************************************************************
| 函數(shù)功能:使窗口有效并按常態(tài)繪制窗口 |
| 輸入?yún)?shù):無 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void Enable();
/****************************************************************************
| 函數(shù)功能:設(shè)置按鈕顯示的文本 |
| 輸入?yún)?shù): |
| szLabel: 按鈕的文本 |
| point: 文字起始坐標(biāo),默認(rèn)居中 |
| bTextMove:按下時(shí)文字是否移動(向右下角移動一像素) |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetLabel(TCHAR* szLabel, POINT* point = NULL, BOOL bTextMove = TRUE);
/****************************************************************************
| 函數(shù)功能:獲取按鈕上的文本 |
| 輸入?yún)?shù): |
| szLabel: 按鈕的文本 |
| 輸出參數(shù):無 |
| 返回值: 文本指針 |
| 說 明: |
****************************************************************************/
TCHAR* GetLabel();
/****************************************************************************
| 函數(shù)功能:獲取按鈕狀態(tài) |
| 輸入?yún)?shù):無 |
| 輸出參數(shù):無 |
| 返回值: 按鈕狀態(tài) 0:常態(tài) 1:按下 2:長按 3:無效 |
| 說 明: |
****************************************************************************/
int GetState();
/****************************************************************************
| 函數(shù)功能:設(shè)置長按生效時(shí)間 |
| 輸入?yún)?shù): |
| wLongPressTime : 長按生效時(shí)間(長按通知碼BN_KILLFOCUS + 3) |
| 0表示不打開長按功能 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetLongPressTime(WORD wLongPressTime);
/****************************************************************************
| 函數(shù)功能:設(shè)置復(fù)選和單選按鈕的狀態(tài) |
| 輸入?yún)?shù): |
| bCheck: FALSE(BST_UNCHECKED)或者TRUE(BST_CHECKED) |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetCheck(BOOL bCheck);
/****************************************************************************
| 函數(shù)功能:獲取復(fù)選和單選按鈕的狀態(tài) |
| 輸入?yún)?shù):無 |
| 輸出參數(shù):無 |
| 返回值: FALSE(BST_UNCHECKED)或者TRUE(BST_CHECKED) |
| 說 明: |
****************************************************************************/
BOOL GetCheck();
/****************************************************************************
| 函數(shù)功能:設(shè)置按鈕常態(tài)的位圖 |
| 輸入?yún)?shù): |
| hBitmap: 位圖 |
| iNormalLeftLen: 位圖左側(cè)不可拉伸部分的長度 |
| iNormalRightLen: 位圖右側(cè)不可拉伸部分的長度 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetNormalBitmap(HBITMAP hBitmap, int iNormalLeftLen = 0, int iNormalRightLen = 0);
/****************************************************************************
| 函數(shù)功能:設(shè)置按鈕按下的位圖 |
| 輸入?yún)?shù): |
| hBitmap: 位圖 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetLBtnDownBitmap(HBITMAP hBitmap);
/****************************************************************************
| 函數(shù)功能:設(shè)置鼠標(biāo)在按鈕之上時(shí)按鈕的位圖 |
| 輸入?yún)?shù): |
| hBitmap: 位圖 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetHoverBitmap(HBITMAP hBitmap);
/****************************************************************************
| 函數(shù)功能:設(shè)置按鈕無效時(shí)的位圖 |
| 輸入?yún)?shù): |
| hBitmap: 位圖 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetDisableBitmap(HBITMAP hBitmap);
void SetAllBitmap(HBITMAP hBitmapNormal, HBITMAP hBitmapLBtnDown, HBITMAP hBitmapHover,
int iNormalLeftLen = 0, int iNormalRightLen = 0);
/****************************************************************************
| 函數(shù)功能:設(shè)置按鈕上的圖標(biāo)的位圖 |
| 輸入?yún)?shù): |
| hBitmap: 位圖 |
| pIconRect:圖標(biāo)占據(jù)的矩形 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetIcon(HBITMAP hBitmap, RECT* pIconRect);
/****************************************************************************
| 函數(shù)功能:設(shè)置窗體的不透明度 |
| 輸入?yún)?shù): |
| iTransparency: 不透明度的百分比 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void SetTransparency(int iTransparency);
/****************************************************************************
| 函數(shù)功能:設(shè)置父窗體背景內(nèi)存畫布 |
| 輸入?yún)?shù): |
| hParentBgMemDC: 父窗體背景內(nèi)存畫布 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明:當(dāng)父窗體背景在變化并且此窗體本身也有透明度時(shí)(包括窗體使用的位圖 |
| 具有透明度或者窗體沒有背景位圖),需要調(diào)用此接口 |
****************************************************************************/
void SetParentBgMemDC(HDC hParentBgMemDC, int x = 0, int y = 0);
/****************************************************************************
| 函數(shù)功能:設(shè)置父窗體使用的背景位圖 |
| 輸入?yún)?shù): |
| hParentBgBitmap: 父窗體使用的背景位圖 |
| x, y 位圖繪畫起始點(diǎn)坐標(biāo) |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明:當(dāng)父窗體背景使用靜態(tài)位圖并且此窗體本身也有透明度時(shí)(包括窗體使用 |
| 的位圖具有透明度或者窗體沒有背景位圖),需要調(diào)用此接口 |
****************************************************************************/
void SetParentBgBitmap(HBITMAP hParentBgBitmap, int x = 0, int y = 0);
/****************************************************************************
| 函數(shù)功能:設(shè)置父窗體背景顏色 |
| 輸入?yún)?shù): |
| CRParentBg: 父窗體背景顏色 |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明:當(dāng)父窗體背景使用固定顏色并且此窗體本身也有透明度時(shí)(包括窗體使用 |
| 的位圖具有透明度或者窗體沒有背景位圖),需要調(diào)用此接口 |
****************************************************************************/
void SetParentBgColor(COLORREF CRParentBg = RGB(236, 233, 216));
/****************************************************************************
| 函數(shù)功能:把窗口繪制到目標(biāo)設(shè)備內(nèi)容 |
| 輸入?yún)?shù): |
| hdcDest: 目標(biāo)設(shè)備內(nèi)容 |
| x, y: 繪畫起始坐標(biāo) |
| 輸出參數(shù):無 |
| 返回值: 無 |
| 說 明: |
****************************************************************************/
void DrawWindow(HDC hdcDest, int x = 0, int y = 0);
CMyButton* GetCMyButton();
private:
CMyButton* m_pclBtn;
};
#endif //!__CHTBUTTON_H__
此類支持窗體以任意透明度顯示,操作很簡單,使用下面接口即可實(shí)現(xiàn):
void SetTransparency(int iTransparency);
CHTButton類同時(shí)也實(shí)現(xiàn)了PNG透明按鈕,感興趣的讀者可以自己測試一下。
相關(guān)文章
基礎(chǔ)C語言編程時(shí)易犯錯(cuò)誤有哪些
基礎(chǔ)C語言編程時(shí)易犯錯(cuò)誤有哪些?這篇文章主要介紹了C語言編程時(shí)常見的錯(cuò)誤,感興趣的小伙伴們可以參考一下2016-11-11
c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表
構(gòu)造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯示的出現(xiàn)在構(gòu)造函數(shù)的成員初始化列表中,都會在該處完成初始化,并且初始化的順序和其在聲明時(shí)的順序是一致的,與列表的先后順序無關(guān)2013-09-09
簡單對比C語言中的fputs()函數(shù)和fputc()函數(shù)
這篇文章主要介紹了簡單對比C語言中的fputs()函數(shù)和fputc()函數(shù),注意其之間的區(qū)別,需要的朋友可以參考下2015-08-08
基于OpenCV實(shí)現(xiàn)的人臉簽到系統(tǒng)源代碼
本文從實(shí)際背景和需求出發(fā),采用人臉識別簽到考勤改變了傳統(tǒng)人工檢驗(yàn)的做法,極大提高了組織效率和辦事能力,這篇文章主要給大家介紹了關(guān)于如何基于OpenCV實(shí)現(xiàn)的人臉簽到系統(tǒng)的相關(guān)資料,需要的朋友可以參考下2024-04-04
一文詳解如何在VS?Code上搭建C/C++開發(fā)環(huán)境
VSCode是由微軟開發(fā)的一款免費(fèi)、開源、跨平臺的文本編輯器,它具有許多強(qiáng)大的功能,這篇文章主要給大家介紹了關(guān)于如何在VS?Code上搭建C/C++開發(fā)環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03

