Polecenia
|
|
-
-
Poleceniami są wszystkie komunikaty
WM_COMMAND pochodzące od interfejsu użytkownika
-
Metody obsługi poleceń
mogą być zawarte we wszystkich obiektach klas
dziedziczących z CCmdTarget (przede wszystkiem w
obiekcie aplikacji, oknach, dokumentach
i wzorcach dokumentu)
-
Po otrzymaniu polecenia odbywać
się będzie automatycznie przeszukiwanie obiektów w
celu znalezienia funkcji obsługi polecenia
[początek strony]
-
-
Ścieżki przesyłania
poleceń to określone, standardowe kolejności
przeszukiwania obiektów ze sprawdzaniem istnienia metody obsługującej
dane polecenie
-
Standardowe ścieżki
przesyłania poleceń w zależności od klasy
obiektu (lub bazowej), który to polecenie otrzymał:
-
CMDIFrameWnd
(okno nadrzędne aplikacji MDI)
1. aktywne okno CMDIChildWnd
(okno nadrzędne widoku dokumentu)
2. to okno nadrzędne aplikacji MDI
3. CWinApp (obiekt
aplikacji)
-
CFrameWnd,
CMDIChildWnd (okno
nadrzędne widoku dokumentu)
1. aktywny widok CView
2. to okno nadrzędne widoku dokumentu
3. CWinApp (obiekt aplikacji)
-
CView (widok dokumentu)
1. ten widok dokumentu
2. dokument tego widoku
-
CDocument
(dokument)
1. ten dokument
2. wzorzec tego dokumentu CDocTemplate
-
CDialog
(okno dialogowe)
1. to okno dialogowe
2. okno bazowe (rodzic) tego okna dialogowego
3. CWinApp (obiekt aplikacji)
-
Przeszukiwanie ścieżki kończy
się w momencie znalezienia obiektu zawierającego metodę
obsługi danego polecenia lub w momencie zakończenia
ścieżki (polecenie nie zostanie obsłużone)
-
Przykład ścieżki (polecenie
z menu aplikacji MDI, którego obsługa jest tylko w
dokumencie):
1. polecenie otrzymuje nadrzędne okno aplikacji MDI
2. nadrzędne okno aplikacji MDI przekierowuje do aktywnego
okna nadrzędnego widoku dokumentu bez sprawdzania swoich możliwości
3. aktywne okno nadrzędne przekierowuje do aktywnego widoku
dokumentu bez sprawdzania swoich możliwości
4. widok sprawdza swoją mapę komunikatów, nie znajduje
funkcji obsługi, przekierowuje do swojego dokumentu
5. dokument znajduje funkcję obsługi w sobie, jest ona
wywoływana
-
Można zmienić standardową
ścieżkę przesyłania poleceń nadpisując
odpowiednio wirtualne metody CCmdTarget::OnCmdMsg
[początek strony]
-
-
Makra obsługi poleceń to
wpisy dodawane do mapy komunikatów definiujące metody jako
funkcje obsługi poleceń lub uaktualnień stanu
poleceń
-
Makro ON_COMMAND jest używane
do skojarzenia metody z obsługą polecenia
-
Makro ON_UPDATE_COMMAND_UI
jest używane dla skojarzenia metody z obsługą
uaktualnienia stanu polecenia (np. dostępne, zaznaczone)
-
Najwygodniej jest korzystać z ClassWizard,
który automatycznie dodaje wpis do mapy komunikatów oraz
deklarację i definicję metody
[początek strony]
-
-
Uaktualnianie stanu poleceń to
określenie aktualnie pożądanych atrybutów polecenia
(np. czy powinno być w danej
chwili dostępne lub zaznaczone)
-
wizualnie w interfejsie będzie
to widoczne w stanie pozycji menu lub przycisków na pasku toolbar)
-
jeśli przycisk i pozycja
menu odpowiadają temu samemu poleceniu, to powinny mieć
takie same identyfikatory
- w takim przypadku ich stan będzie zawsze taki sam, określany
przez jedną metodę (nie będą potrzebne
dwie metody, jedna dla przycisku, druga dla pozycji menu)
-
Schemat uaktualniania pozycji menu:
-
użytkownik otwiera menu
-
dla każdej pozycji
otwieranego menu jest szukana funkcja zwiazana z poleceniem
tej pozycji, związana makrem ON_UPDATE_COMMAND_UI
- jeśli taka funkcja istnieje, to jest wywoływana
i w niej ustawiany jest stan pozycji menu
- jeśli taka funkcja nie istnieje ale istnieje funkcja
obsługi tego polecenia (związana makrem ON_COMMAND),
to pozycja menu zostanie automatycznie ustawiona jako dostępna
- jeśli nie ma żadnej z tych dwóch funkcji, to pozycja
menu będzie niedostępna gdy CFrameWnd::m_bAutoMenuEnable
jest TRUE (wartość domyślna), a dostępna w
przeciwnym przypadku
Przyciski toolbar są
uaktualniane w analogiczny sposób do pozycji menu, lecz schemat
uaktualnienia jest wywoływany w CWinApp::OnIdle
Do funkcji obsługi
uaktualnienia stanu polecenia zostaje przekazany jeden parametr
klasy CCmdUI, który odpowiada za stan polecenia
-
w celu ustawienia stanu
polecenia należy wywoływać dla tego parametru
metody: CCmdUI::Enable, CCmdUI::SetCheck, CCmdUI::SetRadio,
CCmdUI::SetText
[początek strony]
|