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

工具列下拉箭頭按鈕實現:TBSTYLE_DROPDOWN 與 TBN_DROPDOWN 完整教學

     編輯:關於VC++

IE 工具列的「後退/前進」按鈕帶下拉箭頭,點擊彈出歷史清單。本文完整教學如何在 MFC 實現此功能:啟用擴充樣式、設定按鈕下拉樣式、處理 TBN_DROPDOWN 通知彈出選單。

實作四步驟

1. 啟用工具列擴充樣式

// MainFrm.cpp OnCreate 末尾
DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS;
m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);

2. 設定特定按鈕為下拉樣式

DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
dwStyle |= TBSTYLE_DROPDOWN;
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);

3. 加入 TBN_DROPDOWN 通知處理

// MainFrm.h
afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);

// MainFrm.cpp 訊息對應
ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)

// 實作
void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT* plr) {
    CWnd* pWnd; UINT nID;
    
    switch (pnmtb->iItem) {
        case ID_FILE_OPEN:
            pWnd = &m_wndToolBar; nID = IDR_MENU1; break;
        default: return;
    }
    
    CMenu menu; menu.LoadMenu(nID);
    CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup);
    
    CRect rc;
    pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
    pWnd->ClientToScreen(&rc);
    
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
                           rc.left, rc.bottom, this, &rc);
}

4. 準備選單資源

  • 新增選單資源 IDR_MENU1,包含三項:
  • ID_FILE_MRU_FILE1 (最近檔案)、ID_APP_ABOUT (關於)、ID_VCKBASE_HOME (首頁)
  • ID_VCKBASE_HOME 在視圖類別處理:ShellExecute(NULL, "open", "https://www.vckbase.com", NULL, NULL, SW_SHOWNORMAL);

關鍵技術解析

API/常數用途
TBSTYLE_EX_DRAWDDARROWS擴充樣式:啟用下拉箭頭繪製
TBSTYLE_DROPDOWN按鈕樣式:標記該按鈕有下拉功能
TBN_DROPDOWN通知碼:使用者點擊下拉箭頭時送出
TB_GETRECT訊息:取得按鈕矩形(用於定位彈出選單)
TrackPopupMenuAPI:在指定螢幕座標顯示彈出選單

注意事項

  • 範例將下拉選單掛在「開啟檔案」按鈕上僅為示範,實際 UI 設計應符合使用者預期(如後退/前進、檢視選項等)
  • 下拉按鈕不應執行預設命令,僅彈出選單
  • 選單寬度由文字長度決定,可用空格佔位調整
  • 若需選單項顯示圖示,需建立對應 ID 的工具列資源並呼叫 SetMenu(IDR_MENU, hWnd, TRUE, IDR_TOOLBAR)

總結

啟用 TBSTYLE_EX_DRAWDDARROWS + 設定 TBSTYLE_DROPDOWN + 處理 TBN_DROPDOWN 三步驟完整實現下拉箭頭按鈕。技術成熟穩定,符合 Windows UI 規範,適合需求工具列下拉選單功能的專案直接採用。

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