在 VC 6.0 環境下打造 XP 風格按鈕(圓角、藍邊、懸停變色),最快捷的途徑是直接使用開源的 CButtonST 及其衍生類 CWinXPButtonST。本文以對話框專案為例,示範完整整合步驟。

XPDlg,全選預設值。BtnST.h/.cpp、WinXPButtonST.h/.cpp 至專案目錄,加入專案(FileView)。ClassView 將出現兩個類別。CAboutDlg 類別中:#include "WinXPButtonSt.h"CWinXPButtonST m_OK;CAboutDlg 添加 WM_CTLCOLOR 與 WM_INITDIALOG 處理函數(注意是 CAboutDlg,非主對話框)。OnInitDialog 初始化按鈕:m_OK.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_OK.SetBkColor(RGB(162, 189, 252));
m_OK.SetRounded(TRUE); // 啟用圓角
m_OK.SetTooltipText(_T("關閉"));OnCtlColor 統一對話框背景色(避免圓角殘角):HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
COLORREF bg = RGB(160, 180, 220); // 與按鈕背景一致
switch (nCtlColor)
{
case CTLCOLOR_DLG:
case CTLCOLOR_STATIC:
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(bg);
return CreateSolidBrush(bg);
// 其他控制項類型同理...
}
return hbr;
}DoDataExchange 綁定:DDX_Control(pDX, IDOK, m_OK);IDC_BUTTON1,雙擊生成處理函數彈出 About 對話框:CAboutDlg dlg; dlg.DoModal();CWinXPButtonST 圓角為繪製效果,非真實視窗區域裁切。若父視窗有背景色,必須 讓按鈕背景色與父視窗一致(如步驟 6),否則四角會露出矩形底色。站在巨人肩膀上,VC 6.0 也能輕鬆擁有現代化按鈕外觀。若專案需深度客製化,可繼承 CButtonST 自行繼續開發。