terça-feira, 19 de abril de 2011

Menus com wxWidgets

Introdução
    Através dos menus nós podemos agrupar os comandos de nossa aplicação para que possamos executá-los de maneira rápida e intuitiva. Em wxWidgets os menus são compostos basicamente de uma barra de menu (wxMenuBar), os menus propriamente ditos (wxMenu) e os items pertencentes a cada menu (wxMenuItem). Através do método SetMenuBar() nós adicionamos uma barra de menu à aplicação. O método Append() adiciona um menu à barra de menu e um item de menu ao menu.
   No nosso exemplo criaremos uma aplicação com uma barra de menu que tem o menu 'Arquivo' que por sua vez tem os items de menu: 'Novo', 'Abrir', 'Salvar' e 'Sair'. Ao clicarmos no item de menu 'Sair' a aplicação é fechada.


Código:

#include <wx/wx.h>
//menu.h

class Menu : public wxFrame
{
        private:
            wxMenuBar *barramenu;
            wxMenu *arquivo;
            wxMenuItem *novo;
            wxMenuItem *abrir;
            wxMenuItem *salvar;
            wxMenuItem *sair;

        public:
            Menu(const wxString &titulo);
            void Sair(wxCommandEvent &evt);
};

#include "menu.h"
//menu.cpp

Menu::Menu(const wxString &titulo) :
      wxFrame(NULL, -1, titulo, wxDefaultPosition, wxSize(500, 400))
      {
            //criamos a barra de menu
            barramenu = new wxMenuBar;
            //criamos o menu Arquivo
            arquivo = new wxMenu;
            novo = new wxMenuItem(arquivo, 1000, wxT("&Novo"));
            abrir = new wxMenuItem(arquivo, 1001, wxT("A&brir"));
            salvar = new wxMenuItem(arquivo, 1002, wxT("&Salvar"));
            sair = new wxMenuItem(arquivo, 1003, wxT("Sai&r"));
            //conectamos o método Sair() ao item de menu de id = 1003
            Connect(1003, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(Menu::Sair));
            //adicionamos os items de menu ao menu arquivo
            arquivo->Append(novo);
            arquivo->Append(abrir);
            arquivo->Append(salvar);
            arquivo->Append(sair);
            //adicionamos o menu Arquivo à barra de menu
            barramenu->Append(arquivo, wxT("&Arquivo"));
            //adicionamos a barra de menu 'barramenu' à aplicacao
            SetMenuBar(barramenu);
            Centre();
      }

void Menu::Sair(wxCommandEvent &evt)
{
    //fechamos a aplicacao
    Close();
}

#include "menu.h"
//main.h

class MinhaApp : public wxApp
{
    public:
        virtual bool OnInit();
};

#include "main.h"
//main.cpp

IMPLEMENT_APP(MinhaApp)

bool MinhaApp::OnInit()
{
        Menu *menu = new Menu(wxT("Menus com wxWidgets"));
        menu->Show(true);
        return true;
}

Nenhum comentário:

Postar um comentário