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ładCToolBar
,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 innychCControlBar
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ą CControlBar
klasę pochodną, zamiast używać jednej z klas pochodnych MFC, takich jak CStatusBar
, CToolBar
lub 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 elementuSetCheck
.
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