CButtonST(作者 Davide Calabro)被公認為功能最完整的 CButton 衍生類別,支援圖示、位圖、選單、工具提示、超連結、透明背景、CheckBox 模式等豐富功能。本文整理其核心功能與實際套用範例,作為快速查閱手冊。
BtnST.h、BtnST.cpp、BCMenu.h、BCMenu.cppStdAfx.h 統一引入:#include "BtnST.h"| 效果 | 關鍵程式碼 | 說明 |
|---|---|---|
| 圖示+文字同時顯示 | m_btn.SetIcon(IDI_ICON1); | 依圖示大小調整按鈕尺寸 |
| 平面按鈕 | 移除 SetFlat(FALSE) | 預設即為平面風格 |
| 狀態切換圖示 | m_btn.SetIcon(IDI_ICON2, IDI_ICON1); | 第一參數為按下狀態,第二為一般狀態 |
| 自訂顏色 | m_btn.SetColor(BTNST_COLOR_BK_OUT, RGB(208,208,208)); | 支援六種狀態顏色,OffsetColor 依基底色偏移產生自然變化 |
| 圖示文字位置 | m_btn.SetAlign(CButtonST::ST_ALIGN_VERT); | 支援水平、垂直、右側對齊 |
| 依圖示形狀裁剪 | m_btn.DrawBorder(FALSE); | 移除邊框並統一背景色,配合透明圖示效果最佳 |
| 工具提示 | m_btn.SetTooltipText(_T("提示文字\r\n多行支援")); | 支援多行與資源 ID 兩種方式 |
| 效果 | 關鍵設定 |
|---|---|
| 超連結按鈕 | m_btn.SetURL("www.example.com"); |
| 下拉選單按鈕 | m_btn.SetMenu(IDR_MENU, m_hWnd); 需搭配工具列資源實現選單圖示 |
| 位圖按鈕 | m_btn.SetBitmaps(IDB_BITMAP1, RGB(0,0,0)); 指定透明色 |
| 焦點框樣式 | m_btn.DrawFlatFocus(TRUE); 平面按鈕專用 |
| CheckBox 模式 | m_btn.SetIcon(IDI_CHECK_ON, IDI_CHECK_OFF); 針對 CheckBox 控制項 |
| 透明按鈕 | m_btn.DrawTransparent(TRUE); 內存保留背景拷貝,慎用 |
| PictureBox 替代品 | 設為 Disable 狀態,純顯示圖片用途 |
#include "WinXPButtonST.h"
CWinXPButtonST m_btn2;
m_btn2.SubclassDlgItem(IDC_BUTTON, this);
m_btn2.SetIcon(IDI_ICON1);
m_btn2.SetRounded(TRUE);
已知缺陷:圓角為繪製而非真實視窗區域,有背景色時會出現尖角殘留。解法:SetColor() 統一按鈕與視窗背景色。
#include "ShadeButtonST.h"
CShadeButtonST m_btn3;
m_btn3.SubclassDlgItem(IDC_BUTTON3, this);
m_btn3.SetIcon(IDI_ICON1);
m_btn3.SetShade(CShadeButtonST::SHS_METAL);
支援 9 種陰影效果:SHS_METAL、SHS_HARDBUMP、SHS_SOFTBUMP、SHS_GLASS、SHS_MATT 等,需額外引入 CeXDib.h/cpp。
CButtonST 以四個核心檔案提供企業級按鈕解決方案,從基礎圖示顯示到進階選單、超連結、透明效果一應俱全。兩個衍生類別更擴展了視覺風格多樣性。建議開發者下載原始碼深入研究其設計模式,將按鈕開發效率提升至新高度。