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

MFC Discussion :

Comment rendre tranparent le background d'un CDialog mais pas ses contr�les


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Par d�faut Comment rendre tranparent le background d'un CDialog mais pas ses contr�les
    Bonjour ,

    Je programme depuis peu en Visual C++ 6.0 et on m'a demand� d'�crire une classe CDialog dont le fond (background) est transparent, mais pas ses contr�les contenus.
    J'ai essay� plusieurs tactiques:
    A) surcharger OnCtlColor pour retourner un NULL_BRUSH
    Le probl�me ici est que d�s que l'on d�place la fen�tre le fond ne se met pas � jour et la fen�tre se d�place avec l'ancien fond, ce qui parait "ugly" .

    B) surcharger OnEraseBkgnd pour ne pas peindre le fond (et retourner FALSE)
    C'est la solution qui paraissait la plus simple mais elle a le m�me inconv�nient que la pr�c�dente solution, le fond ne se met pas � jour lorsque la fen�tre est d�plac�e .

    C) Appeler SetLayeredWindowAttributes
    Cette fonction fonctionne bien, la fen�tre est affich�e en translucide en fonction du pourcentage pass� en param�tre. Le probl�me est que je voudrais exclure de la transparence les boutons du dialog afin qu'ils apparaissent opaques.

    D) utiliser SetWindowRgn avec une r�gion d�finie par l'utilisateur � l'aide d'un bitmap
    J'ai pas vraiment essay� cette tactique mais j'ai lu du code qui l'utilisait et je dois dire qu'elle fonctionne bien (m�me si je ne la comprend pas bien), le fond est transparent et se d�place comme tel. Cette solution a pour inconv�nient de devoir d�finir un bitmap pour circonscrire la zone transparente, c'est bien pour un "splash screen" mais c'est plus d�licat pour un CDialog.

    Voil�, j'esp�rait m'en sortir avec un OnPaint bien senti et �ventuellement un BitBlt ou deux entre le window DC et le screen DC, en tous les cas je m'attendais � une solution simple mais il s'agit apparamment d'un probl�me cors�. Merci d'avance pour vos lumi�res.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Par d�faut
    Pour r�pondre � ma propre question il suffit d'utiliser SetLayeredWindowAttributes avec l'option LWA_COLORKEY et de surcharger OnCtlColor avec la m�me couleur dans les deux cas.

    En fait la r�ponse provient de la FAQ Visual C++ mais j'avais pas bien lu:
    http://cpp.developpez.com/faq/vc/?pa...#DialogLayered

    Citation Envoy� par arnaultbonafos Voir le message
    Bonjour ,

    J'ai essay� plusieurs tactiques:
    ...
    C) Appeler SetLayeredWindowAttributes
    Cette fonction fonctionne bien, la fen�tre est affich�e en translucide en fonction du pourcentage pass� en param�tre. Le probl�me est que je voudrais exclure de la transparence les boutons du dialog afin qu'ils apparaissent opaques.
    ...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 25/03/2010, 18h17
  2. R�ponses: 5
    Dernier message: 14/12/2009, 09h36
  3. Background centr� sur IE mais pas sur FF
    Par -Nyk- dans le forum Mise en page CSS
    R�ponses: 13
    Dernier message: 07/01/2009, 01h29
  4. Comment rendre un background cliquable
    Par yule dans le forum Mise en page CSS
    R�ponses: 2
    Dernier message: 11/02/2008, 17h26
  5. R�ponses: 8
    Dernier message: 01/03/2006, 18h19

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