Zadokowane i przestawne paski narzędzi
Biblioteka klas programu Microsoft Foundation obsługuje zadokowalne paski narzędzi. Zadokowany pasek narzędzi można podłączyć lub zadokować do dowolnej strony okna nadrzędnego lub można go odłączyć lub unosić w własnym mini-ramowym oknie. W tym artykule wyjaśniono, jak używać dokowalnych pasków narzędzi w aplikacjach.
Jeśli używasz Kreatora aplikacji do generowania szkieletu aplikacji, zostanie wyświetlony monit o wybranie, czy chcesz dokować paski narzędzi. Domyślnie Kreator aplikacji generuje kod, który wykonuje trzy akcje niezbędne do umieszczania dokowalnego paska narzędzi w aplikacji:
Włącz zadokowanie w oknie ramowym.
Jeśli brakuje któregokolwiek z tych kroków, aplikacja wyświetli standardowy pasek narzędzi. Ostatnie dwa kroki należy wykonać dla każdego zadokowalnego paska narzędzi w aplikacji.
Inne tematy omówione w tym artykule obejmują:
Przykłady można znaleźć w przykładzie MFC General DOCKTOOL .
Włączanie dokowania w oknie ramowym
Aby zadokować paski narzędzi do okna ramki, należy włączyć okno ramki (lub miejsce docelowe), aby umożliwić dokowanie. Odbywa się to przy użyciu funkcji CFrameWnd::EnableDocking , która przyjmuje jeden parametr DWORD , który jest zestawem bitów stylów wskazujących, która strona okna ramki akceptuje zadokowanie. Jeśli pasek narzędzi ma zostać zadokowany i istnieje wiele stron, do których można zadokować, strony wskazane w parametrze przekazanym do EnableDocking
są używane w następującej kolejności: góra, dolna, lewa, prawa. Jeśli chcesz mieć możliwość zadokowania pasków sterowania w dowolnym miejscu, przekaż CBRS_ALIGN_ANY do EnableDocking
.
Włączanie dokowania dla paska narzędzi
Po przygotowaniu miejsca docelowego do zadokowania należy przygotować pasek narzędzi (lub źródło) w podobny sposób. Wywołaj metodę CControlBar::EnableDocking dla każdego paska narzędzi, który chcesz zadokować, określając strony docelowe, do których ma być dokowany pasek narzędzi. Jeśli żadna ze stron określonych w wywołaniu, aby dopasować CControlBar::EnableDocking
boki włączone do zadokowania w oknie ramowym, pasek narzędzi nie może zadokować — będzie zmiennoprzecinkowy. Gdy zostanie on unoszony, pozostaje przestawnym paskiem narzędzi, nie można zadokować okna ramowego.
Jeśli żądany efekt jest trwale przestawnym paskiem narzędzi, wywołaj EnableDocking
parametr 0. Następnie wywołaj CFrameWnd ::FloatControlBar. Pasek narzędzi pozostaje przestawny, trwale nie może zadokować nigdzie.
Dokowanie paska narzędzi
Struktura wywołuje element CFrameWnd::D ockControlBar , gdy użytkownik próbuje usunąć pasek narzędzi po stronie okna ramki, które umożliwia dokowanie.
Ponadto można wywołać tę funkcję w dowolnym momencie, aby zadokować paski sterowania do okna ramki. Zwykle odbywa się to podczas inicjowania. Więcej niż jeden pasek narzędzi można zadokować do określonej strony okna ramki.
Przestawny pasek narzędzi
Odłączanie dokowalnego paska narzędzi z okna ramki jest nazywane przestawnym paskiem narzędzi. Wywołaj CFrameWnd ::FloatControlBar , aby to zrobić. Określ pasek narzędzi, który ma być zmiennoprzecinkowy, punkt, w którym ma zostać umieszczony, oraz styl wyrównania, który określa, czy przestawny pasek narzędzi jest poziomy, czy pionowy.
Struktura wywołuje tę funkcję, gdy użytkownik przeciąga pasek narzędzi z zadokowanej lokalizacji i usuwa ją w lokalizacji, w której nie włączono dokowania. Może to być dowolne miejsce wewnątrz lub poza oknem ramowym. Podobnie jak w przypadku DockControlBar
metody , można również wywołać tę funkcję podczas inicjowania.
Implementacja MFC pasków narzędzi z możliwością dokowania nie zapewnia niektórych rozszerzonych funkcji dostępnych w niektórych aplikacjach, które obsługują zadokowalne paski narzędzi. Funkcje, takie jak dostosowywalne paski narzędzi, nie są udostępniane.
Dynamicznie zmienia rozmiar paska narzędzi
Od wersji 4.0 programu Visual C++ można umożliwić użytkownikom aplikacji dynamiczne zmienianie rozmiaru przestawnych pasków narzędzi. Zazwyczaj pasek narzędzi ma długi, liniowy kształt wyświetlany w poziomie. Można jednak zmienić orientację paska narzędzi i jego kształt. Na przykład gdy użytkownik zadokuje pasek narzędzi z jedną z pionowych stron okna ramki, kształt zmienia się na układ pionowy. Można również przekształcić pasek narzędzi w prostokąt z wieloma wierszami przycisków.
Masz następujące możliwości:
Określ dynamiczne ustalanie rozmiaru jako charakterystykę paska narzędzi.
Określ stałe ustalanie rozmiaru jako charakterystykę paska narzędzi.
Aby zapewnić tę obsługę, istnieją dwa nowe style paska narzędzi do użycia w wywołaniach funkcji CToolBar::Create elementu członkowskiego. Są to:
CBRS_SIZE_DYNAMIC pasek sterowania jest dynamiczny.
CBRS_SIZE_FIXED pasek sterowania jest stały.
Styl dynamiczny rozmiaru umożliwia użytkownikowi zmianę rozmiaru paska narzędzi, gdy jest on przestawny, ale nie podczas jego zadokowania. Pasek narzędzi "zawija" w razie potrzeby, aby zmienić kształt, gdy użytkownik przeciąga jego krawędzie.
Stały rozmiar zachowuje stany zawijania paska narzędzi, ustawiając położenie przycisków w każdej kolumnie. Użytkownik aplikacji nie może zmienić kształtu paska narzędzi. Pasek narzędzi opakowuje się w wyznaczonych miejscach, takich jak lokalizacje separatorów między przyciskami. Zachowuje ten kształt niezależnie od tego, czy pasek narzędzi jest zadokowany, czy pływający. Efekt jest stałą paletą z wieloma kolumnami przycisków.
Możesz również użyć CToolBar::GetButtonStyle , aby zwrócić stan i styl przycisków na paskach narzędzi. Styl przycisku określa sposób wyświetlania przycisku i sposób reagowania na dane wejściowe użytkownika; stan informuje, czy przycisk jest w stanie opakowanym.
Ustawianie pozycji zawijania dla paska narzędzi w stylu stałym
W przypadku paska narzędzi o stałym rozmiarze należy wyznaczyć indeksy przycisków paska narzędzi, w których pasek narzędzi zostanie zawijany. Poniższy kod pokazuje, jak to zrobić w przesłonięć główne okno OnCreate
ramki:
// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);
// Do the same for other wrap locations ...
// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
// Call docking/floating functions as needed ...
W przykładzie MFC General DOCKTOOL pokazano, jak używać funkcji składowych klas CControlBar i CToolBar do zarządzania dynamicznym układem paska narzędzi. Zobacz plik EDITBAR. CPP w docktool.