segunda-feira, 11 de abril de 2011

Eventos

Introdução
       Manipulação de eventos é uma parte indispensável em qualquer sistema que utilize  interface gráfica. Eventos normalmente vêm de ações executadas pelo usuário sobre o sistema, como o clique em um botão, o pressionamento de uma tecla, etc, mas também podem ser gerados de outras formas, como pelo manipulador de janelas, o timer, etc.
      Tradicionalmente wxWidgets trabalha com eventos através da manipulação de uma tabela de eventos estática, diferentemente do modo como foi apresentado no post anterior com o método Connect, que é uma forma mais moderna e prática de tratar eventos com wxWidgets.

Exemplo
     Utilizando tabela de eventos o exemplo do post anterior ficaria assim:

#include <wx/wx.h>
//frame.h
class MeuFrame : public wxFrame {
        private:
            wxPanel *painel;
            wxButton *btnsair;
            wxStaticText *label;
            DECLARE_EVENT_TABLE() // Declaramos a tabela de eventos com a macro  
                                                                //DECLARE_EVENT_TABLE()
        public:
            MeuFrame(const wxString &titulo);
            void Sair(wxCommandEvent &evt);
};

#include "frame.h"
//frame.cpp
MeuFrame::MeuFrame(const wxString& titulo):
          wxFrame(NULL, wxID_ANY, titulo, wxDefaultPosition, wxSize(500, 400))
{
     painel = new wxPanel(this, wxID_ANY);
     label = new wxStaticText(painel, -1, wxT("Meu Primeiro Programa com wxWidgets"), wxPoint(100, 200));
     btnsair = new wxButton(painel, wxID_EXIT, wxT("Sair"), wxPoint(200, 250), wxSize(50, 30));
     //  Connect(wxID_EXIT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MeuFrame::Sair));
     btnsair->SetFocus();
     Centre();
}

void MeuFrame::Sair(wxCommandEvent &evt) {
    //fecha a aplicação
    Close(true);
}

//Esta macro inicia a tabela de eventos
BEGIN_EVENT_TABLE(MeuFrame, wxFrame)
    /*Aqui através da macro EVT_BUTTON nós atribuímos o método sair ao botão com id =
       wxID_EXIT, isto é, o método sair será chamado quando o botão for clicado, onde 
      EVT_BUTTON indica o tipo de evento. */
    EVT_BUTTON(wxID_EXIT, MeuFrame::Sair)

//Esta macro finaliza a tabela de eventos
END_EVENT_TABLE()

Nenhum comentário:

Postar um comentário