Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Dibujandoen wxWidgets con wxPaintDC y desde wxMemoryDC Antonio Villanueva segura
- //g++ -Wall -static-libstdc++ -std=c++11 -Wunused-but-set-variable `wx-config --cxxflags` -o hola *.cpp `wx-config --libs`
- //Declara la clase aplicacion
- #include <iostream>
- #include "wx/wx.h"
- #include <wx/popupwin.h>
- #include <wx/menu.h> //menu en el frame
- #include <wx/event.h>
- #include <wx/pen.h> //lapiz
- #include <wx/dcmemory.h>
- #include <wx/sizer.h>
- #include <wx/button.h>
- #include <wx/dc.h>
- #include <wx/dcbuffer.h>
- //using namespace std;
- //Declaraciones
- //Cada aplicacion wxWidget define una clase derivada de wxApp
- class MiApp:public wxApp
- {
- public:
- //Llamado al inicio startup, es como el main en c
- virtual bool OnInit();//main wxWidgets , mas abajo se implementa
- };
- //Declaracion de la clase frame principal
- //----------------------------------------------------------------------
- class MiFrame:public wxFrame
- {
- public:
- //Constructor de la clase
- MiFrame();
- void CreaCuadrado (wxCommandEvent& event);//Crea un cuadrado directo
- void CreaDesdeMem (wxCommandEvent& event);//Dibuja desde ma memoria !!
- // "event handlers" , gestion de evento
- void EnMovimiento (wxMouseEvent& event);//Evento raton ,para pintar ..
- private:
- wxMenu* m_menu;//Crea menu ..
- wxPanel* Panel1;
- wxPanel* Panel2;
- wxPanel* Panel3;//Crea un wxPanel
- /*Macro para informar a wxWidgets de la gestion de eventos
- *Declara la tabla de eventos en esta clase ,mas abajo
- * la implemento entre BEGIN_ y END_EVENT_TABLE
- */
- DECLARE_EVENT_TABLE()
- };
- //----------------------------------------------------------------------
- /*Implementacion , MiApp
- *Cuando se crea el objeto MiApp se asigna a la variable global wxTheApp
- * pero mejor que hacer un CAST emplear el MACRO DECLARE_APP despues de
- * la declaracion de la clase , wxGetApp retorna una ref. al objeto MiApp
- */
- DECLARE_APP(MiApp)
- //Macro que Proporciona a wxWidgets los medios de crear el objeto MiApp
- IMPLEMENT_APP(MiApp)
- //----------------------------------------------------------------------
- //Implementacion OnInit,Inicializa la aplicacion
- bool MiApp::OnInit()
- {
- //Crea la ventana principal , una instancia de nuestra clase MiFrame
- //El titulo lo pasamos al constructor envuelto en el macro wxT
- //macro de conversion de strings y char al tipo apropiado
- MiFrame *frame=new MiFrame();
- //Mostrar la ventana
- frame->Show(true);
- //Arranca el bucle de eventos
- return true ;//Si false limpia sus estructuras y sale
- }
- //----------------------------------------------------------------------
- wxWindowIDRef ID_BUTTON1=wxWindow::NewControlId();
- wxWindowIDRef ID_BUTTON2=wxWindow::NewControlId();
- //Tabla de eventos para MiFrame DECLARE_EVENT_TABLE() en MiFrame
- //Deteccion de los clicks de raton con wxID_ABOUT y wxID_EXIT
- //Que se dirigen a MiFrame::OnAbout y OnQuit
- BEGIN_EVENT_TABLE ( MiFrame, wxFrame)
- // EVT_MOTION(MiFrame::EnMovimiento) //Evento raton en movimiento
- EVT_BUTTON(ID_BUTTON1,MiFrame::CreaCuadrado)//Evento boton EVT_BUTTON(id, func):
- EVT_BUTTON(ID_BUTTON2,MiFrame::CreaDesdeMem )//Evento boton EVT_BUTTON(id, func):
- END_EVENT_TABLE()
- //Constructor de MiFrame
- MiFrame::MiFrame():wxFrame(NULL,wxID_ANY,"Mi Ventana")
- {
- //Crea un wxPanel
- Panel1=new wxPanel(this,wxEXPAND);
- //Sizer
- wxBoxSizer* horizontal = new wxBoxSizer(wxHORIZONTAL);//sizer Horizontal
- //Anade Sizer al wxPanel
- Panel1->SetSizer(horizontal);
- //Crea boton y lo anade al wxSizer horizontal en el wxPanel
- wxButton* boton1=new wxButton(Panel1,ID_BUTTON1,wxT("cuadrado"));
- horizontal->Add(boton1,wxEXPAND);
- //Crea 2 boton y lo anade al wxSizer horizontal en el wxPanel
- wxButton* boton2=new wxButton(Panel1,ID_BUTTON2,wxT("wxMemory"));
- horizontal->Add(boton2,wxEXPAND);
- //Aqui ligamos los eventos del raton en mov. al wxPanel !!!
- Panel1->Bind(wxEVT_MOTION,&MiFrame::EnMovimiento,this);
- }
- void MiFrame::EnMovimiento (wxMouseEvent& event){//Evento raton ...
- // wxMessageBox( wxT("En movimiento !") );
- if (event.Dragging()){//Mueve con boton apretado
- wxClientDC dc(Panel1);//Crea un wxClient sobre MiFrame
- wxPen lapiz(wxT ("RED"),1);//Crea un lapiz rojo 1
- dc.SetPen(lapiz);//wxClient utiliza el lapiz
- dc.DrawPoint(event.GetPosition());//Dibuja un punto desde la posicion del evento
- dc.SetPen(wxNullPen);//anula lapiz del wxClient
- }
- }
- void MiFrame::CreaCuadrado (wxCommandEvent& event){
- wxPaintDC dc(Panel1);// wxBufferedPaintDC o wxPaintDC
- dc.SetPen(*wxBLACK_PEN);
- dc.SetBrush(*wxRED_BRUSH);
- wxSize tamano=GetClientSize();
- //Tamano del rectangulo
- wxCoord ancho=100,alto=50;
- //Centrar el rectangulo
- int x=wxMax(0,(tamano.x -ancho)/2);
- int y=wxMax(0,(tamano.y-alto)/2);
- //Dibuja el rectangulo
- wxRect rectToDraw(x,y,ancho,alto);
- //if (IsExposed(rectToDraw)){//Returns true if the given point or rectangle area has been exposed since the last repaint.
- dc.DrawRectangle(rectToDraw);
- //}
- }
- //Dibuja desde ma memoria , no directamente !!!
- void MiFrame::CreaDesdeMem (wxCommandEvent& event){
- wxMemoryDC memDC;//Dispositivo de memoria
- wxBitmap bitmap(50,50);//wxBitmap tamano ...
- memDC.SelectObject(bitmap);//Seleccionamos el wxBitmap en la memoria
- memDC.SetBackground(*wxLIGHT_GREY_BRUSH);//Color de Fondo
- memDC.Clear();//Limpia
- memDC.SetPen(*wxBLUE_PEN);//Color lapiz
- memDC.SetBrush(*wxTRANSPARENT_BRUSH);
- memDC.DrawRectangle(wxRect(20,20,20,20));//Dibuja un rectangulo
- memDC.SelectObject(wxNullBitmap);//memoria apunta a nada ...
- wxPaintDC dc(Panel1);//wxPaintDC Donde vamos a dibujar ...
- dc.DrawBitmap(bitmap,GetClientSize().x/2,GetClientSize().y/2,true);//Vuelvo el wxBitmap anterior
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement