Udostępnij przez


TN031: paski sterujące

Uwaga / Notatka

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 nie opartymi na HWND (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 pochodne z CControlBar zapewniają bardziej interesujące implementacje.

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

  • CToolBar Pasek narzędzi składa się z przycisków bitmapowych wyrównanych w rzędzie.

  • 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 pewnego nadrzędnego okna ramki. 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 jednej ze 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 pasek sterowania wywołał delete this; w momencie, gdy zostanie HWND zniszczony.

Uwaga / Notatka

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 ramowe wysyła komunikat WM_SIZEPARENT do wszystkich elementów podrzędnych w zakresie paska kontrolnego. Wraz z tym komunikatem jest przekazywany wskaźnik do prostokąta klienta nadrzędnego. Ta wiadomość jest wysyłana do dzieci (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 za pomocą indeksowania od 0.

  • Jako wskaźniki stanu

    (na przykład wskaźniki CAP, NUM i SCRL). Są one zwykle uzyskiwane przy użyciu ciągu znaków lub identyfikatora polecenia.

Czcionka paska stanu to 10-punktowa MS Sans Serif (zgodnie z Przewodnikiem projektowania interfejsu aplikacji systemu Windows lub najlepszym dopasowaniem maperów czcionek do 10-punktowej szwajcarskiej czcionki proporcjonalnej). 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 na twardo i są zmieniane dynamicznie w odpowiedzi na dostosowywanie użytkownika w Panelu sterowania.

Przedmiot Wartość KOLORU systemu Windows Domyślny rgb
Tło paska stanu Kolor przycisku (COLOR_BTNFACE) RGB(192, 192, 192)
Tekst paska stanu TEKST_PRZYCISKU_KOLOR RGB(000, 000, 000)
Krawędzie górna/lewa paska stanu 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. Podczas bezczynności pasek stanu wywoła program obsługi ON_UPDATE_COMMAND_UI z identyfikatorem ciągu tekstowego okienka wskaźnika.

Program obsługi ON_UPDATE_COMMAND_UI może wywołać:

  • 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 tworzenia i dostosowywania interfejsów API, zapoznaj się z klasą CStatusBar w CStatusBar. Większość dostosowań pasków stanu należy wykonać przed początkowym uwidocznieniu paska stanu.

Pasek stanu obsługuje tylko jedno rozszerzalne okienko, 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 wyjustowane do prawej dla CAP, NUM i SCRL, ponieważ pierwsze okienko jest rozciągliwe.

CToolBar

Pasek narzędzi to pasek z przyciskami bitmapowymi, 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. Dlatego w przypadku paska narzędzi z 10 przyciskami (przy użyciu standardowych rozmiarów) potrzebna jest mapa bitowa o szerokości 160 pikseli i wysokości 15 pikseli.

Każdy przycisk ma jeden i tylko jeden obraz/glyph. Różne stany i style przycisków (na przykład naciśnięty, podniesiony, w dół, wyłączony, wyłączony w dół, niezdecydowany) są generowane algorytmicznie na podstawie tego obrazu/glifu. 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 na twardo i są zmieniane dynamicznie w odpowiedzi na dostosowywanie użytkownika w Panelu sterowania.

Przedmiot Wartość KOLORU systemu Windows Domyślny rgb
Tło paska narzędzi Kolor przycisku (COLOR_BTNFACE) RGB(192,192,192)
Przyciski paska narzędzi - górne/lewe krawędzie COLOR_BTNHIGHLIGHT RGB(255,255,255)
Dolne/prawe krawędzie przycisków paska narzędzi 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 Panelu sterowania. Następujące kolory w mapie bitowej paska narzędzi będą automatycznie zmieniane, dlatego powinny być 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) TEKST_PRZYCISKU_KOLOR
RGB(128, 128, 128) COLOR_BTNSHADOW
RGB(192, 192, 192) Kolor przycisku (COLOR_BTNFACE)
RGB(255, 255, 255) COLOR_BTNHIGHLIGHT (Podkreślenie przycisku)

Aby uzyskać szczegółowe informacje na temat tworzenia i dostosowywania interfejsów API, zapoznaj się z dokumentacją biblioteki klasCToolBar. 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ępów oraz określenia, który obrazek lub symbol jest używany dla danego 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 procedurę 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ć:

  • 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. Sprawdza się stan obniżony 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 w stanie 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ępnej bezczynności.

Przyciski paska narzędzi będą wysyłać wiadomości WM_COMMAND tak jak zwykłe przyciski lub elementy menu i są zwykle obsługiwane przez procedurę obsługi ON_COMMAND w tej samej klasie, która zapewnia procedurę 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, ponieważ zawiera kontrolki i obsługuje tabulację między nimi. Działa również jak okno dialogowe, w ramach którego używa szablonu okna dialogowego do reprezentowania paska.

Element CDialogBar jest używany w pasku narzędzi podglądu wydruku, który zawiera standardowe przyciski.

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 elementu sterowania CDialogBar 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ć:

  • 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 także

Uwagi techniczne według numeru
Uwagi techniczne według kategorii