wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Scrollbar
Conversation : Scrollbar
20-11-2007 20:10:58  Scrollbar #1
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Salut,
Voilà mon problème, en faite j'ai une fenetre (la principale) dérivée de wxFrame et j'ai mit les scrollbar Horizontale et Verticale grace au argument du constructeur de la fenetre (bref...) mais il n'y a pas moyen de les faire bouger ce que je veut dire par là c'est qu'en faite j'ai un menu nouveau j'entre des valeurs en pixel afin de donner une taile à la fenetre(enfin une carte plutot) mais comme ça ne peut pas aparaître en entier sur l'ecran (genre 10000*10000 par exemple) et bien je veut uiliser les scrollbar mais voilà mon problème c'est comment les faire fonctionner et aussi comment créer une fenetre de cette taille je sais pas si je me suis fait comprendre mais si vous ne comprenez pas redemendé moi.

Merci à plus.
20-11-2007 20:29:22  Re: Scrollbar #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

En fait, tu n'as qu'à utiliser une wxScrolledWindow, dans laquelle tu mets un wxBoxSizer, dans lequel tu mets un wxPanel, sur lequel tu dessinnes ta carte.
Normalement, ça devrait se gérer tout seul.

Jettes un coup d'oeil à ce snippet, c'est un peu le principe.

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
20-11-2007 22:26:52  Re: Scrollbar #3
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
C'est un peu compliqué dans le sens ou ça m'oblige à refaire tout mes fonction ...
20-11-2007 22:32:53  Re: Scrollbar #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Elle se présente comment ta carte ?

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
20-11-2007 22:44:53  Re: Scrollbar #5
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
En faite déja faut savoir que la carte je veut la coller dans le fenetre principale enfin c'est pas une obligation mais sa m'evite de crée une fenetre à part et donc pour le moment ça ressemble à ça :

http://i209.photobucket.com/albums/bb283/warzer/aperuc.jpg

et moi je veut rajouter un scrollbar pour pouvoir désendre plus bas te aller plus à droite, en fonction de valeur récupéré dans Fichier->Nouveau bref
20-11-2007 23:04:11  Re: Scrollbar #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Oups, petit problème d'affichage avec les images de grande taille :/ => Résolu

Comment tu la dessinnes sur la fenêtre ?

Dernière modification par Xaviou (21-11-2007 15:35:51)


Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
20-11-2007 23:18:04  Re: Scrollbar #7
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Grace à la petit fenetre que tu voit sur la carte (terrains en autres) c'est des bouton bref je clique dessus sa fait tout un tas de truc puis au finale je clique dans la fenetre et les image se colle dedans mais j'ai soulevé un autre problème par la même occasion c'est que si parexemple je veut mettre de l'eau par dessus l'herbe pour recourvrivre et ben je ne pe plus coller l'eau idem pour les arbres je ne peut pas les coller sur une texture d'herbe ou autre.
sinon ma fonction pour coller au cas où :

Code wxWidgets:

 
void EditeurApp::cliqueSurLaCarte(wxMouseEvent& event)
{
    wxString nomDuDossier;
    //On extrait la premiere lettre de la chaine
    wxString typeImage = numeroImg.Left(1);
    //on extrait le reste
    wxString FinChaine = numeroImg.AfterFirst(*typeImage);
    //Grace à la premiere lettre non sais s'il sagit d'un terrain d'un decor ou autre.
 
    if(typeImage == _T("T")) nomDuDossier = _T("./textures/terrains/");
    else if(typeImage == _T("D")) nomDuDossier = _T("./textures/decors/");
    else if(typeImage == _T("C")) nomDuDossier = _T("./textures/creatures/");
    else if(typeImage == _T("P")) nomDuDossier = _T("./textures/personnages/");
    else return;    //Si clique dans aucune image en mémoire on quitte la fonction.
 
    //On crée le nom de l'image grace au flux.
    wxImage image;
    wxString nomImage = nomDuDossier << FinChaine << _T(".jpg");
    //Pour les test
    std::cout << _T("L'image Chargee est : ") << nomImage << std::endl;
 
    //On charge l'image en mémoire
    image.LoadFile(nomImage,wxBITMAP_TYPE_ANY);
    //On convertie l'image en bitmap
    wxBitmap imageBMP(image);
    //On recois la position du clique
    int x = event.GetX();
    int y = event.GetY();
    //On reçois la taille de l'image
    int h = imageBMP.GetHeight();
    int w = imageBMP.GetWidth();
    //On la colle à l'écran
 
    wxStaticBitmap *afficherImage;
    if(typeImage == _T("T"))
    {
        x -= (x % w);
        y -= (y % h);
    }
    else
    {
        x -= w / 2;
        y -= h / 2;
    }
    afficherImage = new wxStaticBitmap(this,-1,imageBMP, wxPoint(x,y),wxSize(w,h));
}
 
20-11-2007 23:24:12  Re: Scrollbar #8
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Tu créesun wxStaticBitmap à chaque clic ?
C'est un peu risqué:si tu tombes sur un malade du clic, il va te mettre 150 contrôles au cm2.
A mon avis, le plus simple, c'est de créer un maxi wxBitmap en mémoire de la taille de ta carte.
Ensuite, à chaque clic, tu "dessinnes" le terrain correspondant dans ce bitmap.
Comme ça, tu n'as besoin que d'un seul wxStaticBitmap, que tu ré-actualises à chaque changement

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
20-11-2007 23:45:39  Re: Scrollbar #9
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
J'ai pas tout comprit mais si tu le dit :p
Non en gros je crée un grand static et je colle mais comment ?enfin faudra que je regdarde ça ou que tu developpe legerement bon voilàa merci :)
----------
Comment je dessine une image sur un bitmap crée ( de cette façon :)

Code wxWidgets:

 
    m_CarteDim = new wxBitmap(w, h);
    if (m_CarteDim->IsOk())
        std::cout <<_T("Le bitmap est cree !") <<std::endl;
    else
       std::cout <<_T("Erreur lors de la création du bitmap !") <<std::endl;
 

Dernière modification par Warzer (21-11-2007 19:18:40)

21-11-2007 20:16:48  Re: Scrollbar #10
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Ben en fait, tu le sélectionnes avec un wxMemoryDC, et du coup, tu peux le manipuler avec les différentes méthodes de cette classe et de celles dont elle est dérivée, notamment wxDC.

Quand tu as fini tes gribouillages, tu libères le wxMemoryDC; et tu appliques le wxBitmap sur ton wxStaticBitmap, par exemple.

Code wxWidgets:

// Création du wxBitmap
m_CarteDim = new wxBitmap(w, h);
// Création du wxMemoryDC
wxMemoryDC mdc;
// Sélection du wxBitmap dans le wxMemoryDC
mdc.SelectObject(CarteDim);
// On peut maintenant commencer à dessiner sur le wxBitmap
// Par exemple, écrire du texte dessus
mdc.DrawText(_T("Coucou, c'est moi !"),10,10);
// On peut même copier une partie d'un autre wxBitmap sélectionné dans un autre wxMemoryDC
mdc.Blit(PositionX,PositionY,Largeur,Hauteur, &autreMemoryDC,xSource,ySource);
// A la fin, il ne faut pas oublier de libérer le wxBitmap
// en sélectionnant autre chose avec le wxMemoryDC
mdc.SelectObject(wxNullBitmap);
// Maintenant, on peut appliquer le wxBitmap sur un wxStaticBitmap
monStaticBitmap->SetBitmap(m_CarteDim);
 


Voilà, c'est aussi simple que ça

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
21-11-2007 20:57:42  Re: Scrollbar #11
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
J'ai fait comme ceci :

Code wxWidgets:

 
    afficherImg = new wxStaticBitmap(this,-1,m_CarteDim);
    //afficherImage = new wxStaticBitmap(this,-1,imageBMP, wxPoint(x,y),wxSize(w,h));
    mdc.SelectObject(m_CarteDim);
    mdc.DrawBitmap(imageBMP,x,y,true);
    mdc.SelectObject(wxNullBitmap);
    afficherImg->SetBitmap(m_CarteDim);
 


Mais ça ne amrche pas corectement je ne peut mettre qu'une seul image puis après impossible d'en mettre une autre ...
----------
Salut,
Je vais m'arracher les cheuveux je comprend vraiment pas comment faire déja j'ai réglé temporairement mon problème de ScrollBar donc du coup dans ma fenetre princiaple sa colle une wxScrolledWindow donc sa recouvre il reste le Menu en haut quoi bon c'était l'effet rechercher mais du coup je ne peut plus coller d'image dedans j'ai éssayer ta méthode Xaviou j'ai pas tout comprit sa marhe pas vraiement ^^
Donc en faite ma fonction qui est censé coller une image marche come ça :

Code wxWidgets:

 
void EditeurApp::cliqueSurLaCarte(wxMouseEvent& event)
{
    wxStaticBitmap *afficherImage;
    wxString nomDuDossier;
    //On extrait la premiere lettre de la chaine
    wxString typeImage = numeroImg.Left(1);
    //on extrait le reste
    wxString FinChaine = numeroImg.AfterFirst(*typeImage);
    //Grace à la premiere lettre non sais s'il sagit d'un terrain d'un decor ou autre.
 
    if(typeImage == _T("T")) nomDuDossier = _T("./textures/terrains/");
    else if(typeImage == _T("D")) nomDuDossier = _T("./textures/decors/");
    else if(typeImage == _T("C")) nomDuDossier = _T("./textures/creatures/");
    else if(typeImage == _T("P")) nomDuDossier = _T("./textures/personnages/");
    else return;    //Si clique dans aucune image en mémoire on quitte la fonction.
 
    //On crée le nom de l'image grace au flux.
    wxImage image;
    wxString nomImage = nomDuDossier << FinChaine << _T(".jpg");
    //Pour les test
    std::cout << _T("L'image Chargee est : ") << nomImage << std::endl;
 
    //On charge l'image en mémoire
    image.LoadFile(nomImage,wxBITMAP_TYPE_ANY);
    //On convertie l'image en bitmap
    wxBitmap imageBMP(image);
    //On recois la position du clique
    int x = event.GetX();
    int y = event.GetY();
    //On reçois la taille de l'image
    int h = imageBMP.GetHeight();
    int w = imageBMP.GetWidth();
    //On la colle à l'écran
 
 
    if(typeImage == _T("T"))
    {
        x -= (x % w);
        y -= (y % h);
    }
    else
    {
        x -= w / 2;
        y -= h / 2;
    }
    afficherImage = new wxStaticBitmap(m_FenCarte,m_carteFenID,imageBMP, wxPoint(x,y),wxSize(w,h));
}
 


Celle qui crée la fenetre wxScrolledWindow comme ça :

Code wxWidgets:

 
void EditeurApp::fiOuvrir(wxCommandEvent& WXUNUSED(event))
{
    int a = m_fenNouv->GetValueCaseHauteur();
    int b = m_fenNouv->GetValueCaseLargeur();
    int h = m_fenNouv->GetValuePixelHauteur();//x
    int w = m_fenNouv->GetValuePixelLargeur();//y
    std::cout <<_T("Colones : ") << a << _T(" case -> ") << h << _T(" pixel.") <<std::endl;
    std::cout <<_T("Rangees : ") << b << _T(" case -> ") << w << _T(" pixel.") <<std::endl;
 
    m_FenCarte = new FenCarte(this,m_carteFenID,wxPoint(0,0),this->GetVirtualSize(),5,5,w,h);
    m_FenCarte->Show(true);
    //Connect(this->GetId(), wxEVT_SIZE, (wxObjectEventFunction)&EditeurApp::OnsizeMap);
}
 


et la fenetre est crée comme ceci :

Code wxWidgets:

 
FenCarte::FenCarte(wxWindow *parent,
                    wxWindowID id,
                    const wxPoint& pos,
                    const wxSize& size,
                    int pixelsPerUnitX,
                    int pixelsPerUnitY,
                    int noUnitsX,
                    int noUnitsY) : wxScrolledWindow(parent,id,pos,size)
{
    basesizer = new wxBoxSizer(wxVERTICAL);
    SetScrollbars(pixelsPerUnitX, pixelsPerUnitY, noUnitsX, noUnitsY);
    SetSizer(basesizer);
}
 


afficherImage = new wxStaticBitmap(m_FenCarte,m_carteFenID,imageBMP,
9a c'est censé coller une image sur la fenetre crée non ?
Enfin bref si vous pouviez me donner un petit coup de main se serai cool merci ^^

Dernière modification par Warzer (23-11-2007 21:12:56)

24-11-2007 00:03:42  Re: Scrollbar #12
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.
Après quelques essais, j'ai enfin réussi à obtenir ce que tu veux.

Tout d'abord : la création de la fenêtre :
- Il faut créer un wxFrame classique
- Il faut lui ajouter une wxScrolledWindow en tant que contrôle (comme tu lui ajouterais un bouton, par exemple)
- Il faut ajouter le wxStaticBitmap à la wxScrolledWindow
- Penses bien à garder une copie des pointeurs vers ces contrôles (surtout celui du wxStaticbitmap) pour pouvoir les utiliser par la suite.

Ensuite, un autre point qui est gênant dans ton code : tu re-crées le wxBitmap à chaque clic, ce qui n'est pas bon.
Il faut en garder une copie en mémoire. Tu la modifies chaque fois que c'est nécessaire, et tu la ré-appliques sur le wxStaticBitmap

Pour pouvoir gérer le clic sur le wxStaticBitmap (afin de savoir où l'utilisateur a cliqué), je n'ai pas réussi à le faire autrement qu'evec une classe personnalisée, dérivée de wxStaticBitmap, et gérant l'événement "wxEVT_LEFT_UP". A ce moment là, tu appelles une méthode publique de ta fenêtre à laquelle tu passe le wxMouseEvent.

Voici ce que ça donne :
Tout d'abord, le header du wxStaticBitmap personnalisé :

Code wxWidgets:

#ifndef MYSTATICBITMAP_H_INCLUDED
#define MYSTATICBITMAP_H_INCLUDED
 
#include <wx/statbmp.h>
 
class MyStaticBitmap : public wxStaticBitmap
{
public:
    MyStaticBitmap(wxWindow *parent,wxWindowID id,const wxBitmap &bmp);
private:
    void OnClick(wxMouseEvent &event);
    DECLARE_EVENT_TABLE();
};
 
#endif // MYSTATICBITMAP_H_INCLUDED

Et son implémentation

Code wxWidgets:

#include "MyStaticBitmap.h"
#include "wxTestsFrame.h"
 
BEGIN_EVENT_TABLE(MyStaticBitmap,wxStaticBitmap)
    EVT_LEFT_UP(MyStaticBitmap::OnClick)
END_EVENT_TABLE();
 
MyStaticBitmap::MyStaticBitmap(wxWindow *parent,wxWindowID id,const wxBitmap &bmp)
: wxStaticBitmap(parent,id,bmp)
{
}
 
void MyStaticBitmap::OnClick(wxMouseEvent &event)
{
    wxTestsFrame* prnt=(wxTestsFrame*)GetGrandParent();
    prnt->OnMapClicked(event);
}


Pour le header de la frame :

Code wxWidgets:

#ifndef WXTESTSFRAME_H_INCLUDED
#define WXTESTSFRAME_H_INCLUDED
 
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif
 
#include <wx/scrolwin.h>
#include <wx/bitmap.h>
#include "MyStaticBitmap.h"
 
class wxTestsFrame: public wxFrame
{
public:
    wxTestsFrame(wxFrame *frame, const wxString& title);
    ~wxTestsFrame();
    void OnMapClicked(wxMouseEvent &event);
private:
    wxScrolledWindow *m_scrwnd;
    MyStaticBitmap *m_mapctrl;
    wxBitmap m_bmpmap,bmpitem;
};
 
 
#endif // WXTESTSFRAME_H_INCLUDED


Maintenant, le code de la frame :

Code wxWidgets:

 
#include "wxTestsFrame.h"
 
#include <wx/image.h>
#include <wx/bitmap.h>
 
wxTestsFrame::wxTestsFrame(wxFrame *frame, const wxString& title)
    : wxFrame(frame, -1, title)
{
    // On crée la wxScrolledWindow
    m_scrwnd=new wxScrolledWindow(this,-1);
    // On charge l'image de fond de la map
    wxInitAllImageHandlers();
    m_bmpmap.LoadFile(_T("background.jpg"),wxBITMAP_TYPE_JPEG);
    // On crée le contrôle wxStaticBitmap personnalisé
    m_mapctrl=new MyStaticBitmap(m_scrwnd,-1,m_bmpmap);
 
    m_scrwnd->SetScrollRate(5,5); // Pour mettre en marche les deux barres de scroll
    m_scrwnd->SetVirtualSize(m_bmpmap.GetWidth(),m_bmpmap.GetHeight());
    // Le bitmap utilisé pour les tests (qui sera dessinné à chaque clic)
    bmpitem.LoadFile(_T("element.jpg"),wxBITMAP_TYPE_JPEG);
}
 
// La méthode publique qui sera appelée par le contrôle wxStaticBitmap personnalisé
void wxTestsFrame::OnMapClicked(wxMouseEvent &event)
{
    // On sélectionne le bitmap avec un wxMemoryDC
    wxMemoryDC mdc(m_bmpmap);
    // On récupère la position du curseur
    wxPoint pt=event.GetPosition();
    // On dessinne l'élément sur la map
    mdc.DrawBitmap(bmpitem,pt.x,pt.y,true);
    // On libère le bitmap de la map en mémoire
    mdc.SelectObject(wxNullBitmap);
    // On met à jour le wxStaticBitmap personnalisé
    m_mapctrl->SetBitmap(m_bmpmap);
}
 


Voilà, c'est tout
Et surtout, ça marche

Il ne te reste plus qu'à adapter ça à ton cas, et le tour est joué...

Bonne chance, et @+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
24-11-2007 11:30:03  Re: Scrollbar #13
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Bon j'ai réussi à implanter temporairement je vais pofiner ça mais le truc c'est que dans je colle une image dans cette frame sachant qu'en faite j'ai crée un fond au lieu d'en charger un parceque qu'il a une valeur que doit rentrée dans une petit fenetre avec contrôle bref et donc quand je clique dessus pour coller un terrain ça rame quoi ^^ on dirai qu'il est obligé de recoller à chaque fois le fond noir enfin c'est bizard avec par dessus un terrain.
Comment y remedier en faisant une image plus petite (en poid) genre un jpg ?
ps: le fond est noir je sais pas pourqoi.
----------
Bon j'ai réussi à tout faire corectement ça marche niquel j'en ai même profiter pour comprendre les casts ^^(Merci xxltux) et donc il reste juste cette histoire que mon truc rame à chaque image que je colle un idée ?

Dernière modification par Warzer (24-11-2007 13:36:30)

24-11-2007 13:50:19  Re: Scrollbar #14
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Je sui pas sur qu'on parle la même langue lol

Itérer est humain, récurser est divin
24-11-2007 13:54:19  Re: Scrollbar #15
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Ta pas comprit ? bon je réexplique en faite je crée ma fenetre qui doit contenir ma carte avec une wxBitmap dedans (cette image et toute noir par défault et elle est de taille définie par l'utilisateur bref...) donc quand je colle mes image de terrain (ou autre) dedans l'écran avec cette image "scintille" enfin c'est pas le bon mot mais bon ... et donc ducoup tout rame quand je pose l'image dessus d'où celà peut il venir ?

Le code au faite :

Code wxWidgets:

 
#include "RpgCarteFrame.h"
 
 
RpgCarteFrame::RpgCarteFrame(wxFrame *frame, const wxString& title,int w, int h)
    : wxFrame(frame, -1, title)
{
    // On crée la wxScrolledWindow
    m_scrwnd=new wxScrolledWindow(this,-1);
    // On charge l'image de fond de la map
    wxInitAllImageHandlers();
    m_bmpmap = wxBitmap(w,h);
    //m_bmpmap.LoadFile(_T("background.jpg"),wxBITMAP_TYPE_JPEG);
    // On crée le contrôle wxStaticBitmap personnalisé
    m_mapctrl=new RpgStaticBitmap(m_scrwnd,-1,m_bmpmap);
 
    m_scrwnd->SetScrollRate(5,5); // Pour mettre en marche les deux barres de scroll
    m_scrwnd->SetVirtualSize(m_bmpmap.GetWidth(),m_bmpmap.GetHeight());
}
 
RpgCarteFrame::~RpgCarteFrame()
{
 
}
 
// La méthode publique qui sera appelée par le contrôle wxStaticBitmap personnalisé
void RpgCarteFrame::OnMapClicked(wxMouseEvent &event)
{
    EditeurApp* prnt=(EditeurApp*)GetParent();
    wxString numeroImg =  prnt->GetImageType();
    std::cout << _T("Dans La carte : ") <<numeroImg << std::endl;
    wxString nomDuDossier;
    //On extrait la premiere lettre de la chaine
    wxString typeImage = numeroImg.Left(1);
    //on extrait le reste
    wxString FinChaine = numeroImg.AfterFirst(*typeImage);
    //Grace à la premiere lettre non sais s'il sagit d'un terrain d'un decor ou autre.
 
    if(typeImage == _T("T")) nomDuDossier = _T("./textures/terrains/");
    else if(typeImage == _T("D")) nomDuDossier = _T("./textures/decors/");
    else if(typeImage == _T("C")) nomDuDossier = _T("./textures/creatures/");
    else if(typeImage == _T("P")) nomDuDossier = _T("./textures/personnages/");
    else return;    //Si clique dans aucune image en mémoire on quitte la fonction.
 
    //On crée le nom de l'image grace au flux.
    wxImage image;
    wxString nomImage = nomDuDossier << FinChaine << _T(".jpg");
    //Pour les test
    std::cout << _T("L'image Chargee est : ") << nomImage << std::endl;
    //On charge l'image en mémoire
    image.LoadFile(nomImage,wxBITMAP_TYPE_ANY);
    if(typeImage == _T("D")) image.SetMaskColour(115,109,181);
    else if(typeImage == _T("C") or typeImage == _T("P")) image.SetMaskColour(191,123,200);
 
    //On convertie l'image en bitmap
    wxBitmap bmpitem(image);
    // On sélectionne le bitmap avec un wxMemoryDC
    wxMemoryDC mdc(m_bmpmap);
 
    //On recois la position du clique
    int x = event.GetX();
    int y = event.GetY();
    //On reçois la taille de l'image
    int h = bmpitem.GetHeight();
    int w = bmpitem.GetWidth();
    //On la colle à l'écran
    //On calcule la position ou elle sera coller.
    if(typeImage == _T("T"))
    {
        x -= (x % w);
        y -= (y % h);
    }
    else
    {
        x -= w / 2;
        y -= h / 2;
    }
 
    // On dessinne l'élément sur la map
    mdc.DrawBitmap(bmpitem,x,y,true);
    // On libère le bitmap de la map en mémoire
    mdc.SelectObject(wxNullBitmap);
    // On met à jour le wxStaticBitmap personnalisé
    m_mapctrl->SetBitmap(m_bmpmap);
}
 

Dernière modification par Warzer (24-11-2007 13:55:36)

24-11-2007 17:25:08  Re: Scrollbar #16
blend (Membre)
Inscrit le : 07-10-2007
Messages: 129
Snippets: 0
Tutoriels: 0
Hors ligne
Cela peut venir de la taille du bitmap (peut-être): un bitmap trop grand prend pas mal d'espace en mémoire et dessiner avec GDI c'est pas le truc le plus optimisé (puis il y a l'actualisation en mémoire) ^^... Mieux vaut utiliser l'accélération matérielle via OpenGL pour le rendu, ensuite au moment de l'enregistrement tu crée réellement le bitmap.
Enfin, je n'ai personnellement pas de problème en utilisant directement un DC sur la wxScrolledWindow sans qu'il n'y ait de bitmap dedans.
Enfin, je ne suis pas un pro, donc il se peut que je dise des trucs nuls XD...

Rien ne vaut la 2D pour éviter les problèmes de profondeur.
24-11-2007 17:27:29  Re: Scrollbar #17
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
C'est surement ça l'image est trop grande mais en faite moi je veut pas enregistrer l'image à proprement parler à la sortie j'obtient des chiffres dans un fichier texte ^^ donc voilà mais sinon comment t'utilise le truc d'open GL ?
24-11-2007 17:35:00  Re: Scrollbar #18
blend (Membre)
Inscrit le : 07-10-2007
Messages: 129
Snippets: 0
Tutoriels: 0
Hors ligne
Pour ton problème de fichier il faut que tu vois ça.
En fait OpenGL tire partie des capacités de ta carte graphique pour afficher des choses à l'écran, au lieu de le faire via le processeur via GDI. Par contre, il y aurait tout un boulot pour pouvoir utiliser les bitmap de wxWidgets donc ça ne sert strictement à rien ici ^^...

Rien ne vaut la 2D pour éviter les problèmes de profondeur.
24-11-2007 17:50:33  Re: Scrollbar #19
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Ah ok et est-ce que ça marcherai avec SFML pour afficher les images ? J'ai vu que c'était facilement intégrable(?) à wxWidgets.
24-11-2007 17:57:34  Re: Scrollbar #20
blend (Membre)
Inscrit le : 07-10-2007
Messages: 129
Snippets: 0
Tutoriels: 0
Hors ligne
Le truc c'est que tu auras du mal à utiliser les bitmaps de wxWidgets si tu essaies de le faire (j'aurai jamais du parler d'opengl ^^'...)...

Rien ne vaut la 2D pour éviter les problèmes de profondeur.
24-11-2007 18:07:10  Re: Scrollbar #21
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
héhé bon je vérai ça plus tard.
Et sinon comment on fait pour sauter une ligne quand on écrit dans un fichier texte ? 'ai éssayer ça mais ça ne marche pas...

Code wxWidgets:

 
Save.Write(_T("\n"));
 


Une idée peut être ?
24-11-2007 18:10:07  Re: Scrollbar #22
blend (Membre)
Inscrit le : 07-10-2007
Messages: 129
Snippets: 0
Tutoriels: 0
Hors ligne
J'avais un problème semblable avec un ancien projet et je n'avais trouvé comme solution que d'ouvrir (et donc modifier) le fichier avec les fonctions standards du C++. Si quelqu'un a la solution je suis preneur :)

Rien ne vaut la 2D pour éviter les problèmes de profondeur.
24-11-2007 20:21:34  Re: Scrollbar #23
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Salut j'ai enfn trouver après quelque recherche dans les snippet de Xaviou :p

c'est *roulement de tambour......*

Code wxWidgets:

 
wxFile Save;
Save.Write(_T("\r\n"));
 


et voilà comment sauter une ligne :)
a plus.
25-11-2007 15:28:50  Re: Scrollbar #24
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
et geteof?

Itérer est humain, récurser est divin
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Scrollbar