[C] API WIN32 Fond de fenêtre transparent

Le
maximeoudot
Bonjour à tous,

Je vous pose aujourd'hui cette question après être passé par des
forums tels que ceux de Commentçamarche et autres. Personne n'a jamais
pu répondre à ma question ou m'a toujours redirigé vers des liens
inutiles.
Je suis déjà allé voir du coté de msdn, et n'ai rien trouvé de
satisfaisant.

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.

Par ailleurs, j'ai une autre question : comment fait-on pour enlever
la console lorsque le programme ouvre la fenêtre?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #20229381
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...
Maxime
Le #20231781
> 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!
domi
Le #20233431
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.
Maxime
Le #20234371
On 26 sep, 20:19, domi
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?
Christian ASTOR
Le #20234921
On 26 sep, 15:05, Maxime
> 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
Maxime
Le #20236351
> 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?
Maxime
Le #20239391
(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?
Laurent
Le #20240551
"Maxime"

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
Maxime
Le #20242101
> 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?
marc
Le #20243461
On 28 sep, 12:05, Maxime
> 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)
Publicité
Poster une réponse
Anonyme