Changer couleur texte

Résolu
cs_kam42 Messages postés 12 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 9 mai 2008 - 5 déc. 2007 à 16:30
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 9 déc. 2007 à 15:43
salut à tous ;
j'ai un gros probleme; j'ai programmé l'ouverture d'un fichier texte en MFC que j'affiche dans la vue. Mon souci est que je dois changer le fond d'un seul mot dans le texte et je n'y arrive pas. je connais que la fonction setBkColor() , mais cele ci change carrement tout le fond du texte donc ça m'arrange pas .

Exist-il une fonction pour ça ?
es ce que je devrais choisir un autre conteneur pour le texte par exple(CrichEdit, CEdit,....) plu^tôt que la vue ?

voici mon code d'affichage :

void CMotifView::OnDraw(CDC* pDC)
{
 CMotifDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;


 // TODO : ajoutez ici le code de dessin pour les données natives
 // je verifie que le fichier est ouvert
 if(pDoc->m_ouvertdoc==true)
 {
 // conteneur qui contirndra le texte 
 CRect rect ;
 GetClientRect(&rect);
 // ecriture du texte dans la vue active du document
 int n= strlen(pDoc->m_pbuf) ;
 pDC->DrawText((pDoc->m_pbuf),n, &rect,0);
  }
}
merci d'avance

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 déc. 2007 à 09:22
Tu as regardé les messages du richdit dans MSDN ? il y a tout ce qu'il faut.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 déc. 2007 à 16:40
Prends un richedit.

ciao...
BruNews, MVP VC++
0
cs_kam42 Messages postés 12 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 9 mai 2008
8 déc. 2007 à 00:28
salut à tous ;
j'ai essayé avec un richedit, mais je crois que là n'est pas le probleme. parceque meme avec ça je ne peux modifier la couleur ou le fond que de tout le texte, or moi je veux juste modifier une partie du texte.

j'ai eu une idée pour ça: decomposer mon texte en trois CStrings

le premier CString sera les caracteres avant le  mot ke je veux modifier
le deuxieme CString sera le mot ke je veux modifier
et le troisieme sera les caracteres apres le mot ke je veux modifier

et juste avant d'afficher le deuxieme CString je change la couleur du pen

le probleme est que je sais pas comment afficher trois variables dans la vue , l'une apres l'autre.

t'aurais pas une idée pour ça ? merci d'avance
0
cs_kam42 Messages postés 12 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 9 mai 2008
9 déc. 2007 à 14:08
merci BruNews;


j'ai bien cherché, je vois comment ça fontionne mais j'arrive pas à savoir ou placer mon code.


Mon probleme actuellement :
quand j'essaye dans la methode Oninitialupdate(), ça marche niklel au lancement du programme, le code est le suivant:
void CRichView::OnInitialUpdate()
{
 CRichEditView::OnInitialUpdate();
 CRichEditCtrl& theCtrl=GetRichEditCtrl();
 CString str="kamano" ; ;
 theCtrl.SetWindowText(str);
 theCtrl.SetSel(0,4);//select hello as the word to be formatted with different color
 CHARFORMAT cf;
 cf.cbSize = sizeof(CHARFORMAT);
 cf.dwMask = CFM_COLOR ;
 cf.crTextColor = RGB(255,0,0);
 //cf.bCharSet="hmfcjhcccccgh" ;
 cf.dwEffects = 0;//we do not want CFE_AUTOCOLOR , since this will choose GetSysColor value.
 theCtrl.SetWordCharFormat(cf);
 theCtrl.SetSel(0,0);//now, deselect text
 // Définir les marges d'impression (720 twips = 1/2 pouce)
 SetMargins(CRect(720, 720, 720, 720));
}
le probleme avec cette methode est que ça se produit qu'une seule fois, au lancement du programme. alors j'ai essayé de mettre ce code dans le OnPaint() pourque ça s'actualise en fonction du booleen
void Cessai2View::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO : ajoutez ici le code de votre gestionnaire de messages
 // N'appelez pas CRichEditView::OnPaint() pour la peinture des messages
 Cessai2Doc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;
 
 CString str="jetestemonprogramme ";
 dc.TextOut(0,0,str) ;
 if(pDoc->m_ouvertdoc1==true)
 {
 CRichEditCtrl& theCtrl=GetRichEditCtrl();
 GetWindowText(str) ;
 theCtrl.SetSel(0,4);//select hello as the word to be formatted with different color
 CHARFORMAT cf;
 cf.cbSize = sizeof(CHARFORMAT);
 cf.dwMask = CFM_COLOR ;
 cf.crTextColor = RGB(255,0,0);
 //cf.bCharSet="hmfcjhcccccgh" ;
 cf.dwEffects = 0;//we do not want CFE_AUTOCOLOR , since this will choose GetSysColor value.
 theCtrl.SetWordCharFormat(cf);
 theCtrl.SetSel(0,0);//now, deselect text
 // Définir les marges d'impression (720 twips = 1/2 pouce)
 SetMargins(CRect(720, 720, 720, 720));
 


 }
}
mais ce code ne marche pas !
Alors je serai très joyeux que tu me donnes une piste.
merci d'avance
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 déc. 2007 à 15:43
0
Rejoignez-nous