Salı, Mayıs 26, 2009

wxWidgets Olaylar(Events)-3

Dinamik Olay İşleyici
Dinamik olay işleyicisi statik olay tablolarına bir alternatiftir. Burada makrolar değil olay tipleri kullanılır. Dinamik olay işleyici wxEvtHandler sınıfının üyesi olan Connect fonksiyonudur. Bu fonksiyonun 3 tane aşırı yüklenmiş hali var. Bu 3 farklı kullanım şekli aşağıdaki gibidir.

void Connect(int id, int lastId, wxEventType eventType, wxObjectEventFunction
function, wxObject* userData = NULL, wxEvtHandler*eventSink = NULL)
------------------------------------------------------------
void Connect(int id, wxEventType eventType, wxObjectEventFunction
function, wxObject* userData = NULL, wxEvtHandler* eventSink = NULL)
------------------------------------------------------------
void Connect(wxEventType eventType, wxObjectEventFunction function, wxObject*
userData = NULL, wxEvtHandler* eventSink = NULL)

Parametre Tanımı
İd Olay işleyici fonksiyonla ilgili ID
lastId Olay işleyici fonksiyonla ilgili ikinci ID aralığı
eventType Gerçekleştirilecek olayın türü (Bkz:wxEventType)
function Gerçekleşmesini istediğimiz fonksiyon
userData Bilgi olay tablosu girişi ile alakalı olarak
userSink Üye Fonksiyon nesnesi

Örnek:
.h dosyasına fonksiyonları tanımlayalım
------------------------------------------------------------
void olusturButon(wxCommandEvent& event);
void olusturText(wxCommandEvent& event);
------------------------------------------------------------
.cpp dosyasına fonksiyonları yazalım
------------------------------------------------------------
void NesneYaratmaFrame::olusturButon(wxCommandEvent& event)
{
long ID_Buton = wxNewId();
wxString isim;
isim.Printf(_("Buton%d"),++sayacButon);
butonY +=25;
yeniButon = new wxButton(panelim,ID_Buton,isim,wxPoint(kX+50,butonY),wxSize(75,20));
//Tıklandığında butonu siler
Connect(ID_Buton,wxEVT_COMMAND_BUTTON_CLICKED,
(wxObjectEventFunction)&NesneYaratmaFrame::silButon);
}
void NesneYaratmaFrame::olusturText(wxCommandEvent& event)
{
long ID_Text = wxNewId();
wxString isim;
isim.Printf(_("MetinKutusu%d"),++sayacText);
textY +=25;
yeniText = new wxTextCtrl(panelim,ID_Text,isim,wxPoint(kX+200,textY),wxSize(100,20));
//Değişiklik olduğunda text kutusunu siler
Connect(ID_Text,wxEVT_COMMAND_TEXT_UPDATED,
(wxObjectEventFunction)&NesneYaratmaFrame::silText);
}
------------------------------------------------------------

Bu örnek ile dinamik olay işleyicilerinin (Connect() ) faydasını görmekteyiz. olusturButon() ve olusturText() fonksiyoları ile nesneler oluşturulduğu anda olaylarıda eklenmiş olacak. Yani çalışma anında olaylar atanmış olacak.

Hiç yorum yok: