Udostępnij za pośrednictwem


Używanie przycisków listy rozwijanej w formancie paska narzędzi

Oprócz standardowych przycisków wypychania pasek narzędzi może również mieć przyciski listy rozwijanej. Przycisk listy rozwijanej jest zwykle wskazywany przez obecność dołączonej strzałki w dół.

Uwaga

Dołączona strzałka w dół będzie wyświetlana tylko wtedy, gdy ustawiono styl rozszerzony TBSTYLE_EX_DRAWDDARROWS.

Gdy użytkownik kliknie tę strzałkę (lub sam przycisk, jeśli nie ma strzałki), komunikat powiadomienia TBN_DROPDOWN jest wysyłany do elementu nadrzędnego kontrolki paska narzędzi. Następnie możesz obsłużyć to powiadomienie i wyświetlić menu podręczne; podobnie jak w przypadku zachowania programu Internet Explorer.

Poniższa procedura ilustruje sposób implementowania przycisku paska narzędzi listy rozwijanej z wyskakującym menu:

Aby zaimplementować przycisk listy rozwijanej

  1. Po utworzeniu CToolBarCtrl obiektu ustaw styl TBSTYLE_EX_DRAWDDARROWS przy użyciu następującego kodu:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Ustaw styl TBSTYLE_DROPDOWN dla dowolnych nowych przycisków (InsertButton lub AddButtons) lub istniejących przycisków (SetButtonInfo), które będą przyciski listy rozwijanej. W poniższym przykładzie pokazano modyfikowanie istniejącego CToolBarCtrl przycisku w obiekcie:

    TBBUTTONINFO tbi;
    
    tbi.dwMask = TBIF_STYLE;
    tbi.cbSize = sizeof(TBBUTTONINFO);
    m_ToolBarCtrl.GetButtonInfo(0, &tbi);
    tbi.fsStyle |= TBSTYLE_DROPDOWN;
    m_ToolBarCtrl.SetButtonInfo(0, &tbi);
    
  3. Dodaj program obsługi TBN_DROPDOWN do klasy nadrzędnej obiektu paska narzędzi.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. W nowej procedurze obsługi wyświetl odpowiednie menu podręczne. Poniższy kod przedstawia jedną metodę:

    void CMyDialog::OnTbnDropDownToolBar1(NMHDR *pNMHDR, LRESULT *pResult)
    {
       LPNMTOOLBAR pToolBar = reinterpret_cast<LPNMTOOLBAR>(pNMHDR);
       ClientToScreen(&(pToolBar->rcButton)); // TrackPopupMenu uses screen coords
    
       CMenu menu;
       VERIFY(menu.LoadMenu(IDR_MENU1));
       CMenu *pPopup = menu.GetSubMenu(0);
       if (NULL != pPopup)
       {
          pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
                                 pToolBar->rcButton.left, pToolBar->rcButton.bottom, this);
       }
    
       *pResult = 0;
    }
    

Zobacz też

Korzystanie z CToolBarCtrl
Kontrolki