Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1101 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  problèmes avec CWnd::OnCtlColor

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problèmes avec CWnd::OnCtlColor

n°1802519
cyte
Posté le 20-10-2008 à 18:24:00  profilanswer
 

salut à tous,
 
Dans un précédent post, je posais le problème de rafraichissement de CEdit (ré-écriture par dessus du texte sans effacement de la valeu r précédente).
 
Je viens de m'apercevoir que ça vient de ce que je fais la fonction Windows OnCtlColor, ce qui implique deux questions :
 
1) : Pourquoi le fait de rendre le fond transparent d'un CEdit me provoque le problème décrit ci-dessus et comment le résoudre? (lorsque je retire la partie :  
 

Code :
  1. pDC->SetBkMode(TRANSPARENT);


 
ça marche mieux)
 
2) Pourquoi la fonction OnCtlColor n'est pas appelée pour redessiner mes "picture control"? En effet, je ne rentre jamais dans cette condition :
 

Code :
  1. if( pWnd->GetDlgCtrlID() == IDC_G_FOND )
  2. {
  3.  pDC->SetBkMode(TRANSPARENT);      // Set the Background Mode to TRANSPARENT
  4.  hbr = m_cDesign.m_Brush_Hollow;
  5. }


 
avec IDC_G_FOND qui est un picture control de type Bitmap
 
Voilà, merci d'avance pour vos lumières!!!!

mood
Publicité
Posté le 20-10-2008 à 18:24:00  profilanswer
 

n°1802651
antsite
Je me souviens
Posté le 21-10-2008 à 03:29:41  profilanswer
 

Pour ta seconde question, comme expliqué ici :
http://msdn.microsoft.com/en-us/library/0wwk06hc(VS.80).aspx
ou plus clairement ici :
http://msdn.microsoft.com/en-us/library/bb432504.aspx
 
WM_CTLCOLOR / OnCtlColor n'est appelé que pour, je cite, "list boxes, the list boxes of combo boxes, message boxes, button controls, edit controls, static controls, and dialog boxes".
 
Je te laisse conclure.


Message édité par antsite le 21-10-2008 à 03:31:02
n°1802993
cyte
Posté le 21-10-2008 à 23:33:20  profilanswer
 

C'est ce que j'avais lu mais un picture control, c'est un static control, non (une variable de contrôle est un CStatic)?

n°1803009
antsite
Je me souviens
Posté le 22-10-2008 à 05:53:13  profilanswer
 

oui tu as raison je n'ai pas fait attention.
 
Les differents styles de controles static ne reagissent pas tous de la meme maniere a WM_CTLCOLOR. Par exemple MSDN dit de ne pas traiter ce message pour SS_SIMPLE il me semble, ou du moins le HBRUSH retourne est inutilise.
 
Hypothese :
Pour un SS_BITMAP si on y reflechit un peu : ce controle contient un bitmap, donc le systeme y peint uniquement un bitmap, une couleur de fond n'a pas de sens dans cette situation ? Surtout que MSDN dit bien que le control BITMAP sera automatiquement redimensionne a la taille du bitmap.
 
Donc que veux-tu faire au juste ? Tes controles static seront dimensionnes automatiquement a la taille du bitmap, donc a quel moment comptes-tu voir une couleur de fond ?


Message édité par antsite le 22-10-2008 à 13:05:39
n°1803139
cyte
Posté le 22-10-2008 à 12:24:21  profilanswer
 

je voudrais modifier la couleur de fond pour rendre tranparent un GIF animé (en utilisant ne classe spéciale); mon contrôle est d'un type qui dérive de CStatic.
Remarque : le gif animé est crée avec un fond transparent mais dans MFC, le fond est de la couleur du sytème (gris moisi) alors que ce gif peut être mis par dessu un bitmap.
 
A la base, j'utilisais WM_CTLCOLOR pour d'autres bitmap "fixes" mais au final, ça ne sert à rien, comme tu le précisais.
 
Sinon, as-tu une idée pour remédier au problème du fond tranparent utilisé sur un CEdit?
 

n°1803390
antsite
Je me souviens
Posté le 23-10-2008 à 01:56:20  profilanswer
 

Non je n'ai pas d'idee, mais je te suggere de clarifier ton probleme et de citer le post auquel tu fais reference (ou au moins donner le lien) pour avoir plus chance d'obtenir des reponses.


Message édité par antsite le 23-10-2008 à 01:56:38
n°1803491
cyte
Posté le 23-10-2008 à 12:32:40  profilanswer
 

en fait c'est dans ce même post, il s'agit de ma première question posée

n°1803496
antsite
Je me souviens
Posté le 23-10-2008 à 12:51:20  profilanswer
 

je parlais de l'autre topic cite au debut.
 
je n'ai jamais essaye de rendre le fond d'un edit transparent, c'est peut-etre possible, essaie en faisant SetBkMode(TRANSPARENT) et en retournant le hollow_brush comme dans ta question 2 dans OnCtlColor. Honnetement je doute que ca marche aussi facilement, mais si c'est le cas et bien n'hesite pas a nous le faire savoir !

n°1804295
cyte
Posté le 24-10-2008 à 17:08:11  profilanswer
 

salut,
 
Si, de cette manière ça marche nickel!!!  
 
Mais le problème, c'est que lorsque je mets à jour la variable de valeur (CString) associée au CEdit, cette nouvelle valeur est réecrite par dessus visuellement parlant; par exemple si j'affiche "5" puis "6", alors le 6 sera affiché sur le 5... Suis-je clair..??

n°1804414
antsite
Je me souviens
Posté le 25-10-2008 à 01:35:02  profilanswer
 

oui oui j'avais bien compris, mais regarde ce qu'il fait :
- edit est vide, ok le fond est hollow-brush donc c transparent avec ce qu'il y a en dessous
- edit est maintenant rempli avec du texte, si tu ecris qqch de nouveau, le background utilise pour effacer avant reecriture est toujours HOLLOW_BRUSH et donc il n'efface pas ce qui est en dessous, ton ancien texte est reecrit par dessus, sans etre efface (ben oui c'est bien ca un HOLLOW_BRUSH).
 
C'est ce a quoi je pensais en disant que ca m'etonnerait quoi ca soit aussi simple  ;)  
 
sinon il semblerait que la solution soit de creer non pas un HOLLOW_BRUSH mais un brush avec dedans ton bitmap (le fond/background quoi), ainsi ca donnera l'illusion que ton edit est transparent (en fait il ne l'est pas, c'est juste que son fond est pareil a ce qu'il y a en dessous).
 
http://www.codeproject.com/KB/mobi [...] trols.aspx
 
C'est pour Windows Mobile, mais il n'y a pas de raison que ca ne marche pas ailleurs.
 
http://www.codeproject.com/KB/mobile/transparent_controls/transparent_controls.jpg

mood
Publicité
Posté le 25-10-2008 à 01:35:02  profilanswer
 

n°1804447
cyte
Posté le 25-10-2008 à 13:02:40  profilanswer
 

Merci beaucoup , je vais essayer de m'en inspirer!!
Je te tiens au courant.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problèmes avec CWnd::OnCtlColor

 

Sujets relatifs
[Résolu] Quelques problèmes de CSS avec IE7problèmes de sessions et de variables [- soucis Mis à Jour -]
[VB.NET]Problèmes styles richtextboxDiv et CSS.... : Problèmes de longueurs
Problêmes de jointure entre 3 tables[SDL] problèmes chargement d'images
Problèmes de tableaux[PHP] problèmes avec balises html
Problème erreur ifDeux navigateurs = Deux problèmes complémentaires
Plus de sujets relatifs à : problèmes avec CWnd::OnCtlColor


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR