Probelem de mise a jour dans une EditBox [Résolu]

Signaler
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006
-
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006
-
Salut

Je suis MSVC++2005.
J ai un probleme lorsque j'essaie de mettre un controle (editBox) a jour. Il m'écrit mes string les uns par dessus les autres ?
Je pense que j ai omis quelque chose quelque part. Est ce que quelqu'un pourrait me renseigner ?

J'ai utilisé plusieurs méthodes pour parvenir à mes fins, sans succés...

void frmSplash::setTxt(char *psTxt){
    if(psTxt != NULL){
        SetDlgItemTextA(IDC_SPLASH_EDIT, psTxt);
        UpdateWindow();
      }
}
   

Vers l'infini et au delà... [Q]

8 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
InvalidateRect()
mais bizzare que ne se rafraichisse pas seul.

ciao...
BruNews, MVP VC++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
SI tu as coché les styles ownerdraw, enleve les.

Shell
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

Je te remercie d etre venue si vite a mon secours.

Je ne vois pas vraiment de quoi tu parles. Je ne me rappelles pas avoir vu 'ownerdraw' quelque part en fait.

Par ailleurs, j'ai été maladroit dans l énoncé de mon probleme. Hormis la faute de frappe que j'ai fait dans le titre, j'ai oublié de préciser que mon EditBox etait en mode ReadOnly et que j'avais rendu transparente en interceptant le message de colorisation des controles:

...
        case CTLCOLOR_EDIT:
            pDC->SetBkMode(TRANSPARENT);
            hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
            break;

Vers l'infini et au delà... [Q]
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
en readonly, c'est le message WM_CTLCOLORSTATIC.

ciao...
BruNews, MVP VC++
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

Oui j ai vu, j les également rajouté. Mais ca ne change rien. Les textent se supperposent. J'ai aussi essayé de réaffecter le mode TRANSPARENT au contexte de mon EditBox en vain :

void frmSplash::setTxt(char *psTxt){
    if(psTxt != NULL){
        CEdit *txtTmp = (CEdit *)GetDlgItem(IDC_SPLASH_EDIT);
        CDC *pDC = txtTmp->GetDC();
        pDC->SetBkMode(TRANSPARENT);
        txtTmp->SetWindowTextA(psTxt);
        UpdateWindow();
    }
}

Il faudrait peut etre que j efface le fond et que je le remette TRANSPARENT apres.

Vers l'infini et au delà... [Q]
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Pas besoin de tout cela (surtout GetDC(), en API manquerait ReleaseDC()):

SetWindowText
Traitement de WM_CTLCOLORSTATIC

devraient normalement suffire.

ciao...
BruNews, MVP VC++
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

Excusez moi d'avoir pris du temps pour répondre (repas + coupre d'électrécité, le bonheur quoi).

En fait je me suis rendu compte que je vous avais aiguillé sur un faux probleme. Je croyais que mon probleme venait de l'apparence de mon EditBox, et que donc la solution venait de mon contexte graphique. De là, nous nous sommes concentré sur la transparence de mon controle.

Je me suis aperçu que mon probleme ne venait pas forcément de là.
Ce que je ne vous ai pas dit c'est que je venais mettre a jour mon controle depuis ma fenetre parente. La fenetre ou se trouve l'EditBox étant ouverte non modalement.
Apres plusieurs test à la mord moi le noeud je me suis apercu que j'arrivais à mettre à jour ma fenetre en faisant ceci :

dlgAttente->ShowWindow(SW_HIDE);
dlgAttente->ShowWindow(SW_SHOWDEFAULT);
dlgAttente->SetDlgItemTextA(IDC_SPLASH_EDIT, "Toto is not a hero");
dlgAttente->UpdateWindow();

Du coup je me dis que c'est parce que je n'arrivais pas raffraichir ma fenetre comme il faut, que mon champ EditBox ne se met pas à jour correctement.

Je suis désolé de vous avoir fait cherché dans une mauvaise voix

Cependant je pense que vous situez peut etre mieux le probleme et que vous avez en tete une meilleur solution que la mienne ( ShowWindow(SW_HIDE); puis ShowWindow(SW_SHOWDEFAULT); ) Il doit certainement existé une fonction de raffraichissement plus habile que ce que je fais.

Vers l'infini et au delà... [Q]
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

J'ai utilisé Invalidate() et ca fonctionne bien. Je te remercie.

Pour le non raffraichissement, il me semble avoir eu le même problème en VB a une époque. Et à bien y réfléchir, ce n'est pas plus mal que je force un OnPaint() de la fenêtre.

Merci encore.

Vers l'infini et au delà... [Q]