16 Nisan 2010 Cuma

WxWidgets Vector Uygulaması

Merhabalar, sizlere C++ programlama dilinde vector'ler ile ilgili bir wxWidgets uygulamasından bahsetmek istiyorum.
Resimde de gördüğünüz üzere uygulamadaki amacımız; program çalıştığında tıkladığımız yere buton eklenmesini ayrıca o butonun id'siyle birlikte görünmesini sağlamak, form alanında bulunan butona [arka planı mavi olan buton] tıkladığımızda ise çeşitli yerlere tıklayarak ekranda oluşturmuş olduğumuz butonların rasgele hareket etmesini sağlamak ve ayrıca ekranda tıklayarak oluşturduğumuz butonlardan herhangi bir tanesine tıklayarak da form alanının arka plan rengini değiştirmek. 

Biraz karışık oldu ama umarım anlatabilmişimdir. :)

Öncelikle yeni bir frame tabanlı bir wxWidgets projesi oluşturuyoruz ve form alanına önce wxPanel ve devamındaysa bir wxButton ekliyoruz.

Daha sonra projemizi çalıştırdığımızda butonların karışmaması adına ekranda tıkladığımız yere eklenen butonların rasgele hareketini sağlayan butonun arka plan rengini (sol panelde bulunan Background kısmından) dilediğimiz rengi seçerek değiştiriyoruz. Bu işlemden sonra wxPanel'e çift tıklayarak wxPanel'in tıklama (click) olayına (event'ine) aşağıdaki kodları yazıyoruz:

void projenizin_adıFrame::OnPanel1LeftDown(wxMouseEvent& event)

{
int myId= wxNewId();
wxString baslik;
baslik = wxString::Format(_("Dugme : %d"),myId);
yeni_buton= new wxButton(Panel1,myId,baslik,event.GetPosition());
vektor.push_back(yeni_buton);
Connect(myId,wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&vector1Frame::myButton);
}


Bu işlemden sonra ekrana tıkladıkça tıkadığımız yerde oluşan butonların rasgele sağa sola hareketini sağlayan diğer butonun tıklama olayına ise aşağıdaki kodları yazıyoruz:

void projenizin_adıFrame::OnButton1Click(wxCommandEvent& event)

{
std::vector::iterator it;
for(it = vektor.begin(); it != vektor.end(); it++)
{
wxPoint yer = (*it)->GetPosition();
int dx = rand() % 10 -5;
int dy = rand() % 10 -5;

yer.x = yer.x + dx;
yer.y = yer.y + dy;
(*it) -> SetPosition(yer);
}
}


Bu işlemden sonra ise form alanına tıkladıkça tıkladığımız yerde oluşan butonun üzerine tıkladığımızda panel arka plan renginin değişmesi için hem yeni bir fonksiyon üretiyoruz hem de bu fonksiyonun içine arka plan renginin değişmesi için kodlarımızı yazıyoruz.

void projenizin_adıFrame::myButton(wxCommandEvent& event)
{
Button1->SetLabel(wxString::Format(_("Bas Id:%d"), event.GetId()));
Panel1->SetBackgroundColour(wxColour(0,50,100));
Panel1->Refresh();
}

Bu işlemi de bitirdikten sonra son olarak "projenizin_adıMain.h" isimli header dosyasına öncelikle açıklama satırlarının dışında bir yere -wxButton konusunda anlattığım şekilde- #include <vector.h> kütüphanesini ekliyoruz ve "DECLARE_EVENT_TABLE()" yazan satırın üst kısmına ise aşağıdaki tanımlamaları yapıyoruz:


void myButton(wxCommandEvent& event);
wxButton *yeni_buton;
std::vector<button *>vektor;



Böylelikle uygulamamızı bitirmiş olduk, umarım bu bilgiler size yardımcı olur...

İyi çalışmalar... ;)

Hiç yorum yok:

Yorum Gönder