Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[C] API WIN32 Fond de fenêtre transparent

13 réponses
Avatar
maximeoudot
Bonjour =E0 tous,

Je vous pose aujourd'hui cette question apr=E8s =EAtre pass=E9 par des
forums tels que ceux de Comment=E7amarche et autres. Personne n'a jamais
pu r=E9pondre =E0 ma question ou m'a toujours redirig=E9 vers des liens
inutiles.
Je suis d=E9j=E0 all=E9 voir du cot=E9 de msdn, et n'ai rien trouv=E9 de
satisfaisant.

Aussi voici ma question : y-a-t-il un moyen de rendre le fond d'une
fen=EAtre cr=E9e avec une API WIN32 transparent? Qui plus est, sans faire
de copie du background? Un vrai transparent, donc.

Par ailleurs, j'ai une autre question : comment fait-on pour enlever
la console lorsque le programme ouvre la fen=EAtre?

10 réponses

1 2
Avatar
Christian ASTOR
On 25 sep, 22:52, wrote:

Aussi voici ma question : y-a-t-il un moyen de rendre le fond d'une
fenêtre crée avec une API WIN32 transparent? Qui plus est, sans faire
de copie du background? Un vrai transparent, donc.



Avec SetLayeredWindowAttributes()
http://msdn.microsoft.com/en-us/library/ms997507.aspx
ou SetWindowRgn() sur la partie cliente par exemple.
(ou D3D http://www.dhpoware.com/demos/d3dLayeredWindows.html)

Par ailleurs, j'ai une autre question : comment fait-on pour enlever
la console lorsque le programme ouvre la fenêtre?



Chosir Subsystem:Windows au lieu de Subsystem:Console dans propriétés
du Linker de VS...
Avatar
Maxime
> Avec SetLayeredWindowAttributes()http://msdn.microsoft.com/en-us/library/ ms997507.aspx



Le compilateur me dit qu'il ne connaît pas "LWA_COLORKEY" ni
"LWA_bALPHA"...

> Par ailleurs, j'ai une autre question : comment fait-on pour enlever
> la console lorsque le programme ouvre la fenêtre?



Chosir Subsystem:Windows au lieu de Subsystem:Console dans propriétés
du Linker de VS...



J'utilise actuellement Code::Blocks, et je n'ai pas réussi à trouver
cette option de linkage...

P.S. : Merci de ta réponse!
Avatar
domi
Maxime wrote:
Avec SetLayeredWindowAttributes()http://msdn.microsoft.com/en-us/library/ms997507.aspx



Le compilateur me dit qu'il ne connaît pas "LWA_COLORKEY" ni
"LWA_bALPHA"...

Par ailleurs, j'ai une autre question : comment fait-on pour enlever
la console lorsque le programme ouvre la fenêtre?





Chosir Subsystem:Windows au lieu de Subsystem:Console dans propriétés
du Linker de VS...



J'utilise actuellement Code::Blocks, et je n'ai pas réussi à trouver
cette option de linkage...



google dit :

In Code::Blocks, go to the project options (Project ? Properties) and
in the Build targets tab, selection the GUI Application type.

Mais utilise plutot Visual Studio, que toutes les entreprises possèdent.
Avatar
Maxime
On 26 sep, 20:19, domi wrote:
Maxime wrote:
>> Avec SetLayeredWindowAttributes()http://msdn.microsoft.com/en-us/libra ry/ms997507.aspx

> Le compilateur me dit qu'il ne connaît pas "LWA_COLORKEY" ni
> "LWA_bALPHA"...



Le compilateur ne reconnaît pas non plus les fonctions
"UpdateLayeredWindow" et "SetLayeredWindowAttributes" ce qui m'empêche
de changer le ton de transparence... Par ailleurs, je n'arrive pas à
utiliser la structure "BLENDFUNCTION".

P.S. : En utilisant "SetWindowLong" poue mettre un fond totalement
transparent, les images affichées dans la zone client seront-elles
transparentes? Invisibles?
Avatar
Christian ASTOR
On 26 sep, 15:05, Maxime wrote:
> Avec SetLayeredWindowAttributes()http://msdn.microsoft.com/en-us/librar y/ms997507.aspx

Le compilateur me dit qu'il ne connaît pas "LWA_COLORKEY" ni
"LWA_bALPHA"...



Dans winuser.h (SDK à jour), il y a :
#if(_WIN32_WINNT >= 0x0500)
...

Donc il faut au moins :
#define _WIN32_WINNT 0x0500
Avatar
Maxime
> Dans winuser.h (SDK à jour), il y a :
#if(_WIN32_WINNT >= 0x0500)
...

Donc il faut au moins :
#define _WIN32_WINNT  0x0500



Merci beaucoup, maintenant, ça marche!
J'ai, par contre, remarqué que même la barre de titre était devenu
transparente... Il faut que j'utilise un WindowRgn pour créer une
région particulière pour la transparence, c'est bien ça?
Avatar
Maxime
(Désolé pour le plus ou moins double post, je n'ai pas trouvé comment
l'éditer.)

Le problème est que l'image que je charge à l'intérieur est
transparente, elle aussi, même en bitmap... Ou alors je défini un
rectangle où elle se trouve et j'enlève la transparence?
Avatar
Laurent
"Maxime" a écrit dans le message de news:


Le problème est que l'image que je charge à l'intérieur est
transparente, elle aussi, même en bitmap... Ou alors je défini un
rectangle où elle se trouve et j'enlève la transparence?



Si tu veux juste certaines parties transparentes, tu peux le faire avec des
régions que tu combines avec CombineRgn() et donc SetWindowRgn() à la fin
Avatar
Maxime
> Si tu veux juste certaines parties transparentes, tu peux le faire avec d es
régions que tu combines avec CombineRgn() et donc SetWindowRgn() à la fin



Est-ce que celà marcherai aussi si je crée une région contenant
l'image et que je met cette région non transparente?
Avatar
marc
On 28 sep, 12:05, Maxime wrote:
> Si tu veux juste certaines parties transparentes, tu peux le faire avec des
> régions que tu combines avec CombineRgn() et donc SetWindowRgn() à la fin

Est-ce que celà marcherai aussi si je crée une région contenant
l'image et que je met cette région non transparente?



Oui, c'est assez classique de créer une région à partir d'une bitmap
(le fond d'une couleur RGB donnée étant mis transparent)
1 2