Transparence Control

Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007 - 15 mars 2007 à 15:31
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007 - 16 mars 2007 à 16:15
Bonjour, voilà je suis pas le premier ni le dernier à me confronter à la movaise gestion de la transparence dans C#
J'ai fabriqué un composant qui se génère graphiquement lui même et j'ai de temps à autre besoin de générer un control avec un Alpha < 255
Cet élément est draggable et je n'arrive pas à surcharger correctement la méthode paint pour définir sa transparence avec les autres controls (qui sont générés eux aussi dynamiquement).
SolidBrush objB = new SolidBrush(Color.FromArgb(100, base.BackColor));

Bitmap TempImage = new Bitmap(this.Width, this.Height);

Graphics tempGraphics = Graphics.FromImage(TempImage);

tempGraphics.FillRectangle(objB,0,0,this.Width, this.Height);

e.Graphics.DrawImage(TempImage,e.ClipRectangle);

l'élément obtenu n'est pas du tout transparent.
Auriez vous des suggestions ?

Merci d'avance

4 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
15 mars 2007 à 16:35
c'est ça que tu veux faire ?

http://www.csharpfr.com/codes/PANEL-TRANSPARENT_33676.aspx

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
15 mars 2007 à 21:36
Oué j'avais vu cette source et je m'en suis inspiré mais ça ne fonctionne pas vraiment (j'ai des contraintes techniques et je suis en .Net 1.1 ceci peu peut être expliquer celà).
Merci quand même
Je me demande maintenant si il serait possible d'utiliser DirectX et d'appliquer des effets comme la transparence à des controls à travers DirectX ?
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
16 mars 2007 à 01:04
Salut, DirectX ne t'aidera pas sur ce coup là, il ne gère pas du tout les contrôles Windows.. Et si il s'agit d'appliquer de l'alpha blending sur un bitmap, GDI+ c'est très bien le faire.

Ce genre de contrôle marche bien pour la transparence par contre quand ça bouge ça scintille..

public class TransparentControl : Control
{
    private const int WM_NCHITTEST = 0x84;
    private const int WS_EX_TRANSPARENT = 0x20;


    private Pen p = new Pen( Color.Black, 8.0f );
    private Brush b = new SolidBrush( Color.FromArgb( 160, 0, 255, 0 ) );
   
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TRANSPARENT;
            return cp;
        }
    }


    // Juste pour le test, pemet de bouger le contrôle avec la souris.
    protected override void WndProc( ref Message m )
    {
        base.WndProc( ref m );


        if ( m.Msg == WM_NCHITTEST )
            if ( ( int )m.Result == 1 )
                m.Result = ( IntPtr )2;
    }


    protected override void OnMove( EventArgs args )
    {
        //base.OnMove( args );
       
        if ( this.Parent != null )
            this.Parent.Invalidate( this.Bounds, true );
    }
   
    protected override void OnPaintBackground( PaintEventArgs args )
    {
        //base.OnPaintBackground( args );


        Graphics g = args.Graphics;
        g.FillRectangle( b, this.ClientRectangle );
        g.DrawRectangle( p, new Rectangle( 0, 0, this.Width - 1, this.Height - 1 ) );
    }
}
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
16 mars 2007 à 16:15
Merci beaucoup lutinore pour ton aide, je check ça et j'accepte ta réponse qui m'a l'air d'être se que je cherche
0
Rejoignez-nous