Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Test wxWidgets de un shaped frame Antonio Villanueva
- //video link https://youtu.be/K6PFcKeOsOE
- // la imagen que debe cargar se llama terminator2.png y tiene fondo blanco
- //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 "imagen.xpm" //Imagen en formato xpm
- #include <iostream>
- #include "wx/wx.h"
- //#include <wx/app.h>
- //using namespace std;
- wxString title ("Barra Superior");
- //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(const wxString& titulo);
- MiFrame ();//Constructor por defecto
- void OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt));
- void SetWindowShape ();
- void OnMouseMove(wxMouseEvent& evt);
- void OnPaint(wxPaintEvent & evt);
- private:
- bool m_hasShape;
- wxBitmap m_bmp;
- wxPoint m_delta;
- /*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(wxT("Titulo Mini wxWidgets"));
- MiFrame *frame=new MiFrame();
- //Mostrar la ventana
- frame->Show(true);
- //Arranca el bucle de eventos
- return true ;//Si false limpia sus estructuras y sale
- }
- //----------------------------------------------------------------------
- //Tabla de eventos para MiFrame DECLARE_EVENT_TABLE() en MiFrame
- //Eventos para un "shaped" wxFrame
- BEGIN_EVENT_TABLE(MiFrame,wxFrame)
- EVT_MOTION(MiFrame::OnMouseMove)
- EVT_PAINT(MiFrame::OnPaint)
- #ifdef __WXGTK__
- EVT_WINDOW_CREATE(MiFrame::OnWindowCreate)
- #endif
- END_EVENT_TABLE()
- //Constructor de MiFrame implementa un icono una barra status y menu
- //wxID_ANY le dice a Widgets de generar un identificador por su cuenta
- MiFrame::MiFrame():wxFrame( (wxFrame*)NULL,wxID_ANY,wxEmptyString,
- wxDefaultPosition,wxSize(250,300),
- wxFRAME_SHAPED
- | wxSIMPLE_BORDER
- | wxFRAME_NO_TASKBAR
- | wxSTAY_ON_TOP
- )
- {
- m_hasShape=false;
- //En este caso he cogido una imagen de terminator ;)
- m_bmp= wxBitmap(wxT("terminator2.png"),wxBITMAP_TYPE_PNG);
- SetSize(wxSize(m_bmp.GetWidth(),m_bmp.GetHeight()));
- #ifndef __WXGTK__
- SetWindowShape();
- #endif
- }
- void MiFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt)){
- SetWindowShape();
- }
- void MiFrame::SetWindowShape()
- {
- wxRegion region(m_bmp,*wxWHITE);
- m_hasShape=SetShape(region);
- }
- void MiFrame::OnMouseMove(wxMouseEvent& evt)
- {
- wxPoint pt=evt.GetPosition();
- if (evt.Dragging() && evt.LeftIsDown())
- {
- wxPoint pos=ClientToScreen(pt);
- Move(wxPoint(pos.x -m_delta.x,pos.y-m_delta.y));
- }
- }
- void MiFrame::OnPaint(wxPaintEvent& evt)
- {
- wxPaintDC dc (this);
- dc.DrawBitmap(m_bmp,0,0,true);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement