Positionner une BackgroundImage [Résolu]

Signaler
Messages postés
48
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
Messages postés
48
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
Bonjour !
Voilà mon problème : j'ai une petite image à mettre en fond d'un ListView mais en bas à droite de ce dernier.
Comment faire ? J'ai regardé dans les propriétés mais je n'ai rien trouvé J'ai essayé ça :

Bitmap tmp1 = new Bitmap(@"C:\test02.jpg");
int h = listView2.ClientSize.Height;
int w = listView2.ClientSize.Width;
int bmp_h = tmp1.Height;
int bmp_w = tmp1.Width;
int posY = h - bmp_h;
int posX = w - bmp_w;
Bitmap b = new Bitmap(w, h);
Graphics g = Graphics.FromImage(b);
Rectangle r = new Rectangle(0, posY, bmp_w, bmp_h);
g.DrawImage(tmp1, r);
listView2.BackgroundImage = b;

Mais visiblement, ça ne change rien...

Merci de m'aider.

@+, Kaneda Shotaro

4 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Exact.. J'ai fait quelque chose de beaucoup plus logique, dis moi si tu as encore des effets de bords.

public class MyListView : ListView
{
    private const int WM_ERASEBKGND = 0x14;


    public MyListView( ) : base( )
    {
        this.ResizeRedraw = true;
    }


    protected override void WndProc( ref Message m )
    {
        if ( m.Msg == WM_ERASEBKGND )
        {
            using ( Graphics g = Graphics.FromHdc( m.WParam ) )
            {
                g.Clear( this.BackColor );
                g.DrawImage
                (
                    this.BackgroundImage,
                    new Rectangle
                    (
                        this.ClientSize.Width - 100,
                        this.ClientSize.Height - 100,
                        100,
                        100
                    )
                );
            }


            m.Result = ( IntPtr )1;
            return;
        }


        base.WndProc( ref m );
    }
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Salut, la ListView est dessinée par le système l'évènement Paint n'est pas déclenché c'est ennuyeux.. Dérive de cette classe et mets une image dans la propriété BackgroundImage.

public class MyListView : ListView
{
    private const int WM_ERASEBKGND = 0x14;


    public MyListView( ) : base( )
    {
        this.ResizeRedraw = true;
    }


    protected override void WndProc( ref Message m )
    {
        if ( m.Msg == WM_ERASEBKGND )
        {
            using ( Graphics g = this.CreateGraphics( ) )
            {
                g.Clear( this.BackColor );
                g.DrawImage
                (
                    this.BackgroundImage,
                    new Rectangle
                    (
                        this.ClientSize.Width - 100,
                        this.ClientSize.Height - 100,
                        100,
                        100
                    )
                );
            }


            m.Result = ( IntPtr )1;
            return;
        }


        base.WndProc( ref m );
    }
}
Messages postés
48
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009

Merci beaucoup ! J'ai testé mais ça me provoque 2 problèmes : quand la souris survole les éléments dedans, tout s'éfface dedans sauf l'élément survolé et le fond, de plus, ça provoque une sorte de scintillement.

D'où cela peut-il venir ?

Merci encore !

@+, Kaneda Shotaro
Messages postés
48
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009

C'est parfait ! Merci beaucoup !!!

@+, Kaneda Shotaro