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

打造動態真彩工具欄:基於 CReBar 與圖標熱態/冷態切換

     編輯:關於VC++

效果演示

動態真彩工具欄演示

實現要點

  • 使用 CReBar 容器承載工具欄,支持背景位圖與帶狀佈局。
  • 工具欄創建時指定 TBSTYLE_FLAT | TBSTYLE_TRANSPARENT 實現扁平透明風格。
  • 分別設置熱態圖標(鼠標懸停時顯示,22x22)與冷態圖標(正常狀態,19x19),均使用 CImageList 加載圖標資源。
  • 手動設置按鈕寬度、文字、命令 ID 及消息映射。

核心代碼片段


BOOL CMainFrame::CreateExToolBar()
{
    if (!m_wndReBar.Create(this)) return FALSE;
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC))
        return FALSE;

    m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40, 80);

    // 熱態圖標 (22x22)
    CImageList imgHot;
    imgHot.Create(22, 22, ILC_COLOR8|ILC_MASK, 2, 2);
    imgHot.SetBkColor(::GetSysColor(COLOR_BTNFACE));
    imgHot.Add(AfxGetApp()->LoadIcon(IDI_ICON_MSG_GETBUTTON)); // 0 收信
    // ... 添加其它圖標
    m_wndToolBar.GetToolBarCtrl().SetHotImageList(&imgHot);
    imgHot.Detach();

    // 冷態圖標 (19x19)
    CImageList imgCold;
    imgCold.Create(19, 19, ILC_COLOR8|ILC_MASK, 2, 2);
    imgCold.SetBkColor(::GetSysColor(COLOR_BTNFACE));
    imgCold.Add(AfxGetApp()->LoadIcon(IDI_ICON_MSG_GETBUTTON));
    // ...
    m_wndToolBar.GetToolBarCtrl().SetImageList(&imgCold);
    imgCold.Detach();

    m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT|CBRS_TOOLTIPS|TBSTYLE_TRANSPARENT|TBBS_CHECKBOX);
    m_wndToolBar.SetButtons(NULL, 21);
    m_wndToolBar.SetButtonInfo(0, IDC_WRITEMSG, TBSTYLE_BUTTON, 1);
    m_wndToolBar.SetButtonText(0, _T("寫信"));
    // ... 其它按鈕

    CRect rc; m_wndToolBar.GetItemRect(0, &rc);
    m_wndToolBar.SetSizes(rc.Size(), CSize(20,20));

    m_wndReBar.AddBar(&m_wndToolBar);

    REBARBANDINFO rbbi = { sizeof(rbbi) };
    rbbi.fMask = RBBIM_CHILDSIZE|RBBIM_IDEALSIZE|RBBIM_SIZE|RBBIM_BACKGROUND;
    rbbi.cxMinChild = rc.Width(); rbbi.cyMinChild = rc.Height();
    rbbi.hbmBack = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_TOOLBARBKMAP));
    rbbi.cx = rbbi.cxIdeal = rc.Width() * 10;
    m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);

    return TRUE;
}

使用說明

  1. 在 CMainFrame 添加 CReBar m_wndReBar 成員。
  2. OnCreate 中調用 CreateExToolBar(),並刪除原有工具欄創建代碼。
  3. 每個按鈕的 ID、圖標、文字、消息處理需手動添加(ClassWizard 不支持自動生成)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved