VC++中HTControl的CHTButton按鈕控件類用法實例解析
本文以實例形式講解了VC++中HTControl控件類的CHTButton按鈕控件類用法,相信對大家更好的理解VC++有一定的幫助。具體內(nèi)容如下:
一般了解VC++的朋友都知道,VC++ 按鈕控件CHTButton隸屬HTControl控件組,直接由WIN32 API實現(xiàn),你可以在SDK,MFC,wxWidget等環(huán)境下使用它。支持生成各種類型的按鈕,比如:普通按鈕,PNG透明按鈕,復(fù)選框按鈕,單選按鈕等。使用時請注意,窗體必須動態(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坐標(相對于父窗體) | | y: 窗體位置y坐標(相對于父窗體) | | iWidth: 窗體寬 | | iHeight: 窗體高 | | hParent: 父窗口句柄 | | hBtnId: 窗體ID | | szLabel: 窗體標題 | | dwStyle: 按鈕行為標識 | | BS_CHECKBOX :復(fù)選框按鈕 | | BS_RADIOBUTTON :單選按鈕 | | BS_NOTIFY:發(fā)送得到(BN_SETFOCUS)失去(BN_KILLFOCUS)焦點的通知 | | 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坐標 | | y: 窗體位置y坐標 | | 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è)置字體(鼠標停留窗體上時) | | 輸入?yún)?shù): | | hFont: 字體 | | 輸出參數(shù):無 | | 返回值: 無 | | 說 明:如未設(shè)置則采用SetFont設(shè)置的字體 | ****************************************************************************/ void SetHoverFont(HFONT hFont); /**************************************************************************** | 函數(shù)功能:設(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: 文字起始坐標,默認居中 | | bTextMove:按下時文字是否移動(向右下角移動一像素) | | 輸出參數(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è)置長按生效時間 | | 輸入?yún)?shù): | | wLongPressTime : 長按生效時間(長按通知碼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è)置鼠標在按鈕之上時按鈕的位圖 | | 輸入?yún)?shù): | | hBitmap: 位圖 | | 輸出參數(shù):無 | | 返回值: 無 | | 說 明: | ****************************************************************************/ void SetHoverBitmap(HBITMAP hBitmap); /**************************************************************************** | 函數(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è)置按鈕上的圖標的位圖 | | 輸入?yún)?shù): | | hBitmap: 位圖 | | pIconRect:圖標占據(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ù):無 | | 返回值: 無 | | 說 明:當父窗體背景在變化并且此窗體本身也有透明度時(包括窗體使用的位圖 | | 具有透明度或者窗體沒有背景位圖),需要調(diào)用此接口 | ****************************************************************************/ void SetParentBgMemDC(HDC hParentBgMemDC, int x = 0, int y = 0); /**************************************************************************** | 函數(shù)功能:設(shè)置父窗體使用的背景位圖 | | 輸入?yún)?shù): | | hParentBgBitmap: 父窗體使用的背景位圖 | | x, y 位圖繪畫起始點坐標 | | 輸出參數(shù):無 | | 返回值: 無 | | 說 明:當父窗體背景使用靜態(tài)位圖并且此窗體本身也有透明度時(包括窗體使用 | | 的位圖具有透明度或者窗體沒有背景位圖),需要調(diào)用此接口 | ****************************************************************************/ void SetParentBgBitmap(HBITMAP hParentBgBitmap, int x = 0, int y = 0); /**************************************************************************** | 函數(shù)功能:設(shè)置父窗體背景顏色 | | 輸入?yún)?shù): | | CRParentBg: 父窗體背景顏色 | | 輸出參數(shù):無 | | 返回值: 無 | | 說 明:當父窗體背景使用固定顏色并且此窗體本身也有透明度時(包括窗體使用 | | 的位圖具有透明度或者窗體沒有背景位圖),需要調(diào)用此接口 | ****************************************************************************/ void SetParentBgColor(COLORREF CRParentBg = RGB(236, 233, 216)); /**************************************************************************** | 函數(shù)功能:把窗口繪制到目標設(shè)備內(nèi)容 | | 輸入?yún)?shù): | | hdcDest: 目標設(shè)備內(nèi)容 | | x, y: 繪畫起始坐標 | | 輸出參數(shù):無 | | 返回值: 無 | | 說 明: | ****************************************************************************/ void DrawWindow(HDC hdcDest, int x = 0, int y = 0); CMyButton* GetCMyButton(); private: CMyButton* m_pclBtn; }; #endif //!__CHTBUTTON_H__
此類支持窗體以任意透明度顯示,操作很簡單,使用下面接口即可實現(xiàn):
void SetTransparency(int iTransparency);
CHTButton類同時也實現(xiàn)了PNG透明按鈕,感興趣的讀者可以自己測試一下。
相關(guān)文章
win10+VS2017+Cuda10.0環(huán)境配置詳解
這篇文章主要介紹了win10+VS2017+Cuda10.0環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08C++面試八股文之如何實現(xiàn)strncpy函數(shù)
strncpy函數(shù),主要用做字符串復(fù)制,將于字符從一個位置復(fù)制到另一個位置,那么如何實現(xiàn)一個strncpy函數(shù),下面小編就來和大家簡單講講吧2023-07-07C++實現(xiàn)插入排序?qū)φ麛?shù)數(shù)組排序
這篇文章主要為大家詳細介紹了C++實現(xiàn)插入排序?qū)φ麛?shù)數(shù)組排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05C/C++細數(shù)宏與函數(shù)有那些區(qū)別
在C程序中,可以用宏代碼提高執(zhí)行效率。宏代碼本身不是函數(shù),但使用起來象函數(shù)。預(yù)處理器用復(fù)制宏代碼的方式代替函數(shù)調(diào)用,省去了參數(shù)壓棧、生成匯編語言的CALL調(diào)用、返回參數(shù)、執(zhí)行return等過程,從而提高了速度2022-10-10