Probelem de mise a jour dans une EditBox

Résolu
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006 - 5 sept. 2006 à 12:10
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006 - 5 sept. 2006 à 17:11
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2006 à 16:29
InvalidateRect()
mais bizzare que ne se rafraichisse pas seul.

ciao...
BruNews, MVP VC++
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 sept. 2006 à 12:12
SI tu as coché les styles ownerdraw, enleve les.

Shell
0
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
5 sept. 2006 à 12:32
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]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2006 à 12:44
en readonly, c'est le message WM_CTLCOLORSTATIC.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
5 sept. 2006 à 12:48
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]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2006 à 12:54
Pas besoin de tout cela (surtout GetDC(), en API manquerait ReleaseDC()):

SetWindowText
Traitement de WM_CTLCOLORSTATIC

devraient normalement suffire.

ciao...
BruNews, MVP VC++
0
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
5 sept. 2006 à 16:19
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]
0
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
5 sept. 2006 à 17:11
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]
0
Rejoignez-nous