Okna dialogowe
klasa CDialog
|
|
-
-
Okna dialogowe są
specyficznym rodzajem okien w systemie
Windows, mają one na celu uzyskanie od użytkownika
pewnych informacji
-
Istnieją dwa typy okien
dialogowych:
-
modalne (modal), które
muszą być zamknięte przez użytkownika
przed dalszą pracą z aplikacją, zazwyczaj
zamknięcie okna dialogowego następuje po naciśnieciu
przycisku OK albo Cancel
-
niemodalne (modeless),
które nie przeszkadzają w normalnej pracy z aplikacją
-
Okno dialogowe w MFC tworzą
dwa składniki:
-
zasób wzorca okna
dialogowego (dialog-template resource)
- określa rozmiar, położenie okna
dialogowego oraz typy, rozmiary i położenia
kontrolek umieszczonych na oknie dialogowym
- w prosty sposób może być tworzony z edytorze
zasobów (resource editor)
- możliwe jest także tworzenie dialogu na
podstawie wzorca stworzonego w pamięci, jest to dużo
bardziej kłopotliwe i w większości przypadków
niepotrzebne
-
obiekt klasy CDialog
lub potomnej
-
Klasa CDialog daje pełną
funkcjonalność okien dialogowych
[początek strony]
[początek strony]
[początek strony]
-
-
Dostęp do każdej kontrolki
umieszczonej na oknie dialogowym jest możliwy dzięki
metodzie CDialog::GetDlgItem
-
jest to metoda odziedziczona z CWnd,
ale dopiero w przypadku okien dialogowych widać jej
funkcjonalność
-
metoda ta zwraca wskaźnik
do obiektu CWnd reprezentującego kontrolkę,
co umożliwia dokonanie wszystkich czynności, od
schowania lub pokazania kontrolki aż do zmiany jej
zawartości
-
Klasa CDialog daje także
inny sposób dostępu do kontrolek i ich zawartości
poprzez definiowanie zmiennych klasy obsługującej dialog
(dziedziczącej z CDialog)
-
wymiana danych pomiędzy
zmiennymi klasy i kontrolkami okna dialogowego (w obie strony)
dokonuje się za pośrednictwem metody CDialog::UpdateData
- żeby uaktualnić zmienne na podstawie kontrolek należy wywołać tę
funkcję z parametrem TRUE
- żeby zmienić zawartość kontrolek na
podstawie wartości zmiennych należy jako parametr
przekazać FALSE
-
za samą wymianę
danych pomiędzy zmiennymi i kontrolkami jest
odpowiedzialna metoda CDialog::DoDataExchange, którą
najczęściej całkowicie zarządza ClassWizard
- funkcje DDX_... (np. DDX_Text) umożliwiają
wymianę danych
- funkcje DDV_... (np. DDV_MaxChars) umożliwiają
sprawdzanie poprawności zawartości kontrolek
- możliwe jest tworzenie własnych funkcji wymiany
danych lub sprawdzania poprawności
- wszystkie wpisy w nawiasach {{AFX_DATA_MAP, }}AFX_DATA_MAP
powinny być modyfikowane tylko za pośrednictwem ClassWizard
-
używane są dwa typy
zmiennych: określające całe kontrolki albo określajace
zawartość kontrolek, możliwe jest jednoczesne używanie
wielu zmiennych dołączonych do jednej kontrolki
-
Obsługa przycisków na oknie dialogowym
-
po naciśnięciu przez użytkownika
przycisku wysyłany jest komunikat
BN_CLICKED
-
tak jak w przypadku pozostałych komunikatów
Windows dla jego obsłużenia w MFC musi być
zdefiniowana funkcja
- funkcja ta powinna być zadeklarowana przy pomocy makra ON_BN_CLICKED
i powinna być afx_msg
-
najprościej jest używać ClassWizard
do tworzenia takich funkcji (zostanie automatycznie dodana
deklaracja w pliku .H, w deklaracjach funkcji obsługi
komunikatów oraz zostanie automatycznie utworzona taka
funkcja z pustą zawartością)
-
standardowe przyciski OK i Cancel
mają wbudowana wirtualne metody obsługi, odpowiednio
CDialog::OnOK i CDialog::OnCancel
- standardowe implementacje tych metod wywołują CDialog::EndDialog
z parametrami odpowiednio IDOK i IDCANCEL
- nadpisując te funkcje można nie pozwolić
na zamknięcie okna dialogowego
[początek strony]
-
-
Przy pomocy metody CWinApp::SetDialogBkColor
wywoływanej zwykle w CWinApp::InitInstance można
zmienić tło wszystkich dialogów w aplikacji
-
Inicjalizacji okna dialogowego należy
dokonywać zawsze w nadpisanej wirtualnej metodzie CDialog::OnInitDialog
-
Możliwe jest ustawienie
identyfikatora pomocy dla dialogu przy pomocy CDialog::SetHelpID
[początek strony]
-
-
Zakładki na oknie dialogowym
to mechanizm pozwalający na zawarcie na jednym oknie
dialogowym wielu stron zawierających kontrolki
-
Okno dialogowe z zakładkami (tab
dialog) zwane jest także arkuszem własności (property
sheet) i składa się ze stron własności (property
page)
-
Podstawową klasą takiego
okna jest CPropertySheet
-
funkcjonalnie bardzo podobna do
CDialog, choć nie jest to jej klasa pochodna
-
mogą być modalne (przez
uzycie metody CPropertySheet::DoModal) lub niemodalne (CPropertySheet::Create)
-
Klasa CPropertySheetEx
rozszerza możliwości klasy CPropertySheet o
pokazywanie obrazka w tle okna dialogowego, jest dostępna
tylko w Windows 98 i NT 5.0
-
Podstawową klasą jednej
strony okna dialogowego z zakładkami jest CPropertyPage
-
dziedziczy z CDialog
-
ma zasób wzorca okna
dialogowego, który można edytować przy pomocy
edytora zasobów
-
kontrolki są trzymane
tylko na poszczególnych stronach, nie zaś na samym oknie
dialogowym
-
Klasa CPropertyPageEx
rozszerza możliwości klasy CPropertyPage o
defniowanie podtytuły strony, jest dostępna tylko w
Windows 98 i NT 5.0
-
Schemat użycia okna
dialogowego z zakładkami
-
dla każdej strony utworzyć
oddzielny wzorzec w zasobach
- nie muszą być takich samych rozmiarów, mniejsze
zostaną powiększone do rozmiaru największego
- musi być określone jako okno potomne (child),
z cienkim obramowaniem (thin border), zaznaczony pasek
tytułowy (titlebar) oraz zaznaczona opcja niedostępności
(disabled)
-
dla każdej strony utworzyć
klasę dziedziczącą z CPropertyPage
-
do tych klas dodać zmienne
związane z kontrolkami i ich zawartościami
-
utworzyć obiekt klasy CPropertySheet
-
dla każdej strony utworzyć
obiekt jej klasy i przy pomocy metody CPropertySheet::AddPage
dodać do okna dialogowego
-
żeby otrzymać okno
dialogowe modalne wywołać CPropertySheet::DoModal,
niemodalne - CPropertySheet::Create
[początek strony]
-
-
W systemie Windows istnieją
następujące standardowe okna dialogowe, których można
zawsze używać
-
wybór koloru - obsługiwany
w MFC za pośrednictwem klasy CColorDialog
-
wybór fontu - CFontDialog
-
drukowanie - CPrintDialog
-
wybór pliku do odczytu/zapisu
- CFileDialog
-
szukanie/zamiana tekstu - CFindReplaceDialog
-
Wszystkie klasy obsługi
standardowych okien dialogowych dziedziczą z CCommonDialog
-
Są zawarte w pliku COMMDLG.DLL
[początek strony]
-
CObject
- informacja w trakcie wykonywania, dynamiczne tworzenie, serializacja
CCmdTarget - obsługa
komunikatów Windows
CWnd - okno
CDialog
CCommonDialog
CColorDialog
CFontDialog
CPrintDialog
CFileDialog
CFindReplaceDialog
CPropertyPage
CPropertyPageEx
CPropertySheet
CPropertySheetEx
[początek strony]
|