Dynamiczna obsługa zdarzeń

background image

Więcej o zdarzeniach

•Jak zmieniać metody obsługi w

czasie działania programu

•Jak rozpoznać w metodzie

źródło i parametry zdarzenia

background image

Wybrane rodzaje zdarzeń

• wxCommand – przenosi zdarzenia od wielu

podstawowych kontrolek

• wxMouseEvent – reprezentuje zdarzenia

od myszy

• wxKeyEvents – klasa zdarzeń wywołanych

za pomocą klawiatury

background image

• Każda z tych klas posiada zbiór metod

charakterystyczny dla danego rodzaju
zdarzeń.

– np. wxEventMouse posiada metody do

odczytania aktualnych współrzędnych
wskaźnika myszy

• Zdarzenie przekazywane jest do metody

obsługi za pomocą obiektu odpowiedniej
klasy

• Metod do zarządzania obsługą zdarzeń

dostarcza klasa wxEvtHandler

background image

Dynamiczna obsługa zdarzeń

• By zmienić metodę obsługi zdarzenia np.

w zależności od stanu jakiegoś parametru

możemy posłużyć się metodą Connect() z

klasy wxEventHandler po tej klasie

dziedziczy klasa wxFrame zatem jest ona

dostępna dla okna aplikacji

• Metoda Connect() posiada kilka możliwych

list parametrów //mechanizm

przeciążania//.

• W przypadku dynamicznej obsługi zdarzeń

nie można polegać na automatycznym

tworzeniu kodu!

• Odłączamy metody za pomocą

Disconnect()

background image

Najprostsza postać Connect():

• void Connet(int id, wxEventType event_type,

wxObjectFunction function, wxObject*

userData, wxEventHandler eventSink)

• Parametry:

 id – identyfikator kontrolki jest to taki sam, jakiego

użylibyśmy w tabeli zdarzeń

 event_type rodzaj zdarzenia na jakie ma reagować

metoda obsługi

 function parametr przekazuje nazwę metody, którą

chcemy obsługiwać zdarzenie

 userData domyślnie ma wartość NULL zawiera

dodatkowe dane powiązane z metodą

 eventSink domyślnie wskaźnik this, przydaje się,

gdy kontrolka jest w innej klasie niż metoda obsługi

zdarzenia

background image

bool Disconnect(int id, wxEventType
event_type, wxObjectFunction function,
wxObject* userData, wxEventHandler
eventSink)

Metoda Disconnect posiada taką samą listę parametrów jak metoda Connect

background image

Dynamiczne dołączanie zdarzeń

• Otwórz istniejący projekt lub wstaw nowy
• Dodaj Panel, dwa przycisk Button, przycisk

opcji CheckBox i pole tekstowe Memo

• W klasie okna należy zadeklarować

metody obsługi naciśnięcia przycisków:

– Przejdź do pliku Projetk1Frm.h
– Znajdź deklaracje prywatnych metod i dopisz w

tej sekcji metody

• CheckBox_tak(wxCommandEvent& event) i
• CheckBox_nie(wxCommandEvent& event)

– Nazwy metod mogą być oczywiście dowolne

byle je później konsekwentnie stosować

background image

• Przejdź do pliku Projekt1Frm.cpp
• Na końcu dopisz definicje metod przed

chwilą zadeklarowanych – będą one
wyświetlały odpowiednie komunikaty w
oknie Memo:

– void

Projekt1Frm::CheckBox_tak(wxCommandEvent&
event){
WxMemo1->AppendText(wxT(” Pole opcji
zaznaczone\n”));
}

– void Projekt1Frm::

CheckBox_nie(wxCommandEvent& event)

{

WxMemo1->AppendText(wxT(” Pole opcji
czyste\n”));
}

background image

• Podłączanie i odłączanie naciśnięcia przycisku

Button będzie realizowane w momencie zmiany
stanu przycisku CheckBox.

• Metoda obsługi CheckBox będzie podłączona

statycznie:

– Kliknij dwukrotnie kontrolkę CHeckBox w oknie

budowanej aplikacji i i w utworzonej metodzie wpisz
kod:

if (wxCheckBox1->GetValue()==true) {
Disconnect(ID_WXBUTTON1);
Connect(ID_WXBUTTON1,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(Projekt1Frm::CheckBox_tak)
);
if(wxCheckBox1->GetValue==false){
Disconnect(ID_WXBUTTON1);
Connect(ID_WXBUTTON1,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(Projekt1Frm::CheckBox_nie)
);
}

background image

• Przy uruchomieniu programu przycisk

opcji jest niezaznaczony, a wiec klikniecie
przycisku Button powinno wyzwalać
metodę CheckBox_nie. Zatem do
CreateGUIControls() wpisz kod załączający
tę metodę:

Connect(ID_WXBUTTON1,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommand_eventHandler(Projekt1Frm::CheckBox_ni
e));

• Skompiluj i uruchom program

background image

Rozpoznawanie obiektu generującego

zdarzenie w metodzie obsługi

• Metoda obsługi zdarzeń posiada jeden

parametr typu wxCommandEvent&, w jego
polach przekazywane są informacje o
obiekcie wywołującym zdarzenia. Ich
odczyt następuje za pomocą odpowiednich
metod i pozwala zidentyfikować obiekt
wywołujący zdarzenie.

• Do identyfikacji obiektu służy metoda

GetID(), pochodząca z klasy wxEvent.
Zwraca ona identyfi-kator obiektu -ten
sam, z jakiego korzystaliśmy okreś-lając
obiekt w tabeli zdarzeń czy metodzie
connect

background image

• Rozpoznawanie obiektu może być

konieczne, jeśli chcemy zaprogramować
jedną metodę do obsługi zdarzeń z kilku
kontrolek

background image

Obsługa zdarzeń z kilku kontrolek za

pomocą jednej metody

• Umieść na Panelu dwa przyciski Button i pole

tekstowe Memo

• Naciśnij dwukrotnie WxButton1 (widok

projektu) i dopisz poniższy kod w utworzonej
metodzie.

– if(event.GetID()==ID_WXBUTTON1) WxMemo1->

AppendText(wxT(”Naciśnięty przycisk 1\n”));
if(event.GetID()==ID_WXBUTTON2) WxMemo1->
AppendText(wxT(”Naciśnięty przycisk 2\n”));

Podłącz tęmetodę do drugiego przycisku w

tabeli zdarzeń //

lub Zdarzenia/OnClick-rozwiń

listę i wybierz

EVT_BUTTON(WX_BUTTON2, Projekt1Frm::
WxButton-1Click);

background image

Obsługa zdarzeń z zakresu kontrolek

• Obsługa każdej kontrolki wymaga

osobnego wpisu w tabeli zdarzeń.

• jeżeli metoda ma obsługiwać wiele

kontrolek danego typu, zapis można
skrócić przez zastosowanie makra
EVT_COMMAND_RANGE(id1, id2,event,
func)

• Jak to się robi?

• Deklarujemy metodę w pliku nagłówkowym
• Definiujemy w pliku źródłowym np..:

if(event.GetId()==ID_CHECKBOX1) WxMemo1-
> AppendText(wxT”Opcja 1 – zmiana stanu\n”);

…. I podobnie dla pozostałych obiektów
posiadających kolejne numery identyfikacyjne

background image

• Teraz należy podłączyć metodę jako

obsługi zdarzeń danego typu, w naszym
przypadku
wxEVT_COMMAND_CHECKBOX_CLICKED
stosując makro EVT_COMMAND_RANGE

• EVT_COMMAND_RANGE (1001, 1008,

wxEVT_COMMAND_CHECKBOX_CLICKED ,
Plik.h::nazwa_metody)

• Kompilujemy i uruchamiamy


Document Outline


Wyszukiwarka

Podobne podstrony:
Cw 7 Obsługa zdarzeń Materiały dodatkowe
Cw 7 Obsługa zdarzeń Instrukcja
Cw 7 Obsługa zdarzeń Instrukcja
JavaScript obsługa zdarzeń i formularzy
Obsługa zdarzeń Mysz
Dynamika1
obsluga klienta 1
zdarzenia masowe, Dr I Baumberg 1 1
Techniki wywierania wplywu oparte na dynamice interakcji
Encyklopedia prawa 2 normy, stosunki, zdarzenia
Analiza dynamiczna chodu w fazie podporu
Użytkowanie, Obsługiwanie i Kierowanie Eksploatacją
35 Zdarzenia zbliżone do kontraktów
3 POSTEPOWANIE NA MIEJSCU ZDARZENIA
dynamika bryly sztywnej(1)
Kurs 03 Dynamika

więcej podobnych podstron