首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC 6.0 實現 XP 風格按鈕:基於 CButtonST 與 CWinXPButtonST

     編輯:關於VC++

前言

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

XP 風格按鈕運行效果

步驟詳解

  1. 建立基於對話框的專案 XPDlg,全選預設值。
  2. 複製 BtnST.h/.cpp、WinXPButtonST.h/.cpp 至專案目錄,加入專案(FileView)。ClassView 將出現兩個類別。
  3. 在 CAboutDlg 類別中:
    #include "WinXPButtonSt.h"
    CWinXPButtonST m_OK;
  4. 用 ClassWizard 為 CAboutDlg 添加 WM_CTLCOLOR 與 WM_INITDIALOG 處理函數(注意是 CAboutDlg,非主對話框)。
  5. 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("關閉"));
  6. 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;
    }
  7. DoDataExchange 綁定:
    DDX_Control(pDX, IDOK, m_OK);
  8. 主對話框放一按鈕 IDC_BUTTON1,雙擊生成處理函數彈出 About 對話框:
    CAboutDlg dlg; dlg.DoModal();
  9. 編譯運行(Ctrl+F7),即見 XP 風格按鈕。

注意事項

  • CWinXPButtonST 圓角為繪製效果,非真實視窗區域裁切。若父視窗有背景色,必須 讓按鈕背景色與父視窗一致(如步驟 6),否則四角會露出矩形底色。
  • 該類別授權條款:免費用於非商業用途,商業用途需支付作者 5 美元。
  • 類別還提供更多功能(圖示、位圖、工具提示等),請參考原始碼說明使用。

結語

站在巨人肩膀上,VC 6.0 也能輕鬆擁有現代化按鈕外觀。若專案需深度客製化,可繼承 CButtonST 自行繼續開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved