IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[Win32] Transparence d'un Edit Control


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut [R�solu] [Win32] Transparence d'un Edit Control
    Bonjour � toutes et � tous,

    A premi�re vue, d'autres avant moi ont rencontr� le m�me probl�me, mais tout ce que j'ai pu lire ne m'a pas permis de le r�soudre.
    J'ai une fenetre dont le fond est enti�rement recouvert par une image.
    Je voudrais que les edits que je cr�e soient compl�tement transparents de mani�re � ce que je puisse continuer � voir l'image de fond � travers les edits.

    Pour le moment, j'ai ceci dans la DlgProc (qui ne fonctionne pas) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    		case WM_CTLCOLOREDIT:
     
    			hbrBack = CreateSolidBrush(RGB(COULEUR_EDIT_R,COULEUR_EDIT_V,COULEUR_EDIT_B));
    			SetBkMode((HDC)wParam, TRANSPARENT);
    			return (int)hbrBack;
    A noter que je cr�e les edits avec CreateWindowEx()

    Merci de vos conseils,
    Bigbang

  2. #2
    Membre exp�riment� Avatar de blackhorus
    Inscrit en
    F�vrier 2003
    Messages
    209
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 209
    Par d�faut
    tu as essay� avec le style WS_EX_TRANSPARENT, ou la fonction SetLayeredWindowAttributes()

    jette un coup d'oeil sur le site de MSDN

  3. #3
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    salut,
    Il me semble que ceci n'est valable que pour 2k et Me, non ?

  4. #4
    Membre exp�riment� Avatar de blackhorus
    Inscrit en
    F�vrier 2003
    Messages
    209
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 209
    Par d�faut
    Citation Envoy� par bigbang
    salut,
    Il me semble que ceci n'est valable que pour 2k et Me, non ?
    eh ben d'apr�s le site de Microsoft :
    Minimum operating systems Windows 2000

  5. #5
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    A vrai dire, j'ai essay� de compiler, et �a n'a pas march�. Le compilo ne connaissait pas les identifiants.
    Et apres j'ai trouv� ceci :
    http://www.codeproject.com/win32/quaker1.asp

  6. #6
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    case WM_CTLCOLOREDIT: 
     
             hbrBack = CreateSolidBrush(RGB(COULEUR_EDIT_R,COULEUR_EDIT_V,COULEUR_EDIT_B)); 
             SetBkMode((HDC)wParam, TRANSPARENT); 
             return (int)hbrBack;
    SetBkMode( TRANSPARENT ) s'applique au text affich�, pas � la brosse utilis�e pour peindre le fond (celle que tu dois renvoyer).
    Essaye de renvoyer NULL.

  7. #7
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    Salut,
    Tout d'abord merci de m'aider.

    J'ai donc remplacer par :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    		case WM_CTLCOLOREDIT: 
     
    			 hbrBack = CreateSolidBrush(RGB(COULEUR_EDIT_R,COULEUR_EDIT_V,COULEUR_EDIT_B)); 
    			 return NULL;
    Mais ceci mets un fond tout blanc dans les edits

  8. #8
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    En fait non �a marchera pas, du moins pas quand il faudra redessiner.
    En fait je me demande s'il faudrait pas redessiner le bitmap et renvoyer NULL pour pas effacer.
    Y'a des exemples de static transparent sur codeproject, tu peux t'en inspirer (cela dit je crois que le mec se cr�e son propre controle au lieu de modifier STATIC...)

  9. #9
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    Tu veux dire qu'au lieu de mettre un fond transparent dans l'edit, tu remets la zone correspondante du fond de l'image ?

  10. #10
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Mais l� tu ne mets pas un fond transparent, tu mets le fond transparent pour le texte dessin� seulement.
    Je pense que oui il faut dessiner le bout de bitmap cach�...
    La transparence avec SetLayeredWindowAttributes c'est pas bon car si tu y arrives, le texte sera lui aussi transparent et... invisible.

  11. #11
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    oui je vois le probl�me.
    et donc comment on fait pour mettre une image en fond d'un edit ? ca se fait facilement ?

  12. #12
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Je pense que dans WM_CTLCOLOREDIT tu peux blitter directement sur le HDC. Reste � d�finir la portion de bitmap � blitter. Tu peux peut �tre rendre le truc un poil g�n�rique en utilisant les coordonn�es de ton edit dans la fen�tre m�re, mais faut un moment ou un autre avoir le bitmap � blitter.

  13. #13
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    Salut,

    Alors c'est sur la bonne voie !
    Voici ce que j'ai maintenant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    		case WM_CTLCOLOREDIT:
     
    			BitBlt(GetDC(hEdit1), 0, 0, 369, 20, hdcBmp, 15, 136, SRCCOPY);
    			BitBlt(GetDC(hEdit2), 0, 0, 369, 20, hdcBmp, 15, 172, SRCCOPY);
     
    			return 0;
    Mais maintenant, d�s que je modifie le contenu de l'edit, il retrouve en partie son aspect initial, c'est � dire avec un fond blanc.
    A quoi cela est-ce du ?

  14. #14
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Hum... Pas bon le GetDC comme �a, tu cr�es des fuites d'objets GDI. Utilise simplement le param�tre wParam, il est l� pour �a.
    Pour que le fond du texte devienne transparent, utilise ce que tu avais fait au d�but:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SetBkMode((HDC)wParam, TRANSPARENT);

  15. #15
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    A vrai dire, je ne vois pas bien comment utiliser wParam �tant donn� qu'il y a plusieurs edits auxquels appliquer un traitement diff�rent (les coordonn�es)

  16. #16
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    j'ai modifi� par ceci, mais toujours le probl�me de fond blanc :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		case WM_CTLCOLOREDIT:
     
    			SelectObject((HDC)wParam, hFontEdit);
    			SetBkMode((HDC)wParam, TRANSPARENT);
     
    			if((HWND)lParam==hEdit1)
    				BitBlt((HDC)wParam, 0, 0, 369, 14, hdcBmp, 15, 136, SRCCOPY);
    			else if((HWND)lParam==hEdit2)
    				BitBlt((HDC)wParam, 0, 0, 369, 14, hdcBmp, 15, 172, SRCCOPY);
     
    			return 0;

  17. #17
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    WM_CTLCOLOREDIT ne doit pas �tre commun � tous les edit. Chacun son traitement. Normal que ton code ne fonctionne pas, wParam c'est un HDC, pas un HWND (rien � voir). Le HWND tu l'as avec lParam, mais je te d�conseille de l'utiliser comme tu fais avec des valeurs cod�es en dur.
    Au lieu d'utiliser des coordonn�es fixes comme �a, utilise GetWindowRect( (HWND) lParam ) afin de r�cup�rer la position de l'edit, et apr�s �a roule 8)

  18. #18
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    salut,

    Je suis d�sol�, mais je ne comprends pas pourquoi mon code ne marche pas. Je distingue bien selon les edits, et j'applique bien le mode TRANSPARENT aux edits
    Si tu pouvais me donner ton id�e sur la chose. Merci beaucoup

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    		case WM_CTLCOLOREDIT:
     
    			hFontEdit =	CreateFont(13, 6, 0, 0, FW_BOLD, 0, 0, 0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH, "Tahoma");
     
    			SelectObject((HDC)wParam, hFontEdit);
    			SetBkMode((HDC)wParam, TRANSPARENT);
     
    			if((HWND)lParam==hEdit1)
    			{
    				BitBlt((HDC)wParam, 0, 0, 369, 14, hdcBmp, 15, 136, SRCCOPY);
    			}
    			else if((HWND)lParam==hEdit2)
    			{
    				BitBlt((HDC)wParam, 0, 0, 369, 14, hdcBmp, 15, 172, SRCCOPY);
    			}
     
    			return 0;

  19. #19
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    extrait MSDN:
    WM_CTLCOLOREDIT
    An edit control that is not read-only or disabled sends the WM_CTLCOLOREDIT message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the edit control.
    A window receives this message through its WindowProc function.


    Return Values
    If an application processes this message, it must return the handle of a brush. The system uses the brush to paint the background of the edit control.
    et donc essaye de retourner une brosse null :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ::GetStockObject(NULL_BRUSH);

  20. #20
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 25
    Par d�faut
    C'est merveilleux, �a marche !
    Merci beaucoup !

    Voici finalement le bout de code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    		case WM_CTLCOLOREDIT:
     
    			hFontEdit =	CreateFont(13, 6, 0, 0, FW_BOLD, 0, 0, 0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH, "Tahoma");
     
    			SelectObject((HDC)wParam, hFontEdit);
    			SetBkMode((HDC)wParam, TRANSPARENT);
    			SetTextColor((HDC)wParam, RGB(COULEUR_TEXT_R,COULEUR_TEXT_V,COULEUR_TEXT_B));
     
    			if((HWND)lParam==hEdit1)
    				BitBlt((HDC)wParam, 0, 0, 369, 14, hdcBmp, 15, 136, SRCCOPY);
    			else if((HWND)lParam==hEdit2)
    				BitBlt((HDC)wParam, 0, 0, 369, 14, hdcBmp, 15, 172, SRCCOPY);
     
    			return (int)GetStockObject(NULL_BRUSH);

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. win32 api - EDIT control
    Par opc0de dans le forum C++
    R�ponses: 0
    Dernier message: 25/04/2011, 16h51
  2. [c++ Win32] Edit Control avec fopen
    Par swo.line dans le forum C++
    R�ponses: 10
    Dernier message: 05/05/2008, 14h38
  3. Positionner le curseur + edit control
    Par Atomikx dans le forum MFC
    R�ponses: 2
    Dernier message: 27/10/2005, 14h51
  4. [Win32] Transparence !COMPLETE! de la fenetre
    Par cyber_N dans le forum Windows
    R�ponses: 2
    Dernier message: 22/10/2005, 21h12
  5. [mfc]edit control
    Par marseillais57 dans le forum MFC
    R�ponses: 4
    Dernier message: 21/06/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo