Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Oprócz standardowych przycisków przesuń, pasek narzędzi może również mieć przyciski rozwijane. Przycisk listy rozwijanej jest zwykle wskazywany przez obecność dołączonej strzałki w dół.
Uwaga / Notatka
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 zachowuje się Internet Explorer.
Poniższa procedura ilustruje sposób na implementację przycisku listy rozwijanej na pasku narzędzi z wyskakującym menu.
Aby zaimplementować przycisk listy rozwijanej
Po utworzeniu obiektu
CToolBarCtrl, ustaw styl TBSTYLE_EX_DRAWDDARROWS, korzystając z następującego kodu:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);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
CToolBarCtrlprzycisku 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);Dodaj procedurę obsługi TBN_DROPDOWN do klasy nadrzędnej obiektu paska narzędzi.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)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; }