Advertisement
AntonioVillanueva

wxWidgets ejemplos DYNAMIC EVENT HANDLER

Jun 20th, 2018
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.69 KB | None | 0 0
  1. //Test de un Hello World en wxWidgets Antonio Villanueva
  2.  
  3. //g++ -Wall -static-libstdc++ -std=c++11 -Wunused-but-set-variable `wx-config --cxxflags` -o hola *.cpp `wx-config --libs`
  4. //Declara la clase aplicacion
  5.  
  6. //#include "imagen.xpm" //Imagen en formato xpm
  7. #include <iostream>
  8. #include "wx/wx.h"
  9. //#include <wx/app.h>
  10. //using namespace std;
  11.  
  12. wxString title ("Barra Superior");
  13.  
  14. //Declaraciones
  15.  
  16. //Cada aplicacion wxWidget define una clase derivada de wxApp
  17. class MiApp:public wxApp
  18. {
  19.     public:
  20.     //Llamado al inicio startup, es como el main en c
  21.     virtual bool OnInit();//main wxWidgets , mas abajo se implementa
  22. };
  23.  
  24. //Declaracion de la clase frame principal
  25.  
  26. //----------------------------------------------------------------------
  27.  
  28. class MiFrame:public wxFrame
  29. {
  30.     public:
  31.     //Constructor de la clase
  32.     MiFrame(const wxString& titulo);
  33.    
  34.     // Dos "event handlers" , gestion de eventos
  35.     void OnQuit(wxCommandEvent& event);
  36.     void OnAbout(wxCommandEvent& event);   
  37.     //void OnSize(wxSizeEvent& event);//Manipulacion del Frame
  38.     void OnButtonOk(wxCommandEvent& event);//Click boton OK
  39.    
  40.     private:
  41.     /*Macro para informar a wxWidgets de la gestion de eventos
  42.     *Declara la tabla de eventos en esta clase ,mas abajo
  43.     * la implemento entre BEGIN_ y END_EVENT_TABLE
  44.     */
  45.    
  46.     //Declaracion dinamica eventos no utilizo el macro
  47.     //Trabajaremos desde OnInit para eventos dinamicos
  48.     //DECLARE_EVENT_TABLE()
  49. };
  50.  
  51. //----------------------------------------------------------------------
  52.  
  53. /*Implementacion , MiApp
  54. *Cuando se crea el objeto MiApp se asigna a la variable global wxTheApp
  55. * pero mejor que hacer un CAST emplear el MACRO  DECLARE_APP despues de
  56. * la declaracion de la clase , wxGetApp retorna una ref. al objeto MiApp
  57. */
  58. DECLARE_APP(MiApp)
  59.  
  60. //Macro que Proporciona a wxWidgets los medios de crear el objeto MiApp
  61. IMPLEMENT_APP(MiApp)
  62.  
  63. //----------------------------------------------------------------------
  64.  
  65. //Implementacion OnInit,Inicializa la aplicacion
  66.  
  67. bool MiApp::OnInit()
  68. {
  69.     //Crea la ventana principal , una instancia de nuestra clase MiFrame
  70.     //El titulo lo pasamos al constructor envuelto en el macro wxT
  71.     //macro de conversion de strings y char al tipo apropiado
  72.     MiFrame *frame=new MiFrame(wxT("Titulo Mini wxWidgets"));
  73.    
  74.     /*Eventos dinamicos no utilizo DECLARE_EVENT_TABLE en MiFrame
  75.     *Si teniamos un  wxXYZEvent aqui es wxXYZEventHandler
  76.     * frame->Diconnect elimina el mapping
  77.     */
  78.     //Conectando al Exit
  79.     frame->Connect(wxID_EXIT,
  80.                     wxEVT_COMMAND_MENU_SELECTED,
  81.                     wxCommandEventHandler(MiFrame::OnQuit) );
  82.                    
  83.     //Conexion al About
  84.     frame->Connect(wxID_ABOUT,
  85.                     wxEVT_COMMAND_MENU_SELECTED,
  86.                     wxCommandEventHandler(MiFrame::OnAbout) );
  87.                    
  88.     //Conexion al Boton OK antes era ->EVT_BUTTON(wxID_OK,MiFrame::OnButtonOk)
  89.     //wxID_OK Confirma una seleccion de dialogo EVT_BUTTON
  90.     frame->Connect(wxID_OK,
  91.                     wxEVT_COMMAND_BUTTON_CLICKED,
  92.                     wxCommandEventHandler(MiFrame::OnButtonOk) );                  
  93.                    
  94.    
  95.     //Mostrar la ventana
  96.     frame->Show(true);
  97.    
  98.     //Arranca el bucle de eventos
  99.     return true ;//Si false limpia sus estructuras y sale
  100. }
  101.  
  102. //----------------------------------------------------------------------
  103.  
  104. //Tabla de eventos para MiFrame DECLARE_EVENT_TABLE() en MiFrame
  105. //Deteccion de los clicks de raton con wxID_ABOUT y wxID_EXIT
  106. //Que se dirigen a MiFrame::OnAbout y OnQuit
  107. /*
  108. BEGIN_EVENT_TABLE (         MiFrame,wxFrame)
  109.     EVT_MENU(wxID_ABOUT,    MiFrame::OnAbout)
  110.     EVT_MENU(wxID_EXIT,     MiFrame::OnQuit)
  111.     //EVT_SIZE(             MiFrame::OnSize)//No tiene argumento
  112.     //EVT_BUTTON(wxID_OK,       MiFrame::OnButtonOk)
  113. END_EVENT_TABLE()
  114. */
  115. //Declaracion de OnAbout conectado al click del raton desde la EVENT_TABLE
  116. void MiFrame::OnAbout(wxCommandEvent& event)
  117. {
  118.     wxString mensaje;
  119.     //Contenido dentro de la ventana abierta
  120.     mensaje.Printf(wxT("La version wxWidgets es %s"),wxVERSION_STRING);
  121.     //Nombre de la barra de titulo Antonio Villanueva
  122.     wxMessageBox (mensaje,wxT("Antonio Villanueva"),wxOK | wxICON_INFORMATION,this);
  123. }
  124. //Declaracion de OnQuit conectado al click del raton desde la EVENT_TABLE
  125. void MiFrame::OnQuit(wxCommandEvent& event)
  126. {
  127.     //Destruccion del Frame , de hecho va generar un wxEVT_CLOSE_WINDOW
  128.     //wxWidgets gestiona por defecto este evento
  129.     Close();
  130. }
  131.  
  132. /*
  133. void MiFrame::OnSize(wxSizeEvent& event)//Manipulacion del Frame
  134. {
  135. //  wxMessageBox( wxT("Cambiando size de la ventana !") );
  136. }
  137. */
  138. void MiFrame::OnButtonOk(wxCommandEvent& event)//Manipula boton OK
  139. {
  140.     //Abre ventana informando ....
  141.     wxMessageBox( wxT("Has hecho click en el boton OK !") );
  142. }
  143.  
  144.  
  145. //Constructor de MiFrame implementa un icono una barra status y menu
  146. //wxID_ANY le dice a Widgets de generar un identificador por su cuenta
  147. MiFrame::MiFrame(const wxString& titulo):wxFrame(NULL,wxID_ANY,title)
  148. {
  149.     //Define el icono del frame
  150.     //SetIcon(wxIcon(imagen_xpm));
  151.    
  152.     //Crea la barra de Menu
  153.     wxMenu *fileMenu=new wxMenu;
  154.    
  155.     //Crea el menu
  156.     wxMenu *menuAyuda=new wxMenu;
  157.    
  158.     //Anade el Acerca de en el menu de ayuda
  159.     menuAyuda->Append(wxID_ABOUT,wxT("&Acerca ...\tF1"),
  160.                         wxT("Muestra Dialogo Acerca de "));
  161.                            
  162.     //Anade el Salir en el fileMenu                    
  163.     fileMenu->Append(wxID_EXIT,wxT("E&xit\tALT+X"),
  164.                                 wxT("Salir "));
  165.     //Creamos la barra de menus
  166.     wxMenuBar *menuBar=new wxMenuBar();
  167.    
  168.     //Ahora los anadimos a la barra de menu
  169.     menuBar->Append(fileMenu,wxT("&File"));
  170.     menuBar->Append(menuAyuda,wxT("&Ayuda"));
  171.    
  172.     //Adjuntamos este Menu al Frame
  173.     SetMenuBar(menuBar);
  174.    
  175.    
  176.     //Crea una barra de estado inferior,solo para divertirnos
  177.     CreateStatusBar(2);
  178.     SetStatusText(wxT("Barra inferior"));//Inferior ventana
  179.    
  180.     //Crea un boton OK y lo coloca en el centro de la ventana
  181.     wxButton* boton=new wxButton(this,wxID_OK,wxT("OK"),wxPoint(150,100)); 
  182.    
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement