Rafraichessement des éléments d'une boite de dialogue

Rafraichessement des éléments d'une boite de dialogue - C++ - Programmation

Marsh Posté le 01-10-2008 à 17:36:31    

Salut à tous,
 
Dans mon programme multi thread, j'ai un thread qui se charge de lencer les boites de dialogues.
Au démarrage, deux boites de dialogues sont lançées.
 
Dans la principale, j'ai, entre autre, un Edit control dans lequel j'affiche l'heure courante; pour ce faire, j'ai crée une variable en valeur (CString) que je viens mettre à jour puis UpdateData(false);
 
Mon problème est que dans ce CEdit, l'heure se réecrit par dessus sans effacer la valeur précédente. Le seul moyen de "nettoyer" ça est de faire passer la deuxième boite de dialogue par dessus le CEdit!!!!
 
Donc, comment faire pour le rafraichessement soit "automatique" et ainsi ne plus voir l'heure se réecrire pa dessus?
 
Merci d'avance.

Reply

Marsh Posté le 01-10-2008 à 17:36:31   

Reply

Marsh Posté le 03-10-2008 à 18:33:30    

Personne n'a une petite idée, même une petite piste..????

Reply

Marsh Posté le 06-10-2008 à 20:22:33    

GetDlgItem(ID_DE_TA_BOITE)->SetWindowText(ref_a_ton_CString);
 
 
Plutot que de créer un thread rien que pour rafraichir l'heure, utilise plutot un timer (par contre, gaffe, la précision est bof).

Reply

Marsh Posté le 06-10-2008 à 21:50:48    

mon thread gère toute la partie IHM (plusieures boites de dialogues possibles). Dans l'IHM principale, il y a ce fameux CEdit affichant l'heure!!
 
voici mon code :
 
CString m_CurrentTimeTemp = _T("" );
m_CurrentTimeTemp.Empty();
 m_HeureCourante = CTime::GetCurrentTime();
 if ( m_HeureCourante.GetHour() < 10 ) m_CurrentTimeTemp.AppendFormat(_T("0" ));
 m_CurrentTimeTemp.AppendFormat(_T("%d" ), m_HeureCourante.GetHour());
 m_CurrentTimeTemp.Append(_T(":" ));
 if ( m_HeureCourante.GetMinute() < 10 ) m_CurrentTimeTemp.AppendFormat(_T("0" ));
 m_CurrentTimeTemp.AppendFormat(_T("%d" ), m_HeureCourante.GetMinute());
 m_CurrentTimeTemp.Append(_T(":" ));
 if ( m_HeureCourante.GetSecond() < 10 ) m_CurrentTimeTemp.AppendFormat(_T("0" ));
 m_CurrentTimeTemp.AppendFormat(_T("%d" ), m_HeureCourante.GetSecond());
 
this->GetDlgItem(IDC_G_TIME)->SetWindowText(m_CurrentTimeTemp.GetBuffer(0));
 
 
Et ça ne marche pas mieux!! J'ai essayé plusieurs combinaisons (this->GetDltItem, création d'un contrôle sur le CEdit...) mais rien n'y fait!!!

Reply

Marsh Posté le 06-10-2008 à 21:51:42    

du moins, j'affiche l'heure correctement mais le contenu du CEdit ne 'efface pas avant d'écrire la nouvelle heure

Reply

Marsh Posté le 08-10-2008 à 16:26:10    

J'ai trouvé l'origine du problème mais je n'ai pas de solution pour y remédier!!!!
 
le problème est que mes Cedit ont tous le background transparent (bitmap de fond) via la réception u message WM_CTLCOLOR
 
Lorsque je désactive la transparance, ça marche nickel mais je vois le fond....
 
Quelqu'un aurait-il une idée?

Reply

Marsh Posté le 08-10-2008 à 17:05:14    

Et en forçant le rafraîchissement via InvalidateRect, ça donne quoi (ça va peut-être clignoter un peu beaucoup, surtout si tu forces l'effacement) ?
 
Tu as l'air d'utiliser un controle "Edit", si c'est en read-only pourquoi pas un simple controle "Static" ?

Reply

Marsh Posté le 08-10-2008 à 17:09:37    

j'avais déjà essayé la méthode de Invalidate mais oui, ça clignote beaucoup!!!
 
En fait j'ai un CEdit en ReadOnly auquel j'associe une variable de valeur (CString); j'ai essayé avec une variable de contrôle CEdit et faire SetWindowText mais j'ai le même résultat.
 
comment tu utiliserais le contrôle Static? Celui dans la boite à outils?

Reply

Marsh Posté le 08-10-2008 à 17:15:54    

j'ai essyé avec le contrôle static et c'est la même chose : ça rafraichit bien tant que le background du contrôle n'est pas transparent!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed