Advertisement
AntonioVillanueva

Bind wxMouseEvent EVT_LEFT_DCLICK Menu en PopUp

Jul 10th, 2018
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.99 KB | None | 0 0
  1. //Bind  wxMouseEvent  EVT_LEFT_DCLICK a un wxFrame Antonio Villanueva segura
  2. //Menu en PopUp asociado al evento D.CLICK
  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 <iostream>
  7. #include "wx/wx.h"
  8. #include <wx/popupwin.h>
  9. #include <wx/menu.h>
  10. #include <wx/event.h>
  11. //using namespace std;
  12.  
  13. //Declaraciones
  14.  //Cada aplicacion wxWidget define una clase derivada de wxApp
  15. class MiApp:public wxApp
  16. {
  17.     public:
  18.     //Llamado al inicio startup, es como el main en c
  19.     virtual bool OnInit();//main wxWidgets , mas abajo se implementa
  20. };
  21.  
  22. //Declaracion de la clase frame principal
  23.  
  24. //----------------------------------------------------------------------
  25.  
  26. class MiFrame:public wxFrame
  27. {
  28.     public:
  29.     //Constructor de la clase
  30.     MiFrame();
  31.    
  32.     // "event handlers" , gestion de eventos
  33.     void OnOpen(wxCommandEvent& event);
  34.     void OnQuit(wxCommandEvent& event);
  35.     void OnAbout(wxCommandEvent& event);  
  36.     void OnButtonOk(wxCommandEvent& event);//Click boton OK
  37.     void EventosRaton (wxMouseEvent& event);//Eventos de raton Doble Click
  38.    
  39.     private:
  40.     wxMenu* m_menu;//Crea menu ..
  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.     DECLARE_EVENT_TABLE()
  46. };
  47.  
  48. //----------------------------------------------------------------------
  49.  
  50. /*Implementacion , MiApp
  51. *Cuando se crea el objeto MiApp se asigna a la variable global wxTheApp
  52. * pero mejor que hacer un CAST emplear el MACRO  DECLARE_APP despues de
  53. * la declaracion de la clase , wxGetApp retorna una ref. al objeto MiApp
  54. */
  55. DECLARE_APP(MiApp)
  56.  
  57. //Macro que Proporciona a wxWidgets los medios de crear el objeto MiApp
  58. IMPLEMENT_APP(MiApp)
  59.  
  60. //----------------------------------------------------------------------
  61.  
  62. //Implementacion OnInit,Inicializa la aplicacion
  63.  
  64. bool MiApp::OnInit()
  65. {
  66.     //Crea la ventana principal , una instancia de nuestra clase MiFrame
  67.     //El titulo lo pasamos al constructor envuelto en el macro wxT
  68.     //macro de conversion de strings y char al tipo apropiado
  69.     MiFrame *frame=new MiFrame();
  70.    
  71.     //Mostrar la ventana
  72.     frame->Show(true);
  73.    
  74.     //Arranca el bucle de eventos
  75.     return true ;//Si false limpia sus estructuras y sale
  76. }
  77.  
  78. //----------------------------------------------------------------------
  79.  
  80. //Tabla de eventos para MiFrame DECLARE_EVENT_TABLE() en MiFrame
  81. //Deteccion de los clicks de raton con wxID_ABOUT y wxID_EXIT
  82. //Que se dirigen a MiFrame::OnAbout y OnQuit
  83. BEGIN_EVENT_TABLE ( MiFrame, wxFrame)
  84.     EVT_MENU(wxID_OPEN,    MiFrame::OnOpen)
  85.     EVT_MENU(wxID_ABOUT,    MiFrame::OnAbout)
  86.     EVT_MENU(wxID_EXIT,     MiFrame::OnQuit)
  87.     EVT_BUTTON(wxID_OK,     MiFrame::OnButtonOk)
  88.     //EVT_LEFT_DCLICK(MiFrame::EventosRaton)
  89. END_EVENT_TABLE()
  90.  
  91. //Declaracion de OnAbout conectado al click del raton desde la EVENT_TABLE
  92. void MiFrame::OnAbout(wxCommandEvent& event)
  93. {
  94.     wxMessageBox (wxT(" About "));
  95. }
  96.  
  97. void MiFrame::OnOpen(wxCommandEvent& event)
  98. {
  99.     wxMessageBox (wxT(" Open "));
  100. }
  101.  
  102. //Declaracion de OnQuit conectado al click del raton desde la EVENT_TABLE
  103. void MiFrame::OnQuit(wxCommandEvent& event)
  104. {
  105.     //Destruccion del Frame , de hecho va generar un wxEVT_CLOSE_WINDOW
  106.     //wxWidgets gestiona por defecto este evento
  107.     Close();
  108. }
  109.  
  110. void MiFrame::OnButtonOk(wxCommandEvent& event)//evento boton OK
  111. {
  112.     //Abre ventana informando ....
  113.     wxMessageBox( wxT("Has hecho click en el boton OK !") );
  114. }
  115.  
  116. //Constructor de MiFrame implementa un icono una barra status y menu
  117. //wxID_ANY le dice a Widgets de generar un identificador por su cuenta
  118. MiFrame::MiFrame():wxFrame(NULL,wxID_ANY,"Mi Ventana")
  119. {
  120.  
  121.     //Test wxBoxSizer wxPanel wxButton ....
  122.     //Crea un wxBoxSizer
  123.     wxBoxSizer* Box=new wxBoxSizer(wxHORIZONTAL);
  124.    
  125.     //Crea un wxPanel
  126.     wxPanel* Panel1=new wxPanel(this,wxEXPAND);    
  127.  
  128.     //Crea un boton OK y lo coloca en el centro de la ventana
  129.     wxButton* boton=new wxButton(Panel1,wxID_OK,wxT("1"));
  130.     wxButton* boton2=new wxButton(Panel1,wxID_OK,wxT("2"));    
  131.    
  132.     //Anade los bootones al sizer
  133.     Box->Add(boton);
  134.     Box->Add(boton2);
  135.    
  136.     //wxPanel (Panel1) utiliza el wxBoxSizer (Box)
  137.     Panel1->SetSizer(Box);    
  138.    
  139.     //Bind evento de RATON DOBLE CLICK
  140.     Panel1->Bind(wxEVT_LEFT_DCLICK,&MiFrame::EventosRaton,this);
  141. }
  142.  
  143. //Con wxEVT_LEFT_DCLICK abro un menu en modo PopUp
  144. void MiFrame::EventosRaton(wxMouseEvent& event){// Evento raton Doble Click      
  145.           //wxMessageBox( wxT("Raton ") );
  146.           if (!m_menu){
  147.             m_menu=new wxMenu;
  148.             m_menu->Append(wxID_OPEN,wxT("&Abre"));
  149.             m_menu->AppendSeparator ();
  150.             m_menu->Append(wxID_ABOUT,wxT("&Acerca de ")); 
  151.             m_menu->AppendSeparator ();
  152.             m_menu->Append(wxID_EXIT,wxT("&Salir"));             
  153.           }      
  154.           PopupMenu (m_menu,event.GetPosition());//El menu esta en el PopUp
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement