TN031: paski sterowania

Uwaga

Następująca uwaga techniczna nie została zaktualizowana, ponieważ została po raz pierwszy uwzględniona w dokumentacji online. W związku z tym niektóre procedury i tematy mogą być nieaktualne lub nieprawidłowe. Aby uzyskać najnowsze informacje, zaleca się wyszukanie interesującego tematu w indeksie dokumentacji online.

W tej notatce opisano klasy paska kontrolek w MFC: ogólne CControlBar, CStatusBar, CToolBar, CDialogBar i CDockBar.

Ccontrolbar

A ControlBar jest klasą pochodną CWnd, która:

  • Jest wyrównany do górnej lub dolnej części okna ramki.

  • Może zawierać elementy podrzędne, które są kontrolkami opartymi na HWND (na przykład CDialogBar) lub elementami nieHWND opartymi (na przykład CToolBar, CStatusBar).

Paski kontrolek obsługują dodatkowe style:

  • CBRS_TOP (wartość domyślna) przypnij pasek sterowania do góry.

  • CBRS_BOTTOM Przypnij pasek sterowania do dołu.

  • CBRS_NOALIGN Nie zmieniaj położenia paska sterowania po zmianie rozmiaru elementu nadrzędnego.

Klasy pochodzące z CControlBar klasy zapewniają bardziej interesujące implementacje:

  • CStatusBar Pasek stanu, elementy to okienka paska stanu zawierające tekst.

  • CToolBar Pasek narzędzi, elementy są przyciskami mapy bitowej wyrównanymi w wierszu.

  • CDialogBar Ramka przypominająca pasek narzędzi zawierający standardowe kontrolki okien (utworzone na podstawie zasobu szablonu okna dialogowego).

  • CDockBar Uogólniony obszar dokowania dla innych CControlBar obiektów pochodnych. Określone funkcje składowe i zmienne dostępne w tej klasie mogą ulec zmianie w przyszłych wersjach.

Wszystkie obiekty paska sterowania/okna będą oknami podrzędnymi niektórych okien ramowych nadrzędnych. Są one zwykle dodawane jako element równorzędny do obszaru klienta ramki (na przykład klienta MDI lub widoku). Identyfikator okna podrzędnego paska sterowania jest ważny. Domyślny układ paska sterowania działa tylko dla pasków kontrolek z identyfikatorami w zakresie AFX_IDW_CONTROLBAR_FIRST do AFX_IDW_CONTROLBAR_LAST. Należy pamiętać, że mimo że istnieje zakres 256 identyfikatorów pasków sterowania, pierwsze 32 z tych identyfikatorów paska sterowania są specjalne, ponieważ są one bezpośrednio obsługiwane przez architekturę podglądu wydruku.

Klasa CControlBar zapewnia standardową implementację dla:

  • Wyrównanie paska sterującego do górnej, dolnej lub obu stron ramki.

  • Przydzielanie tablic elementów sterowania.

  • Obsługa implementacji klas pochodnych.

Obiekty paska sterowania języka C++ są zwykle osadzone jako elementy członkowskie klasy pochodnej CFrameWnd i zostaną wyczyszczone, gdy obiekt nadrzędny HWND i obiekt zostaną zniszczone. Jeśli musisz przydzielić obiekt paska sterowania na stercie, możesz po prostu ustawić element członkowski m_bAutoDestruct na wartość TRUE , aby ustawić wywołanie paska delete this; sterowania podczas HWND niszczenia.

Uwaga

Jeśli tworzysz własną CControlBarklasę pochodną, zamiast używać jednej z klas pochodnych MFC, takich jak CStatusBar, CToolBarlub CDialogBar, należy ustawić składową danych m_dwStyle . Można to zrobić w zastąpieniu elementu Create:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
    DWORD dwStyle,
    UINT nID)
{
    m_dwStyle = dwStyle;

.
.
.
}

Algorytm układu paska sterowania

Algorytm układu paska sterowania jest bardzo prosty. Okno ramki wysyła komunikat WM_SIZEPARENT do wszystkich elementów podrzędnych w zakresie paska sterowania. Wraz z tym komunikatem jest przekazywany wskaźnik do prostokąta klienta nadrzędnego. Ta wiadomość jest wysyłana do elementów podrzędnych w kolejności Z. Elementy podrzędne paska kontrolnego używają tych informacji do pozycjonowania siebie i zmniejszenia rozmiaru obszaru klienta elementu nadrzędnego. Ostatni prostokąt pozostawiony dla normalnego obszaru klienta (mniej pasków sterowania) służy do umieszczania głównego okna klienta (zazwyczaj klienta MDI, widoku lub okna podziału).

Zobacz CWnd::RepositionBars i CFrameWnd::RecalcLayout , aby uzyskać więcej informacji.

Prywatne komunikaty systemu Windows MFC, w tym WM_SIZEPARENT, są udokumentowane w notatce technicznej 24.

Cstatusbar

Pasek stanu to pasek sterowania zawierający wiersz okienek wyjściowych tekstu. Istnieją dwa typowe sposoby korzystania z okienek wyjściowych tekstu:

  • Jako wiersz komunikatu

    (na przykład standardowy wiersz komunikatu pomocy menu). Są one zwykle dostępne przez indeksowany na podstawie 0

  • Jako wskaźniki stanu

    (na przykład wskaźniki CAP, NUM i SCRL). Są one zwykle dostępne za pomocą ciągu/identyfikatora polecenia.

Czcionka paska stanu to 10-punktowa ms Sans Serif (dyktowana przez Przewodnik projektowania aplikacji interfejsu systemu Windows lub mapery czcionek najlepiej pasujące do 10-punktowej czcionki proporcjonalnej szwajcarskiej). W niektórych wersjach systemu Windows, takich jak wersja japońska, wybrane czcionki są różne.

Kolory używane na pasku stanu są również zgodne z zaleceniem przewodnika projektowania aplikacji interfejsu systemu Windows. Te kolory nie są zakodowane i są zmieniane dynamicznie w odpowiedzi na dostosowywanie użytkownika w Panel sterowania.

Produkt Wartość KOLORU systemu Windows Domyślny rgb
Tło paska stanu COLOR_BTNFACE RGB(192, 192, 192)
Tekst paska stanu COLOR_BTNTEXT RGB(000, 000, 000)
Pasek stanu górnej/lewej krawędzi COLOR_BTNHIGHLIGHT RGB(255, 255, 255)
Bot paska stanu/prawe krawędzie COLOR_BTNSHADOW RGB(128, 128, 128)

Obsługa CCmdUI dla CStatusBar

Sposób, w jaki wskaźniki są zwykle aktualizowane, odbywa się za pomocą mechanizmu ON_UPDATE_COMMAND_UI. W czasie bezczynności pasek stanu wywoła program obsługi ON_UPDATE_COMMAND_UI z identyfikatorem ciągu okienka wskaźnika.

Program obsługi ON_UPDATE_COMMAND_UI może wywołać następujące wywołanie:

  • Enable: Aby włączyć lub wyłączyć okienko. Wyłączone okienko wygląda dokładnie tak, jak w przypadku włączonego okienka, ale tekst jest niewidoczny (czyli wyłącza wskaźnik tekstu).

  • SetText: Aby zmienić tekst. Zachowaj ostrożność, jeśli używasz tego polecenia, ponieważ okienko nie zmieni rozmiaru automatycznie.

Aby uzyskać szczegółowe informacje na temat CStatusBar tworzenia i dostosowywania interfejsów API, zapoznaj się z klasą CStatusBar w dokumentacji biblioteki klas. Większość dostosowań pasków stanu należy wykonać przed początkowym uwidocznieniu paska stanu.

Pasek stanu obsługuje tylko jedno okienko rozproszone, zazwyczaj pierwsze okienko. Rozmiar tego okienka jest naprawdę minimalnym rozmiarem. Jeśli pasek stanu jest większy niż minimalny rozmiar wszystkich okienek, każda dodatkowa szerokość zostanie nadana okienku rozciągniętemu. Domyślna aplikacja z paskiem stanu ma wskaźniki wyrównane do prawej dla cap, NUM i SCRL, ponieważ pierwsze okienko jest rozproszone.

Ctoolbar

Pasek narzędzi to pasek sterowania z wierszem przycisków mapy bitowej, które mogą zawierać separatory. Obsługiwane są dwa style przycisków: przyciski naciśnięcia i pola wyboru. Funkcje grup radiowych można tworzyć za pomocą przycisków pól wyboru i ON_UPDATE_COMMAND_UI.

Wszystkie przyciski mapy bitowej na pasku narzędzi są pobierane z jednej mapy bitowej. Ta mapa bitowa musi zawierać jeden obraz lub glyph dla każdego przycisku. Zazwyczaj kolejność obrazów/glyphs w mapie bitowej jest taka sama, jak narysowana na ekranie. (Można to zmienić przy użyciu interfejsów API dostosowywania).

Każdy przycisk musi mieć ten sam rozmiar. Wartość domyślna to standardowa 24x22 pikseli. Każdy obraz/glyph musi mieć taki sam rozmiar i musi być obok siebie w mapie bitowej. Domyślny rozmiar obrazu/glyph to 16x15 pikseli. W związku z tym w przypadku paska narzędzi z 10 przyciskami (przy użyciu standardowych rozmiarów) potrzebna jest mapa bitowa o szerokości 160 pikseli i 15 pikseli.

Każdy przycisk ma jeden i tylko jeden obraz/glyph. Różne stany i style przycisków (na przykład naciśnięcie, w górę, w dół, wyłączone, wyłączone, nieokreślony) są generowane algorytmicznie na podstawie tego obrazu/glyph. Dowolna mapa bitowa koloru lub DIB może być używana teoretycznie. Algorytm generowania różnych stanów przycisku działa najlepiej, jeśli oryginalny obraz jest odcieniami szarości. Zapoznaj się ze standardowymi przyciskami paska narzędzi i clipartem przycisku paska narzędzi udostępnionym w przykładzie CLIPART w MFC General, aby zapoznać się z przykładami.

Kolory używane na pasku narzędzi są również zgodne z zaleceniem przewodnika projektowania aplikacji interfejsu systemu Windows. Te kolory nie są zakodowane i są zmieniane dynamicznie w odpowiedzi na dostosowywanie użytkownika w Panel sterowania.

Produkt Wartość KOLORU systemu Windows Domyślny rgb
Tło paska narzędzi COLOR_BTNFACE RGB(192,192,192)
Przyciski Paska narzędzi u góry/lewej krawędzi COLOR_BTNHIGHLIGHT RGB(255,255,255)
Przyciski ToolBar bot/prawe krawędzie COLOR_BTNSHADOW RGB(128,128,128)

Ponadto przyciski mapy bitowej paska narzędzi są ponownie kolorowane tak, jakby były standardowymi kontrolkami przycisków systemu Windows. To ponowne kolorowanie występuje, gdy mapa bitowa jest ładowana z zasobu i w odpowiedzi na zmianę kolorów systemowych w odpowiedzi na dostosowanie użytkownika w Panel sterowania. Następujące kolory w mapie bitowej paska narzędzi zostaną automatycznie ponownie kolorowane, aby były używane z ostrożnością. Jeśli nie chcesz, aby część mapy bitowej została ponownie kolorowana, użyj koloru zbliżonego do jednej z mapowanych wartości RGB. Mapowanie odbywa się na podstawie dokładnych wartości RGB.

Wartość RGB Wartość kolorowa mapowana dynamicznie
RGB(000, 000, 000) COLOR_BTNTEXT
RGB(128, 128, 128) COLOR_BTNSHADOW
RGB(192, 192, 192) COLOR_BTNFACE
RGB(255, 255, 255) COLOR_BTNHIGHLIGHT

Aby uzyskać szczegółowe informacje na temat CToolBar tworzenia i dostosowywania interfejsów API, zapoznaj się z dokumentacją biblioteki klas CToolBar. Większość dostosowań pasków narzędzi należy wykonać przed początkowym uwidocznieniem paska narzędzi.

Interfejsy API dostosowywania mogą służyć do dostosowywania identyfikatorów przycisków, stylów, szerokości odstępu i tego, który obraz/glyph jest używany dla tego przycisku. Domyślnie nie trzeba używać tych interfejsów API.

Obsługa narzędzia CCmdUI dla narzędzia CToolBar

Sposób, w jaki przyciski paska narzędzi są zawsze aktualizowane, odbywa się za pomocą mechanizmu ON_UPDATE_COMMAND_UI. W czasie bezczynności pasek narzędzi wywoła program obsługi ON_UPDATE_COMMAND_UI z identyfikatorem polecenia tego przycisku. ON_UPDATE_COMMAND_UI nie jest wywoływana dla separatorów, ale jest wywoływana dla przycisków push i przycisków pól wyboru.

Program obsługi ON_UPDATE_COMMAND_UI może wywołać następujące wywołanie:

  • Enable: Aby włączyć lub wyłączyć przycisk. Działa to równie w przypadku przycisków pushbutton i przycisków pól wyboru.

  • SetCheck: Aby ustawić stan sprawdzania przycisku. Wywołanie tego przycisku paska narzędzi spowoduje przekształcenie go w przycisk pola wyboru. SetCheck przyjmuje parametr, który może być 0 (nie zaznaczony), 1 (zaznaczone) lub 2 (nieokreślony)

  • SetRadio: Skrót dla elementu SetCheck.

Przyciski pól wyboru to przyciski pola wyboru "AUTO"; oznacza to, że gdy użytkownik naciśnie je, natychmiast zmieni stan. Sprawdzany jest stan w dół lub przygnębiony. Nie ma wbudowanego sposobu interfejsu użytkownika, aby zmienić przycisk na stan "nieokreślony"; należy to zrobić za pomocą kodu.

Interfejsy API dostosowywania umożliwiają zmianę stanu danego przycisku paska narzędzi, najlepiej zmienić te stany w programie obsługi ON_UPDATE_COMMAND_UI dla polecenia, które reprezentuje przycisk paska narzędzi. Pamiętaj, że przetwarzanie bezczynności spowoduje zmianę stanu przycisków paska narzędzi za pomocą programu obsługi ON_UPDATE_COMMAND_UI, więc wszelkie zmiany w tych stanach wprowadzone za pomocą metody SetButtonStyle mogą zostać utracone po następnym bezczynności.

Przyciski paska narzędzi będą wysyłać WM_COMMAND wiadomości, takie jak zwykłe przyciski lub elementy menu, i są zwykle obsługiwane przez program obsługi ON_COMMAND w tej samej klasie, która udostępnia program obsługi ON_UPDATE_COMMAND_UI.

Istnieją cztery style przycisków paska narzędzi (TBBS_ wartości) używane dla stanów wyświetlania:

  • TBBS_CHECKED: pole wyboru jest obecnie zaznaczone (w dół).

  • TBBS_INDETERMINATE: Pole wyboru jest obecnie nieokreślone.

  • TBBS_DISABLED: przycisk jest obecnie wyłączony.

  • TBBS_PRESSED: przycisk jest obecnie naciśnięty.

Sześć oficjalnych stylów przycisku Przewodnik projektowania aplikacji interfejsu systemu Windows jest reprezentowanych przez następujące wartości TBBS:

  • Up = 0

  • Mysz w dół = TBBS_PRESSED (| dowolny inny styl)

  • Wyłączone = TBBS_DISABLED

  • W dół = TBBS_CHECKED

  • Wyłączone = TBBS_CHECKED | TBBS_DISABLED

  • Nieokreślony = TBBS_INDETERMINATE

Cdialogbar

Pasek okna dialogowego to pasek sterowania zawierający standardowe kontrolki systemu Windows. Działa jak okno dialogowe, w którym zawiera kontrolki i obsługuje tabulacji między nimi. Działa również jak okno dialogowe, w ramach którego używa szablonu okna dialogowego do reprezentowania paska.

Element A CDialogBar jest używany na pasku narzędzi podglądu wydruku, który zawiera standardowe kontrolki pushbutton.

Używanie elementu CDialogBar jest podobne do używania elementu CFormView. Musisz zdefiniować szablon okna dialogowego dla paska dialogowego i usunąć wszystkie style z wyjątkiem WS_CHILD. Należy pamiętać, że okno dialogowe nie może być widoczne.

Powiadomienia sterujące dla CDialogBar elementu zostaną wysłane do elementu nadrzędnego paska sterowania (podobnie jak przyciski paska narzędzi).

Obsługa narzędzia CCmdUI dla narzędzia CDialogBar

Przyciski paska okna dialogowego powinny być aktualizowane za pomocą mechanizmu obsługi ON_UPDATE_COMMAND_UI. W czasie bezczynności pasek okna dialogowego wywoła program obsługi ON_UPDATE_COMMAND_UI z identyfikatorem polecenia wszystkich przycisków o identyfikatorze >= 0x8000 (czyli w zakresie identyfikatorów poleceń).

Program obsługi ON_UPDATE_COMMAND_UI może wywołać następujące wywołanie:

  • Włącz: aby włączyć lub wyłączyć przycisk.

  • SetText: aby zmienić tekst przycisku.

Dostosowywanie można wykonać za pomocą standardowych interfejsów API menedżera okien.

Zobacz też

Uwagi techniczne według numerów
Uwagi techniczne według kategorii