Comment Rendre Une Fenêtre Semi-transparente

Table des matières:

Comment Rendre Une Fenêtre Semi-transparente
Comment Rendre Une Fenêtre Semi-transparente

Vidéo: Comment Rendre Une Fenêtre Semi-transparente

Vidéo: Comment Rendre Une Fenêtre Semi-transparente
Vidéo: Comment rendre une fenêtre étanche 2024, Novembre
Anonim

Avec l'amélioration des technologies d'affichage graphique, l'API des systèmes d'exploitation s'est également améliorée, offrant aux programmeurs de plus en plus d'opportunités pour développer des éléments d'interface non standard. Ainsi, l'une des innovations du système d'exploitation Windows 2000 était les fenêtres en couches, dont certaines parties pouvaient être translucides. Bientôt, une description de l'API pour travailler avec des fenêtres en couches est devenue disponible sur MSDN. Cependant, sur les forums de programmeurs, des questions sur la façon de rendre une fenêtre semi-transparente se posent toujours.

Comment rendre une fenêtre semi-transparente
Comment rendre une fenêtre semi-transparente

Nécessaire

  • - compilateur;
  • - Windows sdk ou framework pour la programmation Windows.

Instructions

Étape 1

Obtenez une poignée sur la fenêtre que vous souhaitez rendre semi-transparente. Recherchez ou créez une fenêtre. Pour le créer, utilisez soit les fonctions API CreateWindow, CreateWindowEx, soit les méthodes wrapper autour de ces fonctions appartenant aux classes du framework utilisé. Le prototype de la fonction CreateWindow ressemble à ceci:

HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, entier x, int y, int nLargeur,

int nHauteur, HWND hWndParent, HMENU hMenu, INDIQUE hInstance, LPVOID lpParam);

Comme vous pouvez le voir, la fonction renvoie un handle vers la fenêtre créée à la suite de l'exécution. Si une classe wrapper est utilisée, utilisez ses méthodes sur l'objet correspondant à la fenêtre créée pour obtenir le handle.

Étape 2

La recherche d'une fenêtre peut être effectuée à l'aide des appels d'API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows et leurs combinaisons. Vous pouvez obtenir un handle vers une fenêtre dans une zone spécifique à l'aide des fonctions WindowFromPoint et ChildWindowFromPoint.

Étape 3

Définissez la fenêtre sur le style étendu WS_EX_LAYERED. Utilisez l'API SetWindowLong ou les méthodes correspondantes des objets wrapper. La fonction SetWindowLong remplace complètement les informations de paramètre de fenêtre modifiables, utilisez-la donc en combinaison avec la fonction GetWindowLong pour récupérer la valeur précédente pour l'ensemble d'indicateurs de style. Par exemple, le style peut être modifié comme ceci:

:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));

Ici, hWnd est le handle de fenêtre trouvé à la suite de l'exécution des actions décrites à l'étape précédente.

Étape 4

Rendez la fenêtre semi-transparente. Utilisez l'API SetLayeredWindowAttributes ou les méthodes des classes wrapper. Le prototype de la fonction SetLayeredWindowAttributes ressemble à ceci:

BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);

Étape 5

Le paramètre hwnd de la fonction doit être un handle de fenêtre valide obtenu à la première étape. Le paramètre crKey est une clé de couleur utilisée pour définir des zones semi-transparentes. Le paramètre bAlpha spécifie la valeur de translucidité. Avec la valeur du paramètre bAlpha égale à 0, les zones "semi-transparentes" seront totalement transparentes. Si le paramètre bAlpha est 255, ils seront complètement opaques. Le paramètre dwFlags détermine le mode d'affichage ultérieur du contenu de la fenêtre. Lorsque l'indicateur LWA_COLORKEY est inclus dans la valeur dwFlags, les zones semi-transparentes de la fenêtre seront déterminées en fonction de la clé de couleur. Lorsque l'indicateur LWA_ALPHA est activé, le paramètre bAlpha sera utilisé pour déterminer la valeur de translucidité.

Étape 6

Pour rendre la fenêtre entière semi-transparente, appelez SetLayeredWindowAttributes avec la valeur de paramètre bAlpha préférée, l'indicateur LWA_ALPHA, mais pas l'indicateur LWA_COLORKEY. Utilisez le handle de fenêtre trouvé comme premier paramètre de la fonction. Par exemple, pour rendre une fenêtre à moitié transparente, utilisez l'appel:

:: SetLayeredWindowAttributes (hWnd, RVB (0, 0, 0), 128, LWA_ALPHA);

Conseillé: