Rendre une feuille semi-transparente

Contenu du snippet

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



Compatibilité : C++

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.