CButtonST類說明



////////////////////////////////////////////////////////// stdafx.h  需要修改
#ifndef _AFX_NO_OLE_SUPPORT
//#include <afxdtctl.h>           // MFC 對 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
//#define BTNST_USE_BCMENU

#include <afxcmn.h> // MFC 對 Windows 公共控件的支持

#include "BCMenu.h"
#include "BtnST.h"
#include "TabCtrlST.h"
#endif // _AFX_NO_AFXCMN_SUPPORT
//////////////////////////////////////////////////////////



CButtonST類主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp四個文件。

工程project--add to project--files加入文件BtnST.cpp、BtnST.h、BCMenu.cpp、BCMenu.h文件

效果一:在按鈕上加入Icon,使Icon和文字同時顯示
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量

CButtonST    m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕 m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.SetFlat(FALSE);
注意:爲達到最好效果,請根據Icon的大小調整按鈕的大小。
實例:演示程序中的Standar 按鈕。

效果二:顯示平面按鈕
只需要在效果一的基礎上把m_btn.SetFlat(FALSE);語句去掉。

效果三:使按鈕上的圖標可變
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量CButtonST    m_btn;
2. 添加兩個Icon資源,ID設爲IDI_ICON1和IDI_ICON2
IDI_ICON1是普通狀態的圖標,IDI_ICON2是按下時的圖標

3. 在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON2,IDI_ICON1);
實例:演示程序中的Halloween 按鈕。

效果四:設置按鈕在不同狀態下的底色和文字顏色
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量 CButtonST    m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(208,208,208));
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, RGB(208,208,208));
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
提示:SetColor函數和OffsetColor函數的第一個參數表示按鈕的各個狀態,前景色就是文字的顏色,它們的取值表示:

BTNST_COLOR_BK_IN    //鼠標放在按鈕內時的背景色
BTNST_COLOR_FG_IN,    //鼠標放在按鈕內時的前景色
BTNST_COLOR_BK_OUT,    //普通狀態時的背景色    
BTNST_COLOR_FG_OUT,    //普通狀態時的前景色
BTNST_COLOR_BK_FOCUS,    //按鈕被按下後的背景色
BTNST_COLOR_FG_FOCUS,    //按鈕被按下後的前景色
實例:演示程序中的48×48 icon 按鈕、Zip按鈕等。

效果五:設置圖標和文字的位置
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量 CButtonST    m_btn;
2.添加Icon資源,ID設爲IDI_ICON1
3.在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
    m_btn.SetIcon(IDI_ICON1);
    m_btn.SetAlign(CButtonST::ST_ALIGN_VERT);

提示:SetAlign函數的第一個參數表示位置信息,缺省情況下,文字在圖標右邊ST_ALIGN_HORIZ    // 文字在右
ST_ALIGN_VERT    //文字在下
ST_ALIGN_HORIZ_RIGHT// 文字在左

實例:演示程序中的Search 按鈕。

效果六:根據Icon的形狀設置按鈕的形狀
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量 CButtonST    m_btn;
2.添加Icon資源,設其ID設爲IDI_ICON1
3.在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.DrawBorder(FALSE);
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(208,208,208));
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(208,208,208));
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, RGB(208,208,208));
注意:爲達到最好效果,請根據Icon的大小調整按鈕的大小。
並根據實際情況設置背景顏色。請事先將按鈕的文字去掉。

效果七:添加Tooltips
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量CButtonST    m_btn;
2.添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.SetTooltipText(_T("This is a tooltip.\r\nMultiline!"));



效果八:改變鼠標進入按鈕時的形狀(超鏈接效果)
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量CButtonST    m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕 m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_btn.SetURL("www.scut.edu.cn");
m_btn.SetTooltipText("www.scut.edu.cn");
m_btn.SetBtnCursor(IDC_CURSOR1);


效果九:菜單按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
CButtonST    m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 添加Menu,ID設爲IDR_MENU
4. 在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_btn.SetMenu(IDR_MENU, m_hWnd);
注意:菜單的效果類似與右鍵菜單,所有在設置菜單選項時只設置一列就夠了。另外菜單的寬度與菜單的文字長度有關,

可以用空格佔位的辦法以達到最佳效果。

在菜單中引入位圖的方法

1.添加ToolBar,依次使用Menu菜單項ID作爲ToolBar按鈕的ID。
2.ToolBar上的按鈕圖標將顯示在相應的菜單項中。
將上面代碼中的m_btn.SetMenu(IDR_MENU, m_hWnd);
改爲m_btn.SetMenu(IDR_MENU, m_hWnd, TRUE, IDR_TOOLBAR);
IDR_TOOLBAR爲相應ToolBar的ID。

效果十:位圖按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
CButtonST    m_btn;
2.添加位圖資源,ID設爲IDB_BITMAP1
3.在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);    
m_btn.SetBitmaps(IDB_BITMAP1,RGB(0,0,0));
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
提示: 上面的SetBitmaps函數會將圖片中顏色值爲RGB(0,0,0)的點設爲透明。

效果十一:按鈕焦點
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
CButtonST    m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.SetAlign(CButtonST::ST_ALIGN_VERT);
m_btn.DrawFlatFocus(TRUE);

效果十二:CheckBox按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
CButtonST    m_btn;
2. 添加Icon資源,ID設爲IDI_ICON1和IDI_ICON2
3.在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_CHECK1,this);
m_btn.SetIcon(IDI_ICON1,IDI_ICON2);
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);

提示:
IDI_ICON1爲選中時候顯示的圖標
IDI_ICON2爲爲選中時候的圖標

效果十三:透明按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
CButtonST    m_btn;
2. 添加Icon資源,ID設爲IDI_ICON1
3.在OnInitDialog函數中初始化按鈕m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.DrawTransparent(TRUE);

效果十四:特殊的PictureBox
利用CButtonST的特殊顯示風格,完全可以把它當作一個PictureBox控件使用。這時一般會把按鈕的屬性設置爲disable


實例:演示程序的About頁中使用了CButtonST來代替PictureBox。


/////////////////////////////////////////////////////華麗的分割線///////////////////////////
//////CButtonST類公共接口函數/////
以下是CButtonST類的所有公共成員函數(函數名按音序排列先後):

CButtonST::DrawBorder
DWORD DrawBorder(BOOL bDrawBorder = TRUE, BOOL bRepaint = TRUE)
註釋:
因爲CButtonST的默認顯示風格是平面按鈕。調用此函數用來顯示按鈕邊框。

參數:
bDrawBorder: 值爲TRUE則顯示按鈕邊框。
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行完畢。

CButtonST::DrawFlatFocus
DWORD DrawFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = TRUE)
註釋:
此函數只對平面按鈕有效,調用此函數可以在按鈕中顯示焦點。

參數:
bDrawFlatFocus : 值爲TRUE則會在平面按鈕上顯示焦點。
bRepaint : 值爲TRUE則馬上重畫按鈕。

返回值:
BTNST_OK: 表示函數執行成功。

CButtonST::DrawTransparent
void DrawTransparent(BOOL bRepaint = FALSE)
註釋:
調用此函數來激活透明顯示模式。注意,此操作是不可逆的,而且必須在按鈕實例創建之後調用。函數將會在內存中保

留一份窗口背景的拷貝,因此請真的有需要時才調用此函數,以免浪費內存空間。透明模式一般是在帶有背景的窗口中

使用。

參數:
bRepaint : 爲TRUE則馬上重繪按鈕。

CButtonST::OffsetColor
DWORD OffsetColor(BYTE byColorIndex, short shOffset, BOOL bRepaint = TRUE)
註釋:
調用此函數可以設置按鈕在各種狀態下顯示指定的底色。函數會根據所傳遞的偏移量參數以及按鈕原來的默認底色產生

一個新的顏色值。通過這樣的方法可以使得按鈕在不同狀態下的顏色變化更爲自然。

參數:
byColorIndex : 狀態索引值,它的取值必須是以下枚舉值之一。
取值註釋
BTNST_COLOR_BK_IN 鼠標指針位於按鈕上面時的底色
BTNST_COLOR_FG_IN 鼠標指針位於按鈕上面時的前景色
BTNST_COLOR_BK_OUT 鼠標指針不在按鈕上面時的底色
BTNST_COLOR_FG_OUT 鼠標指針不在按鈕上面時的前景色
BTNST_COLOR_BK_FOCUS 焦點位於按鈕上面時的底色
BTNST_COLOR_FG_FOCUS 焦點位於按鈕上面時的前景色
*前景色一般是指文字的顏色
shOffsetColor: 指定顏色的偏移量,它的取值範圍是[-255,255]。
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK : 函數執行成功。
BTNST_INVALIDINDEX : 由 byColorIndex 指定狀態索引值無效。
BTNST_BADPARAM : 根據偏移量生成的值超出RGB的顏色取值範圍。

CButtonST::SetAlign
DWORD SetAlign(BYTE byAlign, BOOL bRepaint = TRUE)
註釋:
調用此函數可以設定按鈕上圖標(或位圖)於按鈕上文字的相對位置。

參數:
byAlign: 位置參數,它的取值必須是以下枚舉量之一。
取值註釋
ST_ALIGN_HORIZ 圖標/圖片在左,文字在右
ST_ALIGN_VERT 圖標/圖片在上,文字在下
ST_ALIGN_HORIZ_RIGHT 圖標/圖片在右,文字在左
默認值爲ST_ALIGN_HORIZ.
bRepaint: 爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。
BTNST_INVALIDALIGN: 位置參數無效。

CButtonST::SetAlwaysTrack
DWORD SetAlwaysTrack(BOOL bAlwaysTrack = TRUE)
註釋:
此函數只對平面按鈕有效。調用此函數可以設定按鈕是否顯示高亮顏色。

參數:
bAlwaysTrack: 值爲TRUE時,無論前窗口是否爲激活窗口,只要鼠標指針移動到按鈕上面都會發按鈕的顯示狀態發生變

化。默認值爲TRUE。
值爲FALSE時,如果窗口未被激活,按鈕的顯示不會發生變化。

返回值:
BTNST_OK : 函數執行成功。

CButtonST::SetBitmaps
DWORD SetBitmaps(int nBitmapIn, COLORREF crTransColorIn, int nBitmapOut = NULL, COLORREF crTransColorOut

= 0)
DWORD SetBitmaps(HBITMAP hBitmapIn, COLORREF crTransColorIn, HBITMAP hBitmapOut = NULL, COLORREF

crTransColorOut = 0)
註釋:
調用此函數可以在按鈕上顯示指定的圖片(Icon)。如果對同一個按鈕重複調用了此函數的話,那麼按鈕只顯示最後一

次指定的圖片。

參數:
nBitmapIn: 圖片的ID值。當鼠標指針位於按鈕之上時顯示該圖片。
crTransColorIn: 顏色值。ID爲nBitmapIn的圖片中與該顏色相同的區域將顯示透明。
nBitmapOut: 圖片的ID值。當鼠標指針不在按鈕之上時顯示該圖片。
crTransColorOut: 顏色值。ID爲nBitmapOut的圖片中與該顏色相同的區域將顯示透明。
hBitmapIn: 圖片的句柄。當鼠標指針位於按鈕之上時顯示該圖片。
crTransColorIn: 顏色值。由hBitmapIn指定的圖片中與該顏色相同的區域將顯示透明。
hBitmapOut: 圖片的ID值。當鼠標指針不在按鈕之上時顯示該圖片。
crTransColorOut: 顏色值。由hBitmapOut指定的圖片中與該顏色相同的區域將顯示透明。

返回值:
BTNST_OK: 函數執行成功。
BTNST_INVALIDRESOURCE: 指定資源讀取失敗。
BTNST_FAILEDMASK: 顏色提取失敗。

CButtonST::SetBtnCursor
DWORD SetBtnCursor(int nCursorId = NULL, BOOL bRepaint = TRUE)
註釋:
這個函數可以讓鼠標在移動到按鈕上面的時候顯示指定的鼠標指針。

參數:
nCursorId: 鼠標指針的ID值。
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。
BTNST_INVALIDRESOURCE: 讀取指定資源失敗。

CButtonST::SetCheck
DWORD SetCheck(int nCheck, BOOL bRepaint = TRUE)
註釋:
當按鈕被當作CheckBox使用的時候,用來設置按鈕的狀態。

參數:
nCheck : 1表示選中; 0表示沒選中
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。

CButtonST::SetColor
DWORD SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint = TRUE)[
註釋:
調用此函數可以設置按鈕在各種狀態下顯示指定的底色。

參數:
byColorIndex : 狀態索引值。具體含義可以參見OffsetColor函數中的參數(byColorIndex)說明。
crColor : 顏色值。設置按鈕指定狀態的底色。
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。
BTNST_INVALIDINDEX: 無效的狀態索引值。

CButtonST::SetDefaultColors
DWORD SetDefaultColors(BOOL bRepaint = TRUE)
註釋:
調用此函數之後,程序將使用默認顏色來設定按鈕在各個狀態下的顏色。這些顏色值可能會因爲Windows版本的不同而不

同。

參數:
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。

CButtonST::SetFlat
DWORD SetFlat(BOOL bFlat = TRUE, BOOL bRepaint = TRUE)
註釋:
調用此函數來設置按鈕的顯示風格。

參數:
bFlat: 值爲TRUE則顯示爲平面按鈕; 值爲FALSE則顯示爲標準的Windows按鈕
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。

CButtonST::SetIcon
DWORD SetIcon(int nIconIn, int nIconOut = NULL)
DWORD SetIcon(HICON hIconIn, HICON hIconOut = NULL)
註釋:
調用此函數可以在按鈕上顯示指定的圖標(Icon)。如果對同一個按鈕重複調用了此函數的話,那麼按鈕只顯示最後一

次指定的圖標。

參數:
nIconIn : 圖標的ID值,當鼠標指針移動到按鈕上面的時候顯示該圖標。如果該參數被賦值爲 NULL ,則分配給這個按

鈕的所有圖標資源將被釋放。
hIconOut: 圖標的ID值,當鼠標指針不在按鈕上面的時候顯示該圖標。調用函數的時候可以忽略該參數。
hIconIn : 圖標的句柄,當鼠標指針移動到按鈕上面的時候顯示該圖標。如果該參數被賦值爲 NULL ,則分配給這個按

鈕的所有圖標資源將被釋放。
hIconOut: 圖標的句柄,當鼠標指針不在按鈕上面的時候顯示該圖標。調用函數的時候可以忽略該參數。

返回值:
BTNST_OK: 表示函數執行成功。
BTNST_INVALIDRESOURCE: 表示函數執行失敗,例如無法讀取指定的圖標資源。

CButtonST::SetMenu
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bWinXPStyle = TRUE, UINT nToolbarID = NULL, CSize

sizeToolbarIcon = CSize(16, 16), COLORREF crToolbarBk = RGB(255, 0, 255), BOOL bRepaint = TRUE)
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bRepaint = TRUE)
註釋:
要調用此函數必須與BCMenu類一起使用。函數將爲按鈕指派一個菜單,當點擊按鈕的時候會彈出所指派的菜單。此函數

的調用與宏有關,如果在代碼中聲明瞭BTNST_USE_BCMENU 宏,則應該調用SetMenu函數的第一種形式,否則應該調用

SetMenu的後一種形式。

參數:
nMenu : 菜單的ID值。
hParentWnd: 菜單所屬的窗口句柄。菜單選項將觸發該窗口內的時間。
bWinXPStyle: 值爲TRUE則會以XP風格顯示菜單, 值爲FALSE則會以標準風格顯示菜單。
nToolbarID: 工具條的ID值。程序會將工具條中與菜單項ID值相同圖片加入到菜單中。
sizeToolbarIcon: 指定工具條中每一個圖標的大小,它是一個CSize 類型的實例。注意請確保工具條中所有圖標的大小

一致。
crToolbarBk: 顏色值。工具條圖片中與該顏色相同的區域將顯示爲透明。
bRepaint: 值爲TRUE則馬上重繪按鈕。

返回值:
BTNST_OK: 函數執行成功。
BTNST_INVALIDRESOURCE: 無法讀取指定資源。

CButtonST::TooltipText
void SetTooltipText(int nText, BOOL bActivate = TRUE)
void SetTooltipText(LPCTSTR lpszText, BOOL bActivate = TRUE)
註釋:
調用此函數可以爲按鈕設定提示信息。

參數:
nText: 字符串的ID值。
lpszText: 所要顯示的字符串。
nActivate: 值爲TRUE表示激活提示功能, 值爲FALSE表示不激活提示功能。

CButtonST::SetURL
DWORD SetURL(LPCTSTR lpszURL = NULL)
註釋:
調用此函數後,單擊按鈕將打開參數所指定的連接。

參數:
lpszURL: 包含鏈接信息的字符串。

返回值:
BTNST_OK: 函數執行成功。
///////////////////////////////////////華麗的分線線/////////////////////////
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章