Interfaces gráficas e wxWidgets

Muitas vezes, durante o desenvolvimento de uma determinada aplicação, estar preso a uma única plataforma, pode não ser desejável. Por outro lado, devido à heterogeneidade dos sistemas operativos e dispositivos onde a aplicação pode correr, só o desenvolvimento gráfico consome grande parte dos recursos e tempo de programação. Por exemplo, uma aplicação em rede verdadeiramente democrática e funcional, não se pode cingir apenas a uma plataforma, uma vez que qualquer dispositivo pode partilhar os recursos da mesma.
Existem
frameworks que permitem desenvolver a parte gráfica de uma aplicação de uma forma simples e transparente para o programador, escondendo todas as intrincarias associadas às respectivas APIs. O wxWigets é um desses frameworks de código livre, que permite fazer desenvolvimento nas linguagens de programação C++, Python, Perl e C#/.NET.
Uma aplicação wxWidgets simples, segue o fluxo

Declara-se a classe principal para a aplicação, herdada da classe wxApp:

class MyApp : public wxApp{
    public:
      virtual bool onInit();
}

A função onInit() serve, por norma, para criar as janelas que vão formar a parte gráfica do programa. Também pode ser usada para inicializar os objectos do negócio da aplicação.
Para indicar ao wxWidgets qual vai ser a classe usada como principal, usa-se a macro

IMPLEMENT_APP(MyApp);

Se se pretender obter um apontador para esta classe, pode-se usar a macro DECLARE_APP(MyApp) e usar a função wxGetApp() para obter o apontador.
O segundo passo a seguir consiste em definir a janela principal, o qual pode ser feito na classe (qualquer janela é sempre herdada da classe wxFrame)

class MyFrame : public wxFrame{
   public:
     void onQuit(wxCommandEvent& ev);
     void onAbout(wxCommandEvent& ev);
   private:
     DECLARE_EVENT_TABLE();
}

As funções onQuit() e onAbout() servem para tratar os eventos associados aos menus. Para indicar que funções estão associadas a que eventos, usa-se a macro DECLARE_EVENT_TABLE() e definem-se os eventos numa tabela do tipo

BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_MENU(wxID_ABOUT,MyFrame::onAbout)
EVT_MENU(exID_EXIT,MyFrame::onQuit)
END_EVENT_TABLE()

Uma vez definidos os eventos, sempre que se pressione o menu com o identificador wxID_ABOUT, é processada a função onAbout(). A barra de menu pode ser definida no construtor da janela MyFrame. Uma vez definida a classe MyFrame, constroi-se a função onInit() para a instanciar e apresentar.

bool MyApp::onInit(){
  MyFrame *myFrame = new MyFrame(wxT("Widgets Application Sample"));
  myFrame->Show(true);
  return true;
}

Os elementos que constituem a janela podem ser definidos no construtor da classe MyFrame.

MyFrame::MyFrame(wxStrin& title):
wxFrame((wxFrame*) NULL,
                     -1,
                  title,
      wxDefaultPosition,
          wxDefaultSize){
  wxMenu *menuFile = new wxMenu;

 menuFile->Append(ID_About,_T("&About…") );
  menuFile->AppendSeparator();
menuFile->Append(ID_Quit,_T("E&xit"));
 
wxMenuBar *menuBar = new wxMenuBar;
  menuBar->Append( menuFile, _T("&File") );
 
SetMenuBar( menuBar );
}

Repare-se que, no construtor, são criados os respectivos menus, colocados numa barra de menus e a função SetMenuBar() permite associar a barra de menus à janela. Relembre-se que a janela vai ser criada e apresentada na função MyApp::onInit().

O framework já dispõe de um livro que pode servir de guia a quem o queira utilizar : Cross-Platform GUI Programming with wxWidgets. É importante deixar claro que este framework não está apenas restrito ao desenvolvimento da parte gráfica mas também endereça outro tipo de situações como os casos das bases de dados e aplicações multithread. Pode ser uma escolha razoável para quem queira desenvolver aplicações para várias plataformas de uma forma rápida e eficiente.

Sobre Sérgio O. Marques

Licenciado em Física/Matemática Aplicada (Astronomia) pela Faculdade de Ciências da Universidade do Porto e Mestre em Matemática Aplicada pela mesma instituição, desenvolvo trabalho no PTC (Porto Technical Centre) - Yazaki como Administrador de bases-de-dados. Dentro o meu leque de interesses encontram-se todos os temas afins às disciplinas de Matemática, Física e Astronomia. Porém, como entusiasta, interesso-me por temas relacionados com electrónica, poesia, música e fotografia.
Esta entrada foi publicada em Computadores e Internet. ligação permanente.

Uma resposta a Interfaces gráficas e wxWidgets

  1. 남철 diz:

    잘 보구갑니다 . 나의 아름다운 천사 친구 님 ,, 아름다운 시간보내세요,,,,,,,,,,,,,hug,,,,,,,,,,

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s