CButtonST (作者 Davide Calabro) 是公認最強大、功能最全的 CButton 派生類,支援圖示+文字、扁平/立體風格、滑鼠進入熱態圖示切換、多狀態顏色控制、圖示文字對齊、不規則形狀、甚至滑鼠經過播放聲音。本文整理其核心功能與使用範例,作為快速查閱手冊。
BtnST.h, BtnST.cpp, BCMenu.h, BCMenu.cpp (v3.5+ 支援選單)。StdAfx.h 加入 #include "BtnST.h"。CButtonST m_btn;| 效果 | 核心代碼 (於 OnInitDialog) | 關鍵點 |
|---|---|---|
| 1. 圖示+文字同時顯示 |
m_btn.SubclassDlgItem(IDC_BUTTON1, this); m_btn.SetIcon(IDI_ICON1); m_btn.SetFlat(FALSE); // 立體風格 | 按鈕尺寸需配合圖示大小調整 |
| 2. 扁平風格按鈕 |
m_btn.SubclassDlgItem(IDC_BUTTON1, this); m_btn.SetIcon(IDI_ICON1); // 不呼叫 SetFlat(FALSE) 即為預設扁平 | 扁平為預設風格,視覺更現代 |
| 3. 滑鼠進入切換圖示 (熱態) |
m_btn.SubclassDlgItem(IDC_BUTTON1, this); m_btn.SetIcon(IDI_ICON_HOT, IDI_ICON_NORMAL); // 參數:進入時、離開時 | IDI_ICON_HOT 為滑鼠懸停顯示圖示 |
| 4. 多狀態自訂顏色 |
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_IN, RGB(208,208,208)); // 滑鼠進入背景 m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); // 按下時亮度偏移 | 顏色索引: BK_IN/FG_IN (進入) BK_OUT/FG_OUT (一般) BK_FOCUS/FG_FOCUS (按下/焦點) |
| 5. 圖示文字位置對齊 |
m_btn.SubclassDlgItem(IDC_BUTTON1, this); m_btn.SetIcon(IDI_ICON1); m_btn.SetAlign(CButtonST::ST_ALIGN_VERT); // 圖示上、文字下 | 對齊模式: ST_ALIGN_HORIZ (圖左文右) ST_ALIGN_VERT (圖上文下) ST_ALIGN_HORIZ_RIGHT (圖右文左) ST_ALIGN_OVERLAP (重疊) |
| 6. 依圖示形狀裁剪按鈕 (不規則按鈕) |
m_btn.SubclassDlgItem(IDC_BUTTON1, this); m_btn.SetIcon(IDI_ICON1); m_btn.DrawBorder(FALSE); // 隱藏邊框 m_btn.SetColor(BTNST_COLOR_BK_OUT, RGB(208,208,208)); m_btn.SetColor(BTNST_COLOR_BK_IN, RGB(208,208,208)); m_btn.SetColor(BTNST_COLOR_BK_FOCUS, RGB(208,208,208)); // 重要:按鈕屬性移除文字,尺寸配合圖示 | 背景色需與父視窗一致,視覺上呈現圖示形狀 |
BTNST_USE_BCMENU 並包含 BCMenu.h,可為按鈕附加下拉選單。BTNST_USE_SOUND,使用 SetSound 設定滑鼠經過播放 WAV 資源。// 指標成員
CButtonST* m_pBtn = new CButtonST;
m_pBtn->Create(_T("確定"), WS_CHILD|WS_VISIBLE|WS_TABSTOP, CRect(10,10,100,40), this, IDOK);
m_pBtn->SetFont(GetFont());
// 記得在視窗銷毀時 delete m_pBtn 避免記憶體洩漏
作者 Davide Calabro (davide_calabro@yahoo.com, https://www.softechsoftware.it) 註明:非商業用途免費,商業用途需支付 $5 授權費。專案若用於商業產品,請務必聯繫作者購買授權。