本文以實例形式講解了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透明按鈕,感興趣的讀者可以自己測試一下。
新聞熱點
疑難解答
圖片精選