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.
Partager