文章轉載於:http://www.cnblogs.com/lidabo/archive/2012/12/17/2821122.htmlhtml
CButtonST使我目前見過的最強大,功能最全的CButton派生類。撰寫本文的目的不在於技術的討論,而是但願可以爲各位提供關於CButtonST的使用參考,以提升編寫程序的速度。 ide
下圖是用CButtonST作的幾個按鈕 函數
如下是CButtonST類的一些版本信息,方便你們能夠及時得到它的最新版本。 this
做者:Davide Calabro spa
郵箱地址:davide_calabro@yahoo.com 3d
我的主頁:http://www.softechsoftware.it code
CButtonST類主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp四個文件。若是你打算使用CButtonST的窗口不止一個,那麼我建議你在VC++的Workspace | FileView中導入以上的四個文件以後,而後在SdtAfx.h文件中添加合適的include語句,如#include "BtnST.h"。 htm
在接下來的幾篇文章中,我將根據做者提供的演示程序向你們介紹CButtonST的各類經常使用方法。在最後一篇文章中,將爲各位提供CButtonST類的中文文檔,以供各位在之後的使用中參考。 blog
本篇主要包括瞭如下的效果: 圖片
1. 在按鈕上加入Icon,使Icon和文字同時顯示
2. 顯示平面按鈕
3. 使按鈕上的圖標可變
4. 設置按鈕在不一樣狀態下的底色和文字顏色
5. 設置圖標和文字的位置
6. 根據Icon的形狀設置按鈕的形狀
7. 添加Tooltips
如下是Basic Features的演示界面:
效果一:在按鈕上加入Icon,使Icon和文字同時顯示
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.SetFlat(FALSE);
注意:爲達到最好效果,請根據Icon的大小調整按鈕的大小。
實例:演示程序中的Standar 按鈕。
效果二:顯示平面按鈕
只須要在效果一的基礎上把m_btn.SetFlat(FALSE);語句去掉。
效果三:使按鈕上的圖標可變
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量
1.
CButtonST m_btn;
2. 添加兩個Icon資源,ID設爲IDI_ICON1和IDI_ICON2
IDI_ICON1是普通狀態的圖標,IDI_ICON2是按下時的圖標
3. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON2,IDI_ICON1);
實例:演示程序中的Halloween 按鈕。
效果四:設置按鈕在不一樣狀態下的底色和文字顏色
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(208,208,208));
4.
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, RGB(208,208,208));
5.
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
提示:SetColor函數和OffsetColor函數的第一個參數表示按鈕的各個狀態,前景色就是文字的顏色,它們的取值表示:
1.
BTNST_COLOR_BK_IN
//鼠標放在按鈕內時的背景色
2.
BTNST_COLOR_FG_IN,
//鼠標放在按鈕內時的前景色
3.
BTNST_COLOR_BK_OUT,
//普通狀態時的背景色
4.
BTNST_COLOR_FG_OUT,
//普通狀態時的前景色
5.
BTNST_COLOR_BK_FOCUS,
//按鈕被按下後的背景色
6.
BTNST_COLOR_FG_FOCUS,
//按鈕被按下後的前景色
實例:演示程序中的48×48 icon 按鈕、Zip按鈕等。
效果五:設置圖標和文字的位置
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2.添加Icon資源,ID設爲IDI_ICON1
3.在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.SetAlign(CButtonST::ST_ALIGN_VERT);
提示:SetAlign函數的第一個參數表示位置信息,缺省狀況下,文字在圖標右邊
1.
ST_ALIGN_HORIZ
// 文字在右
2.
ST_ALIGN_VERT
//文字在下
3.
ST_ALIGN_HORIZ_RIGHT
// 文字在左
實例:演示程序中的Search 按鈕。
效果六:根據Icon的形狀設置按鈕的形狀
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2.添加Icon資源,設其ID設爲IDI_ICON1
3.在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.DrawBorder(FALSE);
4.
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(208,208,208));
5.
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(208,208,208));
6.
m_btn.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, RGB(208,208,208));
注意:爲達到最好效果,請根據Icon的大小調整按鈕的大小。
並根據實際狀況設置背景顏色。請事先將按鈕的文字去掉。
效果七:添加Tooltips
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2.添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.SetTooltipText(_T(
"This is a tooltip.\r\nMultiline!"
));
上一篇文章《 CButtonST使用技巧(一) 》介紹了CButtonST使用的7種技巧,本篇主要包括瞭如下的效果:
1. 改變鼠標進入按鈕時的形狀(超連接效果)
2. 菜單按鈕
3. 位圖按鈕
4. 按鈕焦點
5. CheckBox按鈕
6. 透明按鈕(按鈕背景和窗口背景同樣)
7. 特殊的PictureBox
效果一:改變鼠標進入按鈕時的形狀(超連接效果)
假設按鈕ID爲IDC_BUTTON1
1. 添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
4.
m_btn.SetURL(
"www.scut.edu.cn"
);
5.
m_btn.SetTooltipText(
"www.scut.edu.cn"
);
6.
m_btn.SetBtnCursor(IDC_CURSOR1);
效果二:菜單按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 添加Menu,ID設爲IDR_MENU
4. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
4.
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.添加成員變量
1.
CButtonST m_btn;
2.添加位圖資源,ID設爲IDB_BITMAP1
3.在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetBitmaps(IDB_BITMAP1,RGB(0,0,0));
3.
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
提示: 上面的SetBitmaps函數會將圖片中顏色值爲RGB(0,0,0)的點設爲透明。
效果四:按鈕焦點
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,設其ID設爲IDI_ICON1
3. 在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.SetAlign(CButtonST::ST_ALIGN_VERT);
4.
m_btn.DrawFlatFocus(TRUE);
效果五:CheckBox按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,ID設爲IDI_ICON1和IDI_ICON2
3.在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_CHECK1,
this
);
2.
m_btn.SetIcon(IDI_ICON1,IDI_ICON2);
3.
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
提示:
IDI_ICON1爲選中時候顯示的圖標
IDI_ICON2爲爲選中時候的圖標
效果六:透明按鈕
假設按鈕ID爲IDC_BUTTON1
1.添加成員變量
1.
CButtonST m_btn;
2. 添加Icon資源,ID設爲IDI_ICON1
3.在OnInitDialog函數中初始化按鈕
1.
m_btn.SubclassDlgItem(IDC_BUTTON1,
this
);
2.
m_btn.SetIcon(IDI_ICON1);
3.
m_btn.DrawTransparent(TRUE);
效果七:特殊的PictureBox
利用CButtonST的特殊顯示風格,徹底能夠把它看成一個PictureBox控件使用。這時通常會把按鈕的屬性設置爲disable。
實例:演示程序的About頁中使用了CButtonST來代替PictureBox。
本篇將向你們介紹兩個CButtonST的派生類。
1、CWinXPButtonST類
CWinXPButtonST類 是一個CButtonST的派生類。它的特色是使用了WindowsXP中的圓角、黑色邊框的風格。它包括WinXPButtonST.h和WinXPButtonST.cpp兩個文件,而因爲它是從CButtonST派生而來的,因此在引用它時,也要一併引入CButtonST的文件。
使用:
1. 引入文件,添加文件
2. 導入文件後,在SdtAfx.h文件中添加
1.
#include "WinXPButtonST.h"
3. 添加成員變量
1.
CWinXPButtonST m_btn2;
4. 假設按鈕ID爲IDC_BUTTON
添加Icon資源,ID設爲IDI_ICON1
5. 在OnInitDialog函數中初始化按鈕
1.
m_btn2.SubclassDlgItem(IDC_BUTTON,
this
);
2.
m_btn2.SetIcon(IDI_ICON1);
3.
m_btn2.SetRounded(TRUE);
注意:可是它存在一個不足的地方,就是按鈕的圓角是畫出來的,按鈕的形狀仍然是原來的矩形。因此若是在有背景色的窗口中使用該按鈕的話就會顯得至關礙眼。
如圖所示,在黑色的背景色中顯示出難看的尖角:
解決的辦法是經過SetColor函數使得按鈕的底色與窗口的底色一致。
2、CShadeButtonST類
CShadeButtonST類 是CButtonST的另外一個派生類。它的特色是支持更爲多樣化的背景,經過SetShade函數能夠爲按鈕設置9種不通的背景效果。它包括四個文件,它們分別是CeXDib.h、CeXDib.cpp、ShadeButtonST.h和ShadeButtonST.cpp。在引用它時,一樣要一併引入CButtonST的文件。
使用:
1.引入文件,添加文件
2.導入文件後,在SdtAfx.h文件中添加
1.
#include "ShadeButtonST.h"
3.添加成員變量
1.
CShadeButtonST m_btn3;
4.假設按鈕ID爲IDC_BUTTON3
添加Icon資源,ID設爲IDI_ICON1
5.在OnInitDialog函數中初始化按鈕
1.
m_btn3.SubclassDlgItem(IDC_BUTTON3,
this
);
2.
m_btn3.SetIcon(IDI_ICON1);
3.
m_btn3.SetShade(CShadeButtonST::SHS_METAL);
下面給出各類背景效果和對應的參數值。