Advertisement
AntonioVillanueva

Dibujando formas geometricas en wxWidgets

Jul 11th, 2018
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | None | 0 0
  1. //Dibujando formas en wxWidgets Antonio Villanueva segura
  2. //g++ -Wall -static-libstdc++ -std=c++11 -Wunused-but-set-variable `wx-config --cxxflags` -o hola *.cpp `wx-config --libs`
  3. //Declara la clase aplicacion
  4.  
  5. #include <iostream>
  6. #include "wx/wx.h"
  7. #include <wx/popupwin.h>
  8. #include <wx/menu.h> //menu en el frame
  9. #include <wx/event.h>
  10. #include <wx/pen.h> //lapiz
  11. #include <wx/dcmemory.h>
  12. #include <wx/sizer.h>
  13. #include <wx/button.h>
  14. #include <wx/dc.h>
  15. #include <wx/dcbuffer.h>
  16. #include <wx/dcclient.h>
  17. #include <wx/font.h>
  18. //using namespace std;
  19.  
  20. //Declaraciones
  21.  //Cada aplicacion wxWidget define una clase derivada de wxApp
  22. class MiApp:public wxApp
  23. {
  24.     public:
  25.     //Llamado al inicio startup, es como el main en c
  26.     virtual bool OnInit();//main wxWidgets , mas abajo se implementa
  27.    
  28. };
  29.  
  30. //Declaracion de la clase frame principal
  31.  
  32. //----------------------------------------------------------------------
  33.  
  34. class MiFrame:public wxFrame
  35. {
  36.     public:
  37.     //Constructor de la clase
  38.     MiFrame();
  39.    
  40.     private:
  41.     void AccionBoton(wxCommandEvent& event);////Accion para el evento de boton    
  42.     void DibujaForma(wxDC& dc);
  43.     wxPanel* Panel1;
  44.     /*Macro para informar a wxWidgets de la gestion de eventos
  45.     *Declara la tabla de eventos en esta clase ,mas abajo
  46.     * la implemento entre BEGIN_ y END_EVENT_TABLE
  47.     */
  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();
  73.    
  74.     //Mostrar la ventana
  75.     frame->Show(true);
  76.    
  77.     //Arranca el bucle de eventos
  78.     return true ;//Si false limpia sus estructuras y sale
  79. }
  80.  
  81. //----------------------------------------------------------------------
  82. wxWindowIDRef ID_BUTTON1=wxWindow::NewControlId();
  83. //Tabla de eventos para MiFrame DECLARE_EVENT_TABLE() en MiFrame
  84. //Deteccion de los clicks de raton con wxID_ABOUT y wxID_EXIT
  85. //Que se dirigen a MiFrame::OnAbout y OnQuit
  86. BEGIN_EVENT_TABLE ( MiFrame, wxFrame)
  87.     // EVT_MOTION(MiFrame::EnMovimiento) //Evento raton en movimiento
  88.     EVT_BUTTON(ID_BUTTON1,MiFrame::AccionBoton)//Evento boton EVT_BUTTON(id, func):
  89. END_EVENT_TABLE()
  90.  
  91. //Constructor de MiFrame
  92. MiFrame::MiFrame():wxFrame(NULL,wxID_ANY,"Mi Ventana")
  93. {
  94.     //Crea un wxPanel
  95.     Panel1=new wxPanel(this,wxEXPAND);
  96.    
  97.     //Sizer  
  98.     wxBoxSizer* horizontal = new wxBoxSizer(wxHORIZONTAL);//sizer Horizontal
  99.    
  100.     //Anade Sizer al wxPanel
  101.     Panel1->SetSizer(horizontal);
  102.  
  103.     //Crea boton y lo anade al wxSizer horizontal en el wxPanel
  104.     wxButton* boton1=new wxButton(Panel1,ID_BUTTON1,wxT("BOTON"));
  105.     horizontal->Add(boton1,wxEXPAND);
  106.    
  107.     //Aqui ligamos los eventos del raton en mov. al wxPanel !!!
  108.     //Panel1->Bind(wxEVT_MOTION,&MiFrame::AccionBoton,this);
  109. }
  110.  
  111. void MiFrame::AccionBoton(wxCommandEvent& event){//Accion para el evento de boton
  112.         wxClientDC dc (Panel1);            
  113.         dc.SetPen(wxPen(*wxRED_PEN));//Lapiz rojo
  114.         dc.SetBrush(wxBrush(*wxGREEN));//Fondo verde       
  115.         DibujaForma(dc);
  116. }
  117. void MiFrame::DibujaForma(wxDC& dc){
  118.     //wxMessageBox ("Test Accion");
  119.     dc.DrawPoint(50,50);//Punto
  120.     dc.DrawLine(50,50,100,100);//Linea
  121.     dc.DrawRectangle(60,60,100,100);//Rectangulo de fondo wxBrush
  122.     dc.DrawRoundedRectangle(80,80,100,110,30);//Rectangulo redondeado 30
  123.     dc.DrawCircle(90,90,30);//Circulo
  124.     dc.DrawEllipse(wxRect(130,130,110,25));//Elipse
  125.    
  126.     //DrawArc (wxCoord xStart, wxCoord yStart, wxCoord xEnd, wxCoord yEnd, wxCoord xc, wxCoord yc)
  127.    
  128.     int x=90;int y=90;int radio= 50;
  129.     dc.DrawArc(x-radio,y,x+radio,y,x,y-radio);//Arco
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement