begin process at 2012 05 30 00:13:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Opacité d'une EditBox


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Opacité d'une EditBox

vendredi 22 août 2008 à 17:07:07 | Opacité d'une EditBox

Parmesan

Bonjour,
Voila j'ai un petit problème que je n'arrive pas à résoudre.
Je travaille sur Dev c++ en Windows Applications, en utlisant les api win32
Je possède une éditBox centrée sur une fenetre, configurée normalement.

Apres recherche sur internet sur l'opacité des fenetres, j'ai trouvé les fonctions à utiliser :

- SetWindowLong( hWnd ,GWL_EXSTYLE , GetWindowLong(hWnd,GWL_EXSTYLE)  |  WS_EX_LAYERED);
- SetLayeredWindowAttributes(hWnd , 0 , (BYTE)(iOpacity * 255 / 100) ,LWA_ALPHA);
Avec iOpacity un Entier permettant de definir l'opacité exact pour la fenetre.( % de 0 à 100 pour l'opacité)

J'ai testé ces fonctions et elles marchent à merveille, pour une fenetre "Normale" par exemple :

    hwnd = CreateWindowEx (
           0,                                                       /* Extended possibilites for variation */
           szClassName,                                    /* Classname */
           "Windows App",                               /* Title Text */
            WS_OVERLAPPEDWINDOW,    /* default window */
           CW_USEDEFAULT,                      /* Windows decides the position */
           CW_USEDEFAULT,                      /* where the window ends up on the screen */
           500,                                                  /* The programs width */
           700,                                                  /* and height in pixels */
           NULL,                                           /* The window is a child-window to desktop */
           NULL,                                           /* No menu */
           hinst,                                             /* Program Instance handler */
           NULL                                            /* No Window Creation data */
           );

La fenetre devient transparente à souhait.

Maintenant mon probleme se pose. Je definis une nouvelle fenetre de classe "edit" ce qui me donne une editBox.
Je la centre sur ma fenetre "mere" et la je souhaite la rentre transparente ou semi-transparente.
(La raison est que j'ai chargé un BitMap en fond de l'application mere, et que je souhaite la voir a travers mon editbox)

Ayant récupéré son hwnd, je le donne aux fonctions décrites si dessus, et là,  malheur, cela ne marche pas.
(S'u été trop simple xD )

Je test le retour de fonction et vois que SetWindowLong me retourne Faux, ainsi il ne donne pas le style necessaire pour rendre la fenetre transparente ( WS_EX_LAYERED  )

Voila, je seche ici, et je souhaite un peu d'aide pour me débloquer. Si vous avez une idée pour résoudre mon probleme, ou une autre fonction qui me permet d'arriver a mes fins, je suis preneur :)

Autres infos :  mon editBox est définie comme ceci :

hVisu = CreateWindowEx ( 0, "edit", 0 ,                  
               WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,                   
               0 , 0 , 100, 100, hwnd,  (HMENU) ID_VISU ,  hinst,  NULL); 

(Je pense que cela est du a WS_CHILD qui empeche au style WS_EX_LAYERED de s'ajouter via   SetWindowLong )

Merci de votre aide




samedi 23 août 2008 à 14:40:28 | Re : Opacité d'une EditBox

racpp

Administrateur CodeS-SourceS
Salut,
Effectivement, SetLayeredWindowAttributes() ne marche pas avec les contrôles enfants. Pour résoudre ton problème je pense à deux solutions qui nécessitent le sous-classment de l'Edit pour traiter le message WM_PAINT ou WM_ERASEBKGND.
1- Transparence totale:
- A partir du bitmap de fond, créer un HDC en mémoire déclaré en global.
- Dans la procédure de sous-classement, faire un BitBlt() de la portion du  HDC en mémoire correspondant aux coordonnées de l'Edit  vers le HDC de ce dernier pendant le traitement de WM_PAINT ou WM_ERASEBKGND.
2- Transparence partielle:
- A partir de l'image bmp de fond, copier la portion correspondant à l'Edit pour créer un nouveau bitmap.
- Retoucher ce nouveau bitmap pour avoir l'effet de transparence voulu.
- Utiliser ce nouveau bitmap comme image de fond de l'Edit.

Si j'ai un peu de temps je peux te faire un petit exemple de la première solution.
samedi 23 août 2008 à 19:14:50 | Re : Opacité d'une EditBox

racpp

Administrateur CodeS-SourceS
Je viens de déposer le code source utilisant la première solution:
Edit et Static transparents sur fond BMP
samedi 23 août 2008 à 22:57:26 | Re : Opacité d'une EditBox

Parmesan

Merci beaucoup, j'ai prit connaissance de ta source, et j'avoue que je pensais pouvoir m'en sortir sans passer par le découpage de la portion correspondante à l'édit, et ensuite la mise en fond... mais finalement il s'avère que c'est moins compliqué que je ne le pensais. (Peut être à cause du code d'exception que tu as postés :)  )

C'est une piste que je vais suivre, car je pense qu'elle me permettra de résoudre mon problème :)
Grâce a ton explication codée, il ne me reste plus qu'à trouver la manière de retoucher le bitmap obtenu pour avoir un effet de transparence partiel.

Par contre j'ai du mal à saisir la raison pour laquelle les contrôles enfants ne peuvent pas utiliser la fonction SetLayeredWindowAttributes() ...  Bizar ... Enfin bref c'est la prog xD

Merci encore !
jeudi 13 août 2009 à 16:13:26 | Re : Opacité d'une EditBox

nassim92

slt,j´ai le mm probleme je travaile avec visual c# et je voudrais bien avec le trackbar reglé opacité de ma fenetre je n´arrive pas a trouvé la source pour ca.est ce que kelkun peut m´aidé.
Merci



Cette discussion est classée dans : fenetre, hwnd, ws, editbox, opacité


Répondre à ce message

Sujets en rapport avec ce message

rafraichissement fenetre, ou creation de fenetre dans fenetre [ par kuruma ] Bonjour qq'un pourrait il m'indiquer comment créer une fenetre dans une autre fenetre, ou alors comment allouer une zone de ma fenetre principale, en Application MDI [ par LordBob ] Bonjour a tous,voila j'essaie de créé ma première application MDI, mais j'ai beaucoup de mal, surtout que je n'ai pas trouvé de tutorial sur le net, e Fenetre fille [ par mogwai93 ] Bonjour, je cherche à inserer dans une zone d'une fenetre, une autre fenetre avec scrollbar. sauf que, j'ai des resultats bizarres : --------- LRESU Ajout d'une fenetre supplémentaire en plus de la fenetre principale dans un programme en win32 [ par djin94 ] Bonjour à tous. Je butte actuellement sur un problème. Je souhaite en fait ajouter une fenetre transparente avec CreateWindowEx( ) pour créer une OSD Tabulation dans les champs d'une fenetre [ par billy5938 ] Bonjour,Je veux pouvoir parcourir les champs d'édition (ou même des checkBox) d'une fenetre. En utilisant la methode IsDialogMessage dans la boucle de TRANSPARENTE [ par kiki67100 ] Salut voila jai trouver un code mais une fenetre TRANSPARENTE http://files.codes-sources.com/fichier.aspx?id=9615&f=Main.cpp  mais le probleme se que Sous classer plusieurs controles dans une classe [ par julien_boss ] Bonjour,je vous détail l'ossature de ma classe, qui crée une fenetre :jappelle une methode Create() qui va ... créer la fenetre, je fais passer dans l Problème avec fichier manifest [ par Sceyllia ] Bonjour à tous, J'aurais besoin de l'avis de connaisseurs en c/c++ pour m'éclairer sur le soucis que j'ai depuis quelques semaines concernant ce morc Problème de création d'une progressBar [ par tibob51 ] Bonjour, ayant eu des problèmes sur un programme pour faire avancer une progressbar j'ai voulu faire un programme de test, mais problème dans celui ci Probleme Bouton [Api Windows] [ par fender6 ] Salut, J'ai un problème lorsque je veux créer un bouton , celui ne s'affiche pas dans la fenêtre pourtant je n'ai pas d'erreurs a la compilation .


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,600 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales