Les Snippets

Connexion

Rendre une feuille semi-transparente

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 27/04/2006 07:57:07 et initié par DARKSIDIOUS [Liste]
Date de mise à jour : 09/08/2006 23:12:40
Vue : 19023
Catégorie(s) : API, Trucs & Astuces, WinForm
Langages dispo pour ce code :
- VB6
- C# 1.x, C# 2.x
- C
- C++
- Delphi 5
- Windev
- HTML
- VB.NET 1.x
- Delphi 5
- Voir tous les langages pour ce code snippet



Langage : C++
Date ajout : 05/05/2006
Posté par jfrancois [Liste]

Voici ce qu'il faut faire avec un Visual C++ ancien

1) ajouter ces déclarations dans un fichier d'entête personnel


// --- Utilisation de la fonction "SetLayeredWindowAttributes"
// --- pour régler l'opacité d'une fenêtre
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED  0x00080000
#define LWA_COLORKEY   0x00000001
#define LWA_ALPHA      0x00000002
#endif


typedef BOOL (WINAPI* lpfnSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);

 

2) Fonction de réglage de l'opacité d'une fenêtre à implémenter dans le programme


bool SetOpacity
(
    HWND hWnd     // E:Handle de la fenêtre
   ,int  iOpacity // E:pourcentage d'opacité (0=invisible à 100=opaque=totalement visible)
)                 // S:true=ok false=non réalisé (OS incompatible ou outil non trouvé)
{
   // --- Vérifier que l'on tourne sous Win2K
   OSVERSIONINFO Version = {sizeof(OSVERSIONINFO)};
   GetVersionEx(&Version);
   bool bWin2K = (Version.dwPlatformId == VER_PLATFORM_WIN32_NT && Version.dwMajorVersion >= 5); 
   if (! bWin2K) return false; // OS incompatible

   // --- Pointer la fonction utilisée dans la DLL "USER32.DLL"
   HMODULE hUser32 = GetModuleHandle("USER32.DLL");
   if (hUser32 == NULL) return false; // DLL non trouvée
   lpfnSetLayeredWindowAttributes SetLayeredWindowAttributes =
      (lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32,"SetLayeredWindowAttributes");
   if (SetLayeredWindowAttributes == NULL) return false; // fonction non trouvée

   // --- Ajouter le style nécessaire à la fenêtre
   SetWindowLong(hWnd,GWL_EXSTYLE,GetWindowLong(hWnd,GWL_EXSTYLE) | WS_EX_LAYERED);

   // --- Assurer que le pourcentage d'opacité soit entre 0 et 100
   iOpacity = iOpacity < 0 ? 0 : (iOpacity > 100 ? 100 : iOpacity);

   // --- Régler l'opacité
   SetLayeredWindowAttributes(hWnd,0,(BYTE)(iOpacity * 255 / 100),LWA_ALPHA);
   return true;
}

 

3) Remarque


Dans la fonction "SetLayeredWindowAttributes", la constante LWA_ALPHA permet de régler
l'opacité générale de la fenêtre avec le niveau passé dans le troisième argument
(0=invisible à 255=opaque)
(et la couleur passée en deuxième argument, 0 ci-dessus, n'a aucune signification).

Cette constante peut être remplacée par LWA_COLORKEY pour ne régler l'opacité de la
fenêtre que par rapport à une couleur qui doit alors être passée dans le deuxième argument (et le niveau d'opacité passé en troisième argument n'a aucune signification).

Exemple :

   COLORREF rouge = RGB(255,0,0);
   SetLayeredWindowAttributes(hWnd,rouge,0,LWA_COLORKEY);


rendra transparent tout ce qui est rouge dans la fenêtre
(c'est à dire que les pixels rouges ne sont pas visualisés).



Snippets en rapport avec : Transparence, Setlayeredwindowattributes



Codes sources en rapport avec : Transparence, Setlayeredwindowattributes

{Delphi} FORCER LA TRANSPARENCE DES FENÊTRES (WINDOWS XP ET SUPÉRIEUR)
Ce petit programme permet de lister les fenêtres visibles sur votre système et de gérer leur transpa...

{Visual Basic, VB6, VB.NET, VB 2005} TRANSPARENCE GÉNÉRALISÉE DES PICTUREBOX
Ce code fait suite à celui proposé pour la transparence de deux images. Il permet de traiter la tran...

{Javascript / DHTML} FENETRE QUI SE DEPLACE
Creation d'un calque qui se deplace avec un bouton pour reduire la fenetre et un bouton pour la ferm...

{Visual Basic, VB6, VB.NET, VB 2005} TRANSPARENCE DES PICTUREBOX
Il s'agit de dessiner deux pictureBox se chevauchant et en définissant une couleur de transparence e...

{Visual Basic, VB6, VB.NET, VB 2005} COOL CAPTURE BMP TO ICO
Juste pour s’amuser. Mais peut être utile ! Une form transparente qui capture l’image se trouvant d...

{Visual Basic, VB6, VB.NET, VB 2005} TRANSITION FLUIDE PAR FONDU ENTRE IMAGES DE GARNDE TAILLE
Mon problème est de réaliser dans un programme Visual Basic un swap de plusieurs images de grande ...

{Javascript / DHTML} BUG FIX DE LA TRANSPARENCE DES PNG SOUS IE 6
Un code très court en css/javascript pour régler la non-prise en charge de la transparence sous Inte...

{Visual Basic, VB6, VB.NET, VB 2005} FORMS SKINNABLES STYLE WIDGET (VB2005)
Fenêtre skinnable en Visual Basic 2005. Permet l'affichage de Fenêtres à partir de fichiers png, ...

{Visual Basic, VB6, VB.NET, VB 2005} IMAGE PNG COMME SPLASHSCREEN (FAUX TRANSPARENT)
J'ai longtemps cherché un moyen pour faire cohabiter le PNG avec vb6, puis j'ai trouvé un code sur v...

{C# / C#.NET} RENDRE UNE FENETRE TRANSPARENTE EN CAS DE DÉPLACEMENT DE CELLE CI PAR L'UTILISATEUR
Lorsque que l'on déplace une fenetre c'est souvant pour voir ce qu'il y a en dessous, mais où que l'...