Positionner une BackgroundImage

Résolu
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009 - 2 avril 2007 à 21:11
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009 - 9 avril 2007 à 21:23
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
4 avril 2007 à 15:55
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 );
    }
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 avril 2007 à 01:29
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 );
    }
}
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
3 avril 2007 à 20:23
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
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
9 avril 2007 à 21:23
C'est parfait ! Merci beaucoup !!!

@+, Kaneda Shotaro
0
Rejoignez-nous