Advertisement
AntonioVillanueva

wxWidgets shaped frame terminator

Jun 21st, 2018
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.93 KB | None | 0 0
  1. //Test wxWidgets  de un shaped frame Antonio Villanueva
  2. //video link https://youtu.be/K6PFcKeOsOE
  3. // la imagen que debe cargar se llama terminator2.png y tiene fondo blanco
  4.  
  5. //g++ -Wall -static-libstdc++ -std=c++11 -Wunused-but-set-variable `wx-config --cxxflags` -o hola *.cpp `wx-config --libs`
  6. //Declara la clase aplicacion
  7.  
  8. //#include "imagen.xpm" //Imagen en formato xpm
  9. #include <iostream>
  10. #include "wx/wx.h"
  11. //#include <wx/app.h>
  12. //using namespace std;
  13.  
  14. wxString title ("Barra Superior");
  15.  
  16. //Declaraciones
  17.  
  18. //Cada aplicacion wxWidget define una clase derivada de wxApp
  19. class MiApp:public wxApp
  20. {
  21.     public:
  22.     //Llamado al inicio startup, es como el main en c
  23.     virtual bool OnInit();//main wxWidgets , mas abajo se implementa
  24. };
  25.  
  26. //Declaracion de la clase frame principal
  27.  
  28. //----------------------------------------------------------------------
  29.  
  30. class MiFrame:public wxFrame
  31. {
  32.     public:
  33.     //Constructor de la clase
  34.     MiFrame(const wxString& titulo);
  35.     MiFrame ();//Constructor por defecto
  36.     void OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt));
  37.     void SetWindowShape ();
  38.     void OnMouseMove(wxMouseEvent& evt);
  39.     void OnPaint(wxPaintEvent & evt);
  40.        
  41.     private:
  42.     bool m_hasShape;
  43.     wxBitmap m_bmp;
  44.     wxPoint m_delta;
  45.  
  46.     /*Macro para informar a wxWidgets de la gestion de eventos
  47.     *Declara la tabla de eventos en esta clase ,mas abajo
  48.     * la implemento entre BEGIN_ y END_EVENT_TABLE
  49.     */
  50.  
  51.     DECLARE_EVENT_TABLE()
  52. };
  53.  
  54. //----------------------------------------------------------------------
  55.  
  56. /*Implementacion , MiApp
  57. *Cuando se crea el objeto MiApp se asigna a la variable global wxTheApp
  58. * pero mejor que hacer un CAST emplear el MACRO  DECLARE_APP despues de
  59. * la declaracion de la clase , wxGetApp retorna una ref. al objeto MiApp
  60. */
  61. DECLARE_APP(MiApp)
  62.  
  63. //Macro que Proporciona a wxWidgets los medios de crear el objeto MiApp
  64. IMPLEMENT_APP(MiApp)
  65.  
  66. //----------------------------------------------------------------------
  67.  
  68. //Implementacion OnInit,Inicializa la aplicacion
  69.  
  70. bool MiApp::OnInit()
  71. {
  72.     //Crea la ventana principal , una instancia de nuestra clase MiFrame
  73.     //El titulo lo pasamos al constructor envuelto en el macro wxT
  74.     //macro de conversion de strings y char al tipo apropiado
  75.     //MiFrame *frame=new MiFrame(wxT("Titulo Mini wxWidgets"));
  76.     MiFrame *frame=new MiFrame();
  77.        
  78.     //Mostrar la ventana
  79.     frame->Show(true);
  80.    
  81.     //Arranca el bucle de eventos
  82.     return true ;//Si false limpia sus estructuras y sale
  83. }
  84.  
  85. //----------------------------------------------------------------------
  86.  
  87. //Tabla de eventos para MiFrame DECLARE_EVENT_TABLE() en MiFrame
  88.  
  89. //Eventos para un "shaped" wxFrame
  90. BEGIN_EVENT_TABLE(MiFrame,wxFrame)
  91.     EVT_MOTION(MiFrame::OnMouseMove)
  92.     EVT_PAINT(MiFrame::OnPaint)
  93. #ifdef __WXGTK__
  94.     EVT_WINDOW_CREATE(MiFrame::OnWindowCreate)
  95. #endif
  96. END_EVENT_TABLE()
  97.  
  98.  
  99. //Constructor de MiFrame implementa un icono una barra status y menu
  100. //wxID_ANY le dice a Widgets de generar un identificador por su cuenta
  101. MiFrame::MiFrame():wxFrame( (wxFrame*)NULL,wxID_ANY,wxEmptyString,
  102.                         wxDefaultPosition,wxSize(250,300),
  103.                          wxFRAME_SHAPED
  104.                         | wxSIMPLE_BORDER
  105.                         | wxFRAME_NO_TASKBAR
  106.                         | wxSTAY_ON_TOP
  107.                     )
  108. {
  109.     m_hasShape=false;
  110.    
  111.     //En este caso he cogido una imagen de terminator ;)
  112.    
  113.     m_bmp= wxBitmap(wxT("terminator2.png"),wxBITMAP_TYPE_PNG);
  114.     SetSize(wxSize(m_bmp.GetWidth(),m_bmp.GetHeight()));
  115.    
  116.     #ifndef __WXGTK__
  117.     SetWindowShape();
  118.     #endif
  119. }                  
  120.  
  121.  
  122. void MiFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt)){
  123.     SetWindowShape();
  124. }
  125.  
  126. void MiFrame::SetWindowShape()
  127. {
  128.     wxRegion region(m_bmp,*wxWHITE);
  129.     m_hasShape=SetShape(region);
  130. }
  131.  
  132. void MiFrame::OnMouseMove(wxMouseEvent& evt)
  133. {
  134.     wxPoint pt=evt.GetPosition();
  135.     if (evt.Dragging() && evt.LeftIsDown())
  136.     {
  137.         wxPoint pos=ClientToScreen(pt);
  138.         Move(wxPoint(pos.x -m_delta.x,pos.y-m_delta.y));   
  139.     }
  140. }
  141. void MiFrame::OnPaint(wxPaintEvent& evt)
  142. {
  143.     wxPaintDC dc (this);
  144.     dc.DrawBitmap(m_bmp,0,0,true);
  145.    
  146.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement