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