IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

comment faire une JOLIE interface


Sujet :

wxWidgets

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut comment faire une JOLIE interface
    Bonjour

    je suis débutante sur wxWidget et j'aurais des questions :
    comment faire une jolie interface :: genre avoir un fond qui ne soit pas uni (faire les couleurs ca j'ai vu avec wxColor)...j'ai pensé à mettre une image en fond mais on voit le raffraichissement à chaque Onpaint dc c pas top !!! De plus quand on agrandi la fenetre ...ca se voit!!

    voila car là j'ai que de strucs moches et j'aime pas!!!

    merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    voici un exemple fonctionnel d'image de fond sans effet clignotant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    #include "wx/wxprec.h"
     
    #ifdef __BORLANDC__
        #pragma hdrstop
    #endif
     
    #ifndef WX_PRECOMP
        #include "wx/wx.h"
    #endif
     
    #include <wx/dcbuffer.h>
    #include <wx/image.h>
     
    #define MNU_QUIT    10200
     
    class MyApp : public wxApp
    {
       public:
     
          virtual bool OnInit();
    };
     
    class MyFrame : public wxFrame
    {
       DECLARE_EVENT_TABLE()
     
       public:
          MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
                  long style = wxDEFAULT_FRAME_STYLE);
     
       protected:
     
          void CreateControls();
     
          void OnQuit(wxCommandEvent& event);
          void OnSize(wxSizeEvent& event);
          void OnPaint(wxPaintEvent& event);
          void OnEraseBackground(wxEraseEvent& event);
     
       private:
     
          wxImage m_Image;
    };
     
    BEGIN_EVENT_TABLE(MyFrame, wxFrame)
       EVT_MENU(MNU_QUIT,  MyFrame::OnQuit)
       EVT_PAINT(MyFrame::OnPaint)
       EVT_ERASE_BACKGROUND(MyFrame::OnEraseBackground)
       EVT_SIZE(MyFrame::OnSize)
    END_EVENT_TABLE()
     
    IMPLEMENT_APP(MyApp)
     
    bool MyApp::OnInit()
    {
       wxImage::AddHandler(new wxPNGHandler);
       MyFrame *frame = new MyFrame(_T("Minimal wxWindows App"),
                                    wxPoint(50, 50), wxSize(450, 340));
       frame->Show(TRUE);
       return TRUE;
    }
     
    MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
                     long style) : wxFrame(NULL, -1, title, pos, size, style)
    {
       wxMenu *menuFile = new wxMenu;
       menuFile->Append(MNU_QUIT, _T("E&xit\tAlt-X"), _T("Quit this program"));
       wxMenuBar *menuBar = new wxMenuBar();
       menuBar->Append(menuFile, _T("&File"));
       SetMenuBar(menuBar);
       m_Image = wxImage(_T("backgrnd.png"), wxBITMAP_TYPE_PNG);
     
       CreateControls();
       CreateStatusBar(2);
       SetStatusText(_T("Welcome to wxWindows!"));
    }
     
    void MyFrame::CreateControls()
    {
       wxStaticText* staticText;
       wxTextCtrl* textCtrl;
     
       staticText = new wxStaticText(this, wxID_STATIC, _("Static text"),
                                     wxPoint(50, 50), wxDefaultSize, 0);
       textCtrl = new wxTextCtrl(this, 100, wxEmptyString, wxPoint(150, 45),
                                 wxDefaultSize, 0);
       staticText = new wxStaticText(this, wxID_STATIC, _("Static text"),
                                     wxPoint(50, 100), wxDefaultSize, 0);
       textCtrl = new wxTextCtrl(this, 110, wxEmptyString, wxPoint(150, 95),
                                 wxDefaultSize, 0);
    }
     
    void MyFrame::OnSize(wxSizeEvent& event)
    {
    #if defined(__WXUNIVERSAL__)
       // this is also necessary to update the context on some platforms
       wxFrame::OnSize(event);
    #endif
       event.Skip();
       Refresh();
    }
     
    void MyFrame::OnPaint(wxPaintEvent& event)
    {
       wxRect   rect(GetClientSize());
       wxBufferedPaintDC dcPaint(this);
     
       wxBitmap bitmap(m_Image.Scale(rect.GetWidth(), rect.GetHeight()));
       dcPaint.DrawBitmap(bitmap, rect.x, rect.y, false);
     
    }
     
    void MyFrame::OnEraseBackground(wxEraseEvent& event) { /* Do nothing */ }
     
    void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)){Close(TRUE);}
    Bon je n'ai pas plus de temps pour t'expliquer actuellement, mais le code est assez simple.

    Cordialement

    Fred Cailleau-Lepetit

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    merci pour le coup du fond non clignotant mais le programme rame un peu avec l'image et c'est moyen. Par contree st ce que tu sais comment chnager la couleur d'une barre de menu ou encore la couleur du haut de la fenetre (par défaut bleu!)

    merci d'avance

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par estelle84
    merci pour le coup du fond non clignotant mais le programme rame un peu avec l'image et c'est moyen.
    Qu'entend tu par "rame un peu"?
    J'ai transformé le programme au dessus pour qu'il utilise une image de grosse taille (3888*2592 soit 10 méga pixels). Et il fonctionne a vitesse tout a fait normale. On peut bien sur améliorer en réduisant dès le chargement la taille de l'image à la taille de l'écran.
    Tu utilise quoi comme machine?
    Je n'ai pas pourtant un foudre de guerre, juste un p4 à 3GHz avec 1Go de RAM et une carte graphique tout à fait banale : Radéon X300se.

    Cordialement

    Fred Cailleau-Lepetit

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Bonjour, merci pour le code fourni, j'essaie de le mettre en place mais je n'y arrive pas !
    Voici ce que je fais :

    J'ai créer une classe CMainFrame qui derive d'une wxMDIParentFrame.

    Cette Fenetre contient un objet image membre privé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private:
    	wxImage m_o_background_image ;
    J'initialise ce dernier dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	m_o_background_image = wxImage( _T( "Images\\z.bmp" ), wxBITMAP_TYPE_BMP);
    Jai utilisé un handler par defaut de type Bitmap.
    Je tiens a préciser que je n'ai pas utilisé pour la création de la Frame l'option FULL_REPAINT_ON_RESIZE mais ca ne change rien pour mon probleme !

    Maintenant je créé une fonction OnPaint() que j'attache a un Handler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void CMainFrame::OnPaint( wxPaintEvent& WXUNUSED(event) )
    {
    	wxRect				loc_o_rect( GetClientSize() );
    	wxPaintDC			loc_o_dcPaint(this);
     
    	if ( loc_o_rect.GetWidth() > 0 && loc_o_rect.GetHeight() > 0 )
    	{
    		wxBitmap loc_o_bitmap( m_o_background_image.Scale( loc_o_rect.GetWidth(), loc_o_rect.GetHeight()));
    		loc_o_dcPaint.DrawBitmap( loc_o_bitmap, loc_o_rect.x, loc_o_rect.y, false);
    	}
    }
    J'ai tracé, et a chaque cycle je passe bien dans cette portion de code, mais rien ne s'affiche jamais dans ma fenetre, c'est a dire qu'elle reste définitivement grise et sans image de fond. Qu'ai-je oublié ?

    Merci de votre aide.

    A bientot.
    Alexandre.

Discussions similaires

  1. Comment faire une interface pour PROLOG
    Par david-santon31 dans le forum Sujets
    Réponses: 1
    Dernier message: 12/05/2018, 02h36
  2. Comment faire une interface GUI comme celle ci ? (voir sujet)
    Par Invité dans le forum Interfaces Graphiques
    Réponses: 54
    Dernier message: 08/07/2009, 16h24
  3. Comment faire une interface de ce type....
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/04/2007, 13h50
  4. [Débutant] Comment faire une interface graphique ?
    Par hanane78 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 29/12/2006, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo